Comment choisir la version Rasbian du container de base pour docker ?
Lorsque j'ai commencé à construire mes propres images docker, j'ai été quelque peu désemparé quant au container de base à utiliser. M'étant basé sur l’excellent ouvrage de Jean-Philippe Gouigoux pour appréhender les concepts relatifs de micro-services, je me suis retrouvé confronté à de multiples difficultés pour reproduire les exemples présentés du fait d'une incompatibilité des architectures. En effet, mon objectif était de faire fonctionner docker sur un cluster de Raspberry Pi. Le présent article présente quelque astuces pour instancier des images de base compatibles avec Rasbian.
Caractéristiques techniques du Raspberry Pi
Deux choses sont importantes à déterminer pour choisir la bonne image de base :
- Connaitre la version du processeur utilisée.
- Connaitre la version de Rasbian utilisée.
Version du processeur du Raspberry Pi
Au long de l'évolution des Raspberry Pi, le processeur utilisé a varié en suivant l'évolution des technologies. Par ailleurs, la distribution officielle de Rasbian, n'est pas forcément synchrone avec l'évolution des processeur. Par exemple, le Pi3B est équipé d'un processeur BCM2837 à quatre cœurs (d'où les quatre framboises affichées en mode console) en architecture ARMv8 qui, normalement, permet de fonctionner en 64 bits, alors que la dernière version officielle téléchargeable (Rasbian v9 Stretch) ne fonctionne qu'en 32 bits. De ce fait, le processeur est vu comme un processeurs ARMv7.
Pour connaitre les caractéristiques du processeur vu du système d'exploitation Rasbian, on utilise la commande lscpu :
pi@Cluster01:~ $ lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Model: 4
Model name: ARMv7 Processor rev 4 (v7l)
CPU max MHz: 1200,0000
CPU min MHz: 600,0000
BogoMIPS: 38.40
Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
pi@Cluster01:~ $
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Model: 4
Model name: ARMv7 Processor rev 4 (v7l)
CPU max MHz: 1200,0000
CPU min MHz: 600,0000
BogoMIPS: 38.40
Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
pi@Cluster01:~ $
A noter qu'il existe une version 64 bits de Raspbian, téléchargeable sur le site ci-dessous :
Version de Rasbian
La version de Rasbian est formalisée dans le fichier /etc/os-release. Pour la connaitre, il suffit de lire ce fichier.
pi@Cluster01:~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
pi@Cluster01:~ $
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
pi@Cluster01:~ $
Les informations affichées ici sont suffisantes pour le traitement de cet article. Cependant, il peut être utile de connaitre d'autres informations plus technique, comme la version du noyau, la date de création, etc. Pour cela, il exite une autre commande :
pi@Cluster01:~ $ uname -a
Linux Cluster01 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 armv7l GNU/Linux
pi@Cluster01:~ $
Linux Cluster01 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 armv7l GNU/Linux
pi@Cluster01:~ $
Choix de l'image de base
Trouver une image d'un container docker par une interrogation du site web hub.docker.com. En utilisant le moteur de recherche de ce site, et en utilisant raspbian (le nom du système d'exploitation du Raspberry) comme clef de recherche, on obtient la liste de toutes les images disponibles pour Rasbian. La première qui vient en tête des réponses, sur le nombre de téléchargement (et sur les étoiles, ce qui est un critère de qualité) est l'image resin/rpi-raspbian.
En cliquant le bouton [Details] en face de cette image, on arrive sur la page d'accueil de resin.io qui fourni la quasi totalité des combinaisons de version Processseur/OS des Raspberry Pi. Un lien sur le site www.balena.io donne accès à la documentation technique de ces images et les tags pour obtenir la combinaison de versions souhaitée.
pi@Cluster01:~ $ docker pull resin/rpi-raspbian
Using default tag: latest
latest: Pulling from resin/rpi-raspbian
Digest: sha256:7b190b0f9115b4a8d7980940e923c137a029aba386368202cc149c6346b84b1d
Status: Downloaded newer image for resin/rpi-raspbian:latest
pi@Cluster01:~ $
Using default tag: latest
latest: Pulling from resin/rpi-raspbian
Digest: sha256:7b190b0f9115b4a8d7980940e923c137a029aba386368202cc149c6346b84b1d
Status: Downloaded newer image for resin/rpi-raspbian:latest
pi@Cluster01:~ $
L'image Rasbian est maintenant disponible :
pi@Cluster01:~ $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
resin/rpi-raspbian latest 6e68cc6f3192 8 days ago 128MB
hello-world latest b7012647d53a 7 weeks ago 1.64kB
pi@Cluster01:~ $
REPOSITORY TAG IMAGE ID CREATED SIZE
resin/rpi-raspbian latest 6e68cc6f3192 8 days ago 128MB
hello-world latest b7012647d53a 7 weeks ago 1.64kB
pi@Cluster01:~ $
Pour tester cette image, on va utiliser la commande run de Docker. L'option -it permet de démarrer l'image en mode interactif.
L'option --rm permet de supprimer l'instance de l'image lancée. L'option -h permet de donner au serveur hôte instancié.
pi@Cluster01:~ $ docker run -it --rm -h CONT01 resin/rpi-raspbian
root@CONT01:/# cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
root@CONT01:/# lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Model name: ARMv7 Processor rev 4 (v7l)
CPU max MHz: 1200.0000
CPU min MHz: 600.0000
root@CONT01:/# exit
exit
pi@Cluster01:~ $PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
root@CONT01:/# lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Model name: ARMv7 Processor rev 4 (v7l)
CPU max MHz: 1200.0000
CPU min MHz: 600.0000
root@CONT01:/# exit
exit
La partie bleue indique ce qui se déroule dans l'instance de Rasbian exécutée dans un container.
Par défaut (tag latest), la version de l'image téléchargée est la version 8 de Rasbian (Jessie). Or la dernière version de Rasbian est la version 9 (Stretch). Il serait dommage de s'en priver. Comme suggéré dans les paragraphes précédent, il est possible d'obtenir toutes les combinaisons possibles de Rasbian en utilisant le tag approprié.
pi@Cluster01:~ $ docker pull resin/rpi-raspbian:stretch
stretch: Pulling from resin/rpi-raspbian
bf501e3d65e2: Pull complete
02a9028ba839: Pull complete
4982c534f05f: Pull complete
b5cc48ce1278: Pull complete
c99fccef7fbd: Pull complete
2fa3412d044b: Pull complete
f482b77bba56: Pull complete
0906d6e75a07: Pull complete
3917fcdcabf0: Pull complete
ab78408bee18: Pull complete
06ff6038dedd: Pull complete
Digest: sha256:35205ecec541e8e3d8c663d8718ec4eb05aa67570ee8bf3ae475edde9f75d078
Status: Downloaded newer image for resin/rpi-raspbian:stretch
pi@Cluster01:~ $ docker run -it --rm -h CONT01 resin/rpi-raspbian:stretch
stretch: Pulling from resin/rpi-raspbian
bf501e3d65e2: Pull complete
02a9028ba839: Pull complete
4982c534f05f: Pull complete
b5cc48ce1278: Pull complete
c99fccef7fbd: Pull complete
2fa3412d044b: Pull complete
f482b77bba56: Pull complete
0906d6e75a07: Pull complete
3917fcdcabf0: Pull complete
ab78408bee18: Pull complete
06ff6038dedd: Pull complete
Digest: sha256:35205ecec541e8e3d8c663d8718ec4eb05aa67570ee8bf3ae475edde9f75d078
Status: Downloaded newer image for resin/rpi-raspbian:stretch
pi@Cluster01:~ $ docker run -it --rm -h CONT01 resin/rpi-raspbian:stretch
root@CONT01:/# cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
root@CONT01:/# exit
exit
pi@Cluster01:~ $PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
root@CONT01:/# exit
exit
Bibliographie
Docker
Prise en main et mise en pratique d'une architecture micro-services
Jean-Philippe GOUIGOUX
ENI
Prise en main et mise en pratique d'une architecture micro-services
Jean-Philippe GOUIGOUX
ENI
Ce livre décrit comment utiliser docker pour embarquer divers types de containers.
Commentaires
Enregistrer un commentaire