🛠 Docker dès la sortie de l'emballage : premier conteneur sur le Linux embarqué
Objectifs
Le vrai superpouvoir de la X8 : son Linux embarqué (Linux microPlatform, distribution Yocto de Foundries.io) livre Docker préinstallé. Les applications tournent en conteneurs découplés de l'OS — déploiement modulaire, OTA incrémental, images prêtes à l'emploi sur le Docker Hub arduino. Tu vas lancer ton premier conteneur, comprendre l'histoire des permissions docker, et tirer une image officielle Arduino.
Matériel
- 1 × Arduino Portenta X8 sous tension via USB-C
- PC avec adb (carte vue par
adb devices) - Connexion Internet sur le réseau de la carte (Wi-Fi ou Ethernet via porteuse — voir le tuto réseau ; par défaut la X8 n'a pas de RJ45 nue)
- 16 Go d'eMMC embarqués : les images Docker y logent largement
Code complet
# Depuis le PC :
adb shell
# fio@portenta-x8:~$
# Permission docker : la doc officielle recommande d'abord :
newgrp - docker
# Le test canonique, fonctionne out of the box :
docker run hello-world
# -> "Hello from Docker! This message shows that your installation...
# Images officielles Arduino sur Docker Hub (org « arduino ») :
docker pull arduino/python-rpc-serial
# Lancer le conteneur officiel du tuto python-arduino-data-exchange :
docker run -d \
--name python-rpc-serial \
--restart unless-stopped \
-e PYTHONUNBUFFERED=1 \
--tty \
--read-only \
-p 5002-5020:5002-5020 \
-v /tmp:/tmp \
--device /dev/ttyGS0 \
arduino/python-rpc-serial
# Inventaire local
docker images
docker ps -a
Vérification attendue
docker run hello-world affiche le message de bienvenue en quelques secondes (téléchargement inclus) — preuve que le démon Docker, le stockage sur l'eMMC et le réseau fonctionnent. Le conteneur arduino/python-rpc-serial démarre en arrière-plan (docker ps le liste « Up ») : il expose les ports RPC 5002-5020 et le périphérique série /dev/ttyGS0, la passerelle vers le sketch M4 du tuto suivant.
Erreurs fréquentes
permission deniedsur/var/run/docker.sock: c'est LE piège documenté — lancenewgrp - dockerdans ta session adb avant toute commande docker (sinon passe en root).- Croire que les conteneurs persistent après un effacement d'image :
docker rm+docker rmieffacent vraiment ; pour revenir à un système propre, la procédure officielle est le re-flash de l'image (tuto image-flashing). docker pullqui échoue : pas de réseau ! La carte nue n'a ni RJ45 ni câble Ethernet — vérifie d'abord que le Wi-Fi ou l'Ethernet sur porteuse est monté (tuto réseau).- Conteneur
--read-onlyqui se plaint en écrivant sur /tmp : c'est pour ça que l'image officielle monte-v /tmp:/tmpen lecture/écriture — ne supprime pas ce montage. - Confondre avec un Raspberry Pi : ici pas d'apt ni de RaspiOS, c'est du Yocto ; les paquets système se gèrent à la compilation de l'image (ou
opkgpour des paquets de test), pas avec un gestionnaire de paquets classique. - >
Autres tutoriels pour cette carte
- Premiers pas : comprendre le monstre à 9 cœurs et entrer dans Linux via ADB
- Premier sketch sur le cœur M4 : le blink qui se flash par ADB
- Pont Linux ↔ Arduino : appeler des fonctions du sketch M4 depuis Python (RPC)
- Mettre la X8 en réseau : Wi-Fi du Murata 1DX et Gigabit Ethernet sur porteuse
- Nœud IoT de datalogging : capteurs sur le M4, stockage et transport en conteneur
- Le firmware caché : mettre à jour le bridge STM32H7 M7 qui expose les périphériques à Linux
Exemples de code pour cette carte
etat-systeme.shBashgpio-libgpiod.shBashpython-gpio.pyPythondocker-hello.shBashflasher-core-arduino.shBashwifi-nmcli.shBash