Docker: Come creare immagini Apache Karaf per ARM e ARM64

Recentemente ho pubblicato l’articolo Raspberry Pi: Come eseguire un Docker Container Apache Karaf 4.2 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.

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) 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 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. 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

Figura 1 – Note di funzionalità sperimentale di buildx

 

Utilizzando questo tool, sono riuscito a prepare l’immagine di Apache Karaf per linux/arm64 e linux/arm/v7 che ho poi utilizzato sul Raspberry Pi 3 e 4.

 

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.

Personalmente ho scaricato e installato Docker Desktop Edge 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

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 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 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).

 

 

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

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 , così come indicato in Console 1.

 

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

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.

 

0 Condivisioni

Antonio Musarra

I began my journey into the world of computing from an Olivetti M24 PC (http://it.wikipedia.org/wiki/Olivetti_M24) bought by my father for his work. Day after day, quickly taking control until … Now doing business consulting for projects in the enterprise application development using web-oriented technologies such as J2EE, Web Services, ESB, TIBCO, PHP.

Potrebbero interessarti anche...

Cos'è il progetto CIE/CNS Apache Docker - Developers Italia

In questo video https://youtu.be/TcAzn1POhsM introdurrò il progetto CIE/CNS Apache Docker di Developers Italia (https://developers.italia.it/it/cie/#resourcecontent-3) nato circa due anni fa.

L'obiettivo di questo progetto è quello di fornire un template pronto all'uso che realizza un sistema di autenticazione tramite la Smart Card TS-CNS (o CNS) e la CIE (Carta d'Identità Elettronica) basato su Apache HTTP. Ognuno può poi modificare o specializzare questo progetto sulla base delle proprie esigenze Si tratta di un progetto docker per la creazione di un container che implementa un sistema di mutua autenticazione o autenticazione bilaterale SSL/TLS.

Questo meccanismo di autenticazione richiede anche il certificato digitale da parte del client, certificato che in questo caso risiede all'interno della TS-CNS o della CIE. La particolarità del sistema implementato (attraverso questo container) è quella di consentire l'autenticazione tramite:

  • La TS-CNS (Tessera Sanitaria - Carta Nazionale Servizi), rilasciata dalla regione di appartenenza;
  • La CIE (Carta d'Identità Elettronica), rilasciata dal comune di residenza.

Nella versione 2.0.0 il progetto è stato aggiornato per essere uniforme alle linee guida di Bootstrap Italia. A seguire alcune risorse che possono essere utili.

  • Cos’è il progetto CIE/CNS Apache Docker (http://bit.ly/3aJ5Gbl)
  • CIE Carta d'Identità Elettronica (https://developers.italia.it/it/cie/)
  • Carta Nazionale dei Servizi (https://www.agid.gov.it/it/piattaforme/carta-nazionale-servizi)
  • Raspberry Pi – Un esempio di applicazione della TS-CNS (https://bit.ly/3hkJ8Aj)
  • Pubblicare il servizio CIE/CNS Apache Docker su Azure Cloud (http://bit.ly/3aPoq8V)
  • Come accedere al portale VETINFO tramite TS-CNS e Mac OS (http://bit.ly/2VFMKq7)