Recherche de site Web

Comment créer et configurer automatiquement des images Docker personnalisées avec Dockerfile - Partie 3


Ce didacticiel 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 créées à 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 des conteneurs Docker – Partie 1
  • Déployer et exécuter des applications sous des conteneurs Docker – Partie 2

Fondamentalement, un fichier Docker contient diverses instructions permettant de créer 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 :

  1. FROM=Obligatoire comme première instruction dans un fichier Docker. Demande à 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
  1. MAINTAINER=Auteur de l'image de build
  2. RUN=Cette instruction peut être utilisée sur plusieurs lignes et exécute toutes les commandes après la création d'une image Docker.
  3. CMD=Exécutez n'importe quelle commande au démarrage de l'image Docker. Utilisez une seule instruction CMD dans un Dockerfile.
  4. ENTRYPOINT=Identique à CMD mais utilisé comme commande principale pour l'image.
  5. EXPOSE=Demande au conteneur d'écouter sur les ports réseau lors de son exécution. Les ports du conteneur ne sont pas accessibles depuis l'hôte par défaut.
  6. ENV=Définir les variables d'environnement du conteneur.
  7. 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 créer 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 du 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 aux instructions du fichier :

La première ligne nous indique que nous construisons à partir d'une image Ubuntu. Si aucune balise n'est soumise, disons 14:10 par exemple, la dernière image de Docker Hub est utilisée.

Sur la deuxième ligne, nous avons ajouté le nom et l'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 répercuteront du texte dans la page Web Apache par défaut. .

La ligne EXPOSE demandera au conteneur Docker d'écouter sur le port 80, mais le port ne sera pas disponible à l'extérieur. La dernière ligne demande 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 lister toutes les images disponibles et identifier votre image en exécutant la commande suivante :

docker images

Étape 2 : Exécutez le conteneur et accédez à Apache depuis le réseau local

5. Afin d'exécuter le conteneur en continu (en arrière-plan) et d'accéder aux services (ports) exposés au conteneur à 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 du conteneur 80 sur votre port localhost 81. L'accès au réseau local externe au service Apache est accessible uniquement 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 par rapport à l'adresse IP de votre machine, à l'hôte local ou à l'interface Docker Net sur le port 81. Utilisez la commande IP ligne 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 depuis votre réseau, ouvrez un navigateur à distance et utilisez le protocole HTTP, l'adresse IP de la machine sur laquelle le conteneur est exécuté, suivie du port 81, comme illustré sur le image ci-dessous.

http://ip-address:81

8. Pour avoir une idée des processus en cours d'exécution dans le 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

Vous pouvez désormais référencer le conteneur à des fins de manipulation (démarrage, arrêt, sommet, statistiques, 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é, disons, 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 simple exemple de ce que vous pouvez faire avec un simple Dockerfile, mais vous pouvez pré-créer des applications assez sophistiquées que vous pouvez lancer en quelques secondes seulement avec un minimum de ressources et d'efforts.

Lectures complémentaires :