La création d'images Docker peut être réalisée par deux méthodes principales : la commande docker commit, qui capture l'état actuel d'un conteneur pour en générer une image, et la commande docker build, qui utilise un fichier Docekrfile pour automatiser le processus de construction.
1. Utilisation de docker commit
Lancer une instance de conteneur et installer un service web, par exemple Nginx, pour démontrer la procédure.
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 22.04 a8780b506fa4 2 weeks ago 77.8MB
docker run -it ubuntu:22.04 /bin/bash
apt-get update && apt-get install -y nginx
exit
Créer une image à partir de l'état du conteneur en utilisant la syntaxe docker commit <ID_CONTENEUR> [NOM_REPO]:[TAG].
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
a1b2c3d4e5f6 ubuntu:22.04 "/bin/bash" 5 minutes ago Exited (0) 2 minutes ago festive_almeida
docker commit a1b2c3d4e5f6 mon-image-nginx:latest
sha256:f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mon-image-nginx latest f7g8h9i0j1k2 10 seconds ago 152MB
ubuntu 22.04 a8780b506fa4 2 weeks ago 77.8MB
Vérifier que le service Nginx est installé dans la nouvelle image.
docker run -it mon-image-nginx:latest /bin/bash
dpkg -l nginx # Confirme la présence du paquet nginx
2. Utilisation de docker build avec Dockerfile
Pour automatiser la création d'images, un Dockerfile est utilisé, similaire à un Makefile généré après ./configure.
Créer un répertoire de travail et définir le Dockerfile.
mkdir /opt/docker-build
cat <<EOF > /opt/docker-build/Dockerfile
FROM ubuntu:22.04
LABEL maintainer="utilisateur@example.com"
RUN apt-get update && apt-get install -y nginx
COPY script_demarrage.sh /usr/local/bin/script_demarrage.sh
COPY page_accueil.html /var/www/html/index.html
CMD ["/usr/local/bin/script_demarrage.sh"]
EOF
Générer les fichiers nécessaires pour le script de démarrage et la page d'accueil.
echo "nginx -g 'daemon off;'" > /opt/docker-build/script_demarrage.sh
chmod +x /opt/docker-build/script_demarrage.sh
echo "<h1>Bienvenue sur l'image Docker construite avec build</h1>" > /opt/docker-build/page_accueil.html
Supprimer toute image existante portant le même nom pour éviter les conflits.
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
docker rmi mon-image-nginx:latest
Construire la nouvelle image avec la commande docker build -t [NOM_REPO]:[TAG] [CHEMIN_DOCKERFILE].
docker build -t image-nginx:latest /opt/docker-build/
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
image-nginx latest x9y8z7w6v5u4 30 seconds ago 152MB
ubuntu 22.04 a8780b506fa4 2 weeks ago 77.8MB
3. Distribution des images Docker
Enregistrement local
Utiliser la commande docker save pour exporter une image dans un fichier tar.
docker save -o sauvegarde-image-nginx.tar image-nginx:latest
ls -lh sauvegarde-image-nginx.tar
Publication sur un registre distant
S'inscrire sur Docker Hub et créer un dépôt, puis se connetcer via le CLI.
docker login -u nom_utilisateur -p mot_de_passe
Retagger l'image pour correspondre au registre et la pousser.
docker tag image-nginx:latest nom_utilisateur/depot-nginx:latest
docker push nom_utilisateur/depot-nginx:latest