Nuova sezione libri disponibile!

Come compilare Immagini Docker per ARM su host Intel

Ludovico Russo

lettura in 3 minuti

docker_arm_intel

Ciao a tutti!

Mai avuto il dubbio su come compilare Immagini Docker per ARM direttamente sul vostro PC? Io ho dovuto faticare per scoprire come farlo, per buildare la versione ARM dell'architettura sviluppata per il mio lavoro di tesi, NTBD (trilogia di post a proposito qui).

La seguente è una guida veloce su come configurare la vostra macchina Intel per poter compilare Immagini Docker eseguibili su host con processori ARM, sfruttando QEMU.

Nota: in questo tutorial assumerò che il lettore conosca Docker. Per una panoramica a proposito di Docker date un'occhiata al mio post, "Docker, questo sconosciuto!". Questa guida darà consigli su come compilare l'Immagine Docker per una Raspberry Pi su un host Ubuntu.

1. Cos'è QEMU ed installazione di QEMU

QEMU (Quick EMUlator) è un hosted hypervisor, cioè un hypervisor eseguito su un sistema operativo esattamente come altri programmi, il quale fornisce virtualizzazione hardware. QEMU emula le CPU di diverse archietture, per esempio x86, PPC, ARM and SPARC. Permette di eseguire eseguibili non nativi, emulando l'escuzione nativa e, come richiesto in questo caso, di eseguire operazioni di cross-building.

Dal momento che uso un host Ubuntu, questi sono i comandi per installare i pacchetti qemu, qemu-user-static e binfmt-support da linea di comando:

 sudo apt update
 sudo apt install -y qemu qemu-user-static qemu-user binfmt-support

Il package qemu-user-static fornisce eseguibili QEMU buildati staticamente, cioè eseguibili che non hanno dependencies.

2. QEMU ed Immagini Docker

Per ottenere un'Immagine Docker che possa essere correttamente buildata ed eseguita su un host ARM, è necessario avere un'Immagine base provvista dell'eseguibile qemu richiesto, qemu-arm-static in questo caso. Ci sono un po' di Immagini pronte complete di questo eseguibile:

In ogni caso è possibile usare un'Immagine "semplice" per Raspberry e poi copiare nel contenitore il binary che puoi trovare in /usr/bin/, dopo aver scaricato i pacchetti di QEMU (vedi step 1).

Supponiamo che partiate dall'Immagine Docker "ufficiale" per Ubuntu su piattaforme ARMv7(armhf), disponibile qui, e che abbiate fatto una copia dell'eseguibile di cui abbiamo bisogno, qemu-arm-static, nel vostro build context (cartella contenente il Dockerfile, i.e. "."). Le prime righe del vostro Dockerfile saranno:

FROM armv7/armhf-ubuntu:16.04

COPY ./qemu-arm-static /usr/bin/qemu-arm-static

Nel mio caso, per l'Immagine Base di NTBD, ho usato come immagine di partenza l'Immagine HotBlack Robotics hbrobotics/ros-base:rpi3, basata sull'Immagine "ufficiale" per ARM citata sopra, con installato ROS Kinetic. Ho quindi copiato il binary ARM di QEMU, ottenendo:

FROM  hbrobotics/ros-base:rpi3

COPY ./qemu-arm-static /usr/bin/qemu-arm-static

Quindi completate il vostro Dockerfile con tutti i layers necessari.

3. Registrare QEMU sul build agent

Per registrare QEMU sul build agent, c'è un'Immagine Docker apposita, quindi eseguite semplicemente il seguente comando nella command line:

docker run --rm --privileged multiarch/qemu-user-static:register --reset

4. Build dell'Immagine

Adesso siete pronti per buildare la vostra immagine. Usate il solito comando docker build. Nel mio caso, avendo un nome specifico per il Dockerfile, il comando è:

docker build -f ./Dockerfile.rpi3 -t ntbd/base:rpi3 .

Ecco fatto! La vostra Immagine Docker dovrebbe essere pronta per essere pushata sulla vostra repository Docker Hub e alla fine scaricata e caricata sulla vostra Raspberry Pi.

Grazie, per la maggior parte delle informazioni, a Hypriot. \n A presto! :hibiscus:

Ti è piaciuto questo post?

Registrati alla newsletter per rimanere sempre aggiornato!

Ci tengo alla tua privacy. Leggi di pi√Ļ sulla mia Privacy Policy.

Ti potrebbe anche interessare

NTBD: guida step by step
Cos'è e come utilizzare NTBD step by step, primo articolo della serie
Docker, questo sconosciuto!
Perchè utilizzare Docker e la mia esperienza
Sviluppiamo un Robot con tecnologie Open Source
Inizio una serie di videoguide, in cui voglio introdurvi al mondo della robotica di servizio in modo pratico, facendo vedere come è possibilile, sfruttando tecnologie completamente Open Source, quali Arduino, Raspberry Pi, ROS e Docker, costruire un piccolo robot di Servizio.
Robot Open Source - Introduzione a Docker
√ą disponibile il video "Introduzione a Docker".
Buildare e usare container Docker per Raspberry Pi
In questa guida vediamo come buildare ed utilizzare Docker su Raspberry Pi (ed in generale sistemi Linux Embedded) per velocizzare la produzione di applicazioni Linux Embedded
Robot Open Source - Docker e Raspberry
√ą disponibile il video "Docker e Raspberry".
I 4 tool Open Source che ogni Sviluppatore Cloud deve conoscere nel 2019
I tool Open Source pi√Ļ importanti per lo sviluppo di software e architetture Cloud nel 2019.