Docker: Come creare immagini Apache Karaf per ARM e ARM64
Tags: blog, containers, apachekaraf, buildx
Published: 2020-09-10 21:15:46

---
title: Docker: Come creare immagini Apache Karaf per ARM e ARM64
published: true
date: 2020-09-09 23:10:46 UTC
tags: Blog,Containers,ApacheKaraf,Buildx
canonical_url: https://www.dontesta.it/2020/09/10/docker-how-to-create-apache-karaf-images-for-arm-and-arm64/
---

Recentemente ho pubblicato l’articolo [Raspberry Pi: Come eseguire un Docker Container Apache Karaf 4.2](https://www.dontesta.it/2020/08/23/raspberry-pi-come-eseguire-docker-container-apache-karaf/) focalizzato sull’installazione di  **Docker** su Raspberry Pi e su come eseguire un container  **Apache Karaf** basato sull’immagine Docker [**amusarra/karaf:4.2.9**](https://hub.docker.com/r/amusarra/karaf/tags).

Nel corso di questo articolo vedremo come creare l’immagine Docker di Apache Karaf per architetture **linux/arm** e **linux/arm64**. È possibile applicare lo stesso metodo per la produzione d’immagini Docker **multi architettura** per qualunque tipo di applicazione.

Per seguire con efficacia questo breve articolo, è consigliata la conoscenza base di Docker.

 

## 1. Il nostro amico: Buildx

Grazie alla partnership tra Docker e ARM (vedi [Docker announced a partnership with Arm](https://dockr.ly/2VYOOWd)) annunciata nel mese di aprile del 2019, oggi, siamo in grado di poter eseguire build d’immagini multi architettura, compresa quella ARM.

Grazie a [**Docker Buildx**](https://docs.docker.com/buildx/working-with-buildx/) possiamo quindi creare immagini multi architettura sia per ARM sia per x86 utilizzando Docker Desktop.

Docker Buildx è un plug-in CLI (Command Line Interface) che estende il comando docker con il pieno supporto delle funzionalità fornite dal toolkit [Moby BuildKit](https://github.com/moby/buildkit). Fornisce la stessa esperienza utente del comando standard build ma con molte nuove funzionalità come la creazione di istanze builder con ambito e la compilazione su più nodi contemporaneamente.

 

[![Figura 1 - Note di funzionalità sperimentale di buildx](https://www.dontesta.it/wp-content/uploads/2020/09/docker-buildx-notice-1024x307.png "Figura 1 - Note di funzionalità sperimentale di buildx")](https://www.dontesta.it/wp-content/uploads/2020/09/docker-buildx-notice.png)

Figura 1 – Note di funzionalità sperimentale di buildx

 

Utilizzando questo tool, sono riuscito a prepare l’immagine di [Apache Karaf](https://hub.docker.com/r/amusarra/karaf) per  **linux/arm64**  e  **linux/arm/v7** che ho poi utilizzato sul [Raspberry Pi 3 e 4](https://www.dontesta.it/2020/08/23/raspberry-pi-come-eseguire-docker-container-apache-karaf/).

 

## 2. Come ottenere Buildx

Docker Buildx è incluso in Docker 19.03 ed è anche fornito in bundle con le seguenti versioni di Docker Desktop. Tieni presente che devi abilitare l’opzione **Funzionalità sperimentali** per utilizzare Docker Buildx.

- Docker Desktop Enterprise versione 2.1.0.
- Docker Desktop Edge versione 2.0.4.0 o successiva.

Puoi anche scaricare il binario buildx più recente dal repository [buildx di Docker](https://github.com/docker/buildx/).

Personalmente ho scaricato e installato [**Docker Desktop Edge**](https://docs.docker.com/docker-for-mac/edge-release-notes/) per macOS versione 2.3.6.1. La figura a seguire mostra i dettagli della mia installazione di Docker Desktop Edge.

 

[![Figura 2 - Dettagli sulla versione di Docker Desktop Edge](https://www.dontesta.it/wp-content/uploads/2020/09/docker-desktop-edge-version-details-1024x688.png "Figura 2 - Dettagli sulla versione di Docker Desktop Edge")](https://www.dontesta.it/wp-content/uploads/2020/09/docker-desktop-edge-version-details.png)

Figura 2 – Dettagli sulla versione di Docker Desktop Edge

 

Un volta installato e/o aggiornato Docker Desktop, avremo a nostra disposizione il tool di **buildx** , che ci consentirà di creare facilmente immagini Docker multi architettura.

 

## 3. Come creare l’immagine di Apache Karaf

Il repository Docker Hub del progetto Apache Karaf mette a disposizione l’immagine per la sola architettura linux/amd64. Il mio obiettivo era invece, quello di ottenere un’immagine per le due architetture **linux/arm** e **linux/arm64** , derivante dal fatto che avevo la necessità di eseguire un container Docker di Apache Karaf in ambiente Raspberry Pi, quest’ultimo monta appunto processori ARM, sia a 32bit sia a 64bit.

Quando fattibile, seguo generalmente l’approccio che si traduce in: **scrivi il meno possibile, estendi sempre**.

Il progetto [Apache Karaf](https://github.com/apache/karaf/tree/master/assemblies/docker) prevede già il processo di build dell’immagine Docker attraverso uno script bash, non ho dovuto quindi fare altro che **estendere** lo script esistente in modo che prendesse in considerazione l’uso di **buildx** per creare immagini multi architettura e **modificare** il Dockerfile affinché la direttiva [FROM](https://docs.docker.com/engine/reference/builder/#from) facesse riferimento ad un’immagine multi architettura.

**Quali sono gli step necessari per ottenere un immagine Docker di Apache Karaf per le architetture linux/arm e linux/arm64?**

La procedura è abbastanza semplice e consta dei seguenti step:

1. verifica che buildx sia correttamente installato;
2. creazione del builder via buildx;
3. clone del repository di Apache Karaf;
4. esecuzione dello script build.sh per il build dell’immagine Docker di Apache Karaf per ARM. Lo script esegue anche l’operazione di push su Docker Hub.

A seguire sono mostrati tutti i comandi necessari affinché possiate ottenere l’immagine Docker di Apache Karaf versione 4.2.9 (vedi parametro –from-release del comando build.sh) per ARM (linux/arm/v7) e ARM64 (linux/arm64). Le piattaforme per cui eseguire la build è possibile specificarle attraverso il parametro –build-multi-platform).

 

```
# Check Docker Buildx (get version)$ docker buildx version# Create a builder for Apache Karaf$ docker buildx create --name karaf-builder \--platform linux/arm64,linux/arm/v7,linux/amd64 \--buildkitd-flags '--debug'# Clone the Apache Karaf Repository$ git clone --depth 1 https://github.com/apache/karaf.git$ cd karaf/assemblies/docker# Run build the Docker Image for ARM and push# the image amusarra/karaf:4.2.9-dev on Docker Hub# account amusarra.$ ./build.sh --from-release --karaf-version 4.2.9 \--image-name amusarra/karaf:4.2.9-dev \ --build-multi-platform linux/arm64,linux/arm/v7
```

 

L’immagine a seguire mostra l’output del comando buildx per l’ispezione dell’immagine appena creata e di cui è stato fatto il push su Docker Hub. Ho evidenziato il fatto che questa immagine è disponibile per le due piattaforme linux/arm/v7 e linux/arm64.

 

[![Figura 3 - Inspect dell'immagine Docker di Apache Karaf](https://www.dontesta.it/wp-content/uploads/2020/09/docker-buildx-imagetools-inspect-amusarra-karaf-image-1024x264.png "Figura 3 - Inspect dell'immagine Docker di Apache Karaf")](https://www.dontesta.it/wp-content/uploads/2020/09/docker-buildx-imagetools-inspect-amusarra-karaf-image.png)

Figura 3 – Inspect dell’immagine Docker di Apache Karaf

 

A seguire è possibile vedere la sequenza di tutti i passi che sono stati eseguiti [Build and Push Docker Apache Karaf image for ARM/ARM64 Architecture](https://asciinema.org/a/358786?autoplay=1) , così come indicato in Console 1.

<script id="asciicast-358786" src="https://asciinema.org/a/358786.js?autoplay=1" async><span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start">﻿</span></script>

 

[![Figura 4 - Immagine Docker di Apache Karaf 4.2.9 per ARM sul Docker Hub](https://www.dontesta.it/wp-content/uploads/2020/09/amusarra-apache-karaf-docker-hub-repository-1024x439.png "Figura 4 - Immagine Docker di Apache Karaf 4.2.9 per ARM sul Docker Hub")](https://www.dontesta.it/wp-content/uploads/2020/09/amusarra-apache-karaf-docker-hub-repository.png)

Figura 4 – Immagine Docker di Apache Karaf 4.2.9 per ARM sul Docker Hub

 

## 4. Conclusioni e risorse

Abbiamo visto come sia stato semplice creare l’immagine Docker di Apache Karaf per architetture linux/arm e linux/arm64 utilizzando il tool  **buildx** di Docker e lo script di build disponibile direttamente sul repository GitHub del progetto Apache Karaf.

In questo articolo ho preso come esempio Apache Karaf, ovviamente, buildx, può essere utilizzato per creare immagini Docker multi architettura per qualunque applicazione voi vogliate.

A seguire una serie di risorse utili all’approfondimento dell’argomento trattato.

- [Docker Buildx](https://docs.docker.com/buildx/working-with-buildx/)
- [Moby BuildKit](https://github.com/moby/buildkit)
- [Docker buildx](https://github.com/docker/buildx/) repository
- [Building Multi-Arch Images for Arm and x86 with Docker Desktop](https://www.docker.com/blog/multi-arch-images/)

 

L'articolo [Docker: Come creare immagini Apache Karaf per ARM e ARM64](https://www.dontesta.it/2020/09/10/docker-how-to-create-apache-karaf-images-for-arm-and-arm64/) sembra essere il primo su [Antonio Musarra's Blog](https://www.dontesta.it).

[![](http://feeds.feedburner.com/~ff/dontesta/blog?d=yIl2AUoC8zA)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:yIl2AUoC8zA) [![](http://feeds.feedburner.com/~ff/dontesta/blog?d=dnMXMwOfBR0)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:dnMXMwOfBR0) [![](http://feeds.feedburner.com/~ff/dontesta/blog?i=u8VZw2idJBk:xEmUEtEtzlQ:D7DqB2pKExk)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:D7DqB2pKExk) [![](http://feeds.feedburner.com/~ff/dontesta/blog?d=YwkR-u9nhCs)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:YwkR-u9nhCs) [![](http://feeds.feedburner.com/~ff/dontesta/blog?i=u8VZw2idJBk:xEmUEtEtzlQ:F7zBnMyn0Lo)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:F7zBnMyn0Lo) [![](http://feeds.feedburner.com/~ff/dontesta/blog?i=u8VZw2idJBk:xEmUEtEtzlQ:V_sGLiPBpWU)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:V_sGLiPBpWU) [![](http://feeds.feedburner.com/~ff/dontesta/blog?d=qj6IDK7rITs)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:qj6IDK7rITs) [![](http://feeds.feedburner.com/~ff/dontesta/blog?i=u8VZw2idJBk:xEmUEtEtzlQ:gIN9vFwOqvQ)](http://feeds.feedburner.com/~ff/dontesta/blog?a=u8VZw2idJBk:xEmUEtEtzlQ:gIN9vFwOqvQ)
 ![](http://feeds.feedburner.com/~r/dontesta/blog/~4/u8VZw2idJBk)