GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

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

Ce didacticiel se concentrera sur la création d'une image Docker personnalisée basée sur Ubuntu avec Apache service 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 afin 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 construisez 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 construction
  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 lorsque l'image Docker est démarrée. Utilisez une seule instruction CMD dans un Dockerfile.
  4. ENTRYPOINT =Identique à CMD mais utilisé comme commande principale pour l'image.
  5. EXPOSE =Ordonne au conteneur d'écouter sur les ports réseau lors de l'exécution. Les ports de 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 des ressources (fichiers, répertoires ou fichiers à partir d'URL).

Étape 1 :Créer ou écrire un référentiel Dockerfile

1. Tout d'abord, créons une sorte de Dockerfile référentiels afin de réutiliser les fichiers à l'avenir pour créer d'autres images. Créez un répertoire vide quelque part dans /var partition où nous allons créer 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 protected]>
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 dit que nous construisons à partir d'un Ubuntu image. Si aucun tag n'est soumis, dites 14:10 par exemple, la dernière image de Docker Hub est utilisé.

Sur la deuxième ligne, nous avons ajouté le nom et e-mail du créateur d'images. Les deux prochains RUN les lignes seront exécutées dans le conteneur lors de la construction de l'image et installeront Apache démon et écho du texte dans la page Web apache par défaut.

L'EXPOSITION la ligne instruira le Docker conteneur à écouter sur le port 80 , mais le port ne sera pas disponible à 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é sur le Dockerfile créé précédemment, comme illustré dans 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écuter le conteneur et accéder à 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 exposés du 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, le -d L'option exécute ubuntu-apache conteneur en arrière-plan (en tant que démon) et le -p l'option mappe le port de conteneur 80 à votre port localhost 81 . L'accès LAN extérieur au service Apache peut être atteint via le port 81 uniquement.

La commande Netstat vous donnera une idée des ports sur lesquels l'hôte écoute.

Une fois le conteneur démarré, vous pouvez également exécuter docker ps commande 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 en utilisant curl par rapport à 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 un aperçu 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, lancez docker stop commande 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 le --name comme indiqué dans l'exemple ci-dessous :

# docker run --name my-www -d -p 81:80 ubuntu-apache
# docker ps

Désormais, vous pouvez référencer le conteneur à des fins de manipulation (démarrage, arrêt, top, 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 systemd fichier de configuration et gérez 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 en utilisant la commande suivante :

# vi /etc/systemd/system/apache-docker.service

apache-docker.service extrait de fichier :

[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.

Autres lectures :

Partie 4 :Comment surveiller les conteneurs Docker sous Linux
Docker
  1. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  2. Comment empaqueter et transférer des images Docker d'un serveur à un autre

  3. Comment partager des images Docker avec d'autres

  4. Comment modifier les images Docker

  5. Comment créer une image Docker à partir d'un conteneur et d'un Dockerfile

Comment nettoyer et supprimer des images Docker

Comment pousser et tirer des images Docker avec le registre de conteneurs de DigitalOcean

Comment créer des images Docker dans un pipeline GitLab CI

Comment créer une image Windows Docker avec la balise Docker Build

Comment créer une image Docker personnalisée avec Dockerfile

Comment créer et envoyer une image Docker au référentiel Docker Hub