Comment créer et configurer automatiquement des images Docker personnalisées avec Dockerfile - Partie 3
Ce tutoriel se concentrera sur la façon de créer une image Docker personnalisée basée sur Ubuntu avec le service Apache installé. L’ensemble du processus sera automatisé à l’aide d’un Dockerfile.
Les images Docker peuvent être automatiquement construites à partir de fichiers texte, nommés Dockerfiles. Un fichier Docker contient des instructions ou des commandes ordonnées étape par étape utilisées pour créer et configurer une image Docker.
Exigences
- Installer Docker et apprendre la manipulation de conteneurs Docker - Partie 1
- Déployer et exécuter des applications sous des conteneurs Docker – Partie 2
Fondamentalement, un fichier Docker contient diverses instructions afin de construire et de configurer un conteneur spécifique en fonction de vos besoins. Les instructions suivantes sont les plus utilisées, certaines d’entre elles étant obligatoires :
FROM=Obligatoire comme première instruction dans un fichier Docker. Indique à Docker d’extraire l’image de base à partir de laquelle vous créez la nouvelle image. Utilisez une balise pour spécifier l’image exacte à partir de laquelle vous construisez :
Ex: FROM ubuntu:20.04
MAINTAINER=Auteur de l’image de compilationRUN=Cette instruction peut être utilisée sur plusieurs lignes et exécute toutes les commandes après la création d’une image Docker.CMD=Exécuter n’importe quelle commande au démarrage de l’image Docker. N’utilisez qu’une seule instruction CMD dans un Dockerfile.ENTRYPOINT=Identique à CMD mais utilisé comme commande principale pour l’image.EXPOSE=Indique au conteneur d’écouter sur les ports réseau lors de l’exécution. Par défaut, les ports de conteneur ne sont pas accessibles à partir de l’hôte.ENV=Définir les variables d’environnement du conteneur.ADD=Copier les ressources (fichiers, répertoires ou fichiers à partir d’URL).
Étape 1 : Création ou écriture d’un référentiel Dockerfile
1. Tout d’abord, créons une sorte de référentiels Dockerfile afin de réutiliser les fichiers à l’avenir pour créer d’autres images. Créez un répertoire vide quelque part dans la partition /var où nous créerons le fichier avec les instructions qui seront utilisées pour construire la nouvelle image Docker.
# mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile
2. Ensuite, commencez à modifier le fichier en suivant les instructions suivantes :
# vi /var/docker/ubuntu/apache/Dockerfile
Extrait de Dokerfile :
FROM ubuntu
MAINTAINER your_name <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND
Passons maintenant en revue les instructions du fichier :
La première ligne nous indique que nous construisons à partir d’une image Ubuntu. Si aucune balise n’est soumise, par exemple 14:10, la dernière image de Docker Hub est utilisée.
Sur la deuxième ligne, nous avons ajouté le nom et l’adresse e-mail du créateur de l’image. Les deux lignes RUN suivantes seront exécutées dans le conteneur lors de la construction de l’image et installeront le démon Apache et feront écho à du texte dans la page Web Apache par défaut.
La ligne EXPOSE indiquera au conteneur Docker d’écouter sur le port 80, mais le port ne sera pas disponible pour l’extérieur. La dernière ligne indique au conteneur d’exécuter le service Apache au premier plan après le démarrage du conteneur.
3. La dernière chose que nous devons faire est de commencer à créer l’image en exécutant la commande ci-dessous, qui créera localement une nouvelle image Docker nommée ubuntu-apache basée sur le Dockerfile créé précédemment, comme le montre cet exemple :
# docker build -t ubuntu-apache /var/docker/ubuntu/apache/
4. Une fois l’image créée par Docker, vous pouvez répertorier toutes les images disponibles et identifier votre image en exécutant la commande suivante :
# docker images
Étape 2 : Exécuter le conteneur et accéder à Apache depuis le réseau local
5. Pour exécuter le conteneur en continu (en arrière-plan) et accéder aux services exposés au conteneur (ports) à partir de l’hôte ou d’une autre machine distante de votre réseau local, exécutez la commande ci-dessous à l’invite de votre terminal hôte :
# docker run -d -p 81:80 ubuntu-apache
Ici, l’option -d exécute le conteneur ubuntu-apache en arrière-plan (en tant que démon) et l’option -p mappe le port de conteneur 80 à votre port d’hôte local 81. L’accès au service Apache en dehors du réseau local n’est accessible que via le port 81.
La commande netstat vous donnera une idée des ports que l’hôte écoute.
Une fois le conteneur démarré, vous pouvez également exécuter la commande docker ps pour afficher l’état du conteneur en cours d’exécution.
6. La page Web peut être affichée sur votre hôte à partir de la ligne de commande à l’aide de l’utilitaire curl contre l’adresse IP de votre machine, l’hôte local ou l’interface réseau Docker sur le port 81. Utilisez la ligne de commande IP pour afficher les adresses IP de l’interface réseau.
# ip addr [List nework interfaces]
curl ip-address:81 [System Docker IP Address]
curl localhost:81 [Localhost]
7. Pour visiter la page Web du conteneur à partir de votre réseau, ouvrez un navigateur à distance et utilisez le protocole HTTP, l’adresse IP de la machine sur laquelle le conteneur s’exécute, suivie du port 81, comme illustré sur l’image ci-dessous.
http://ip-address:81
8. Pour obtenir l’intérieur des processus qui s’exécutent à l’intérieur du conteneur, exécutez la commande suivante :
# docker ps
docker top <name or ID of the container>
9. Pour arrêter le conteneur, exécutez la commande docker stop suivie de l’ID ou du nom du conteneur.
# docker stop <name or ID of the container>
docker ps
10. Si vous souhaitez attribuer un nom descriptif au conteneur, utilisez l’option --name comme indiqué dans l’exemple ci-dessous :
# docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps
Maintenant, vous pouvez référencer le conteneur pour la manipulation (start, stop, top, stats, etc.) uniquement en utilisant le nom attribué.
# docker stats my-www
Étape 3 : Créer un fichier de configuration à l’échelle du système pour le conteneur Docker
11. Sur CentOS/RHEL, vous pouvez créer un fichier de configuration systemd et gérer le conteneur comme vous le faites normalement pour tout autre service local.
Par exemple, créez un nouveau fichier systemd nommé, par exemple, apache-docker.service à l’aide de la commande suivante :
# vi /etc/systemd/system/apache-docker.service
Extrait du fichier apache-docker.service :
[Unit]
Description=apache container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www
[Install]
WantedBy=local.target
12. Une fois que vous avez terminé de modifier le fichier, fermez-le, rechargez le démon systemd pour refléter les modifications et démarrez le conteneur en exécutant les commandes suivantes :
# systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service
Ce n’était qu’un exemple simple de ce que vous pouvez faire avec un simple Dockerfile, mais vous pouvez pré-construire des applications assez sophistiquées que vous pouvez lancer en quelques secondes avec un minimum de ressources et d’efforts.
Pour aller plus loin :










