La création d’un conteneur n’est en fait que l’exécution d’une image dans laquelle nous allons installer un ensemble d’outil, de librairies, de framework, etc… Avant de déployer un conteneur, il nous faut donc créer des images que nous allons adapter à nos besoins avec des Dockerfiles. Cette création passera par l’installation des éléments que nous avons vue dans les articles précédent. A cela nous ajouterons des éléments de configurations spécifique à notre conteneur, par exemple, les volumes, le réseaux, etc…
Il pourrait s’avérer fastidieux de recréer cette image à chaque que nous souhaitons la reproduire. Au lieu de cela, nous créer un fichier qui contiendras toutes les instructions pour créer notre image docker personnalisé. Ce fichier s’appelle un DockerFile, il listera un ensemble d’instruction qui sont défini par des mots clés, les Dockerfiles. En voici une liste non-exhaustive :
- FROM : Spécifie l’image de base à partir de laquelle vous allez construire votre image. L’argument est le nom de l’image de base, par exemple : FROM ubuntu:20.04.
- RUN : Exécute une commande dans l’image pour installer des logiciels, mettre à jour des paquets, créer des répertoires, etc. L’argument est la commande à exécuter, par exemple : RUN apt-get update && apt-get install -y apache2.
- CMD : Définit la commande par défaut à exécuter lorsque le conteneur est lancé. L’argument est la commande, généralement sous forme d’une liste, par exemple : CMD [« apachectl », « -D », « FOREGROUND »].
- EXPOSE : Spécifie les ports sur lesquels le conteneur écoutera. L’argument est le numéro de port ou une plage de ports, par exemple : EXPOSE 80.
- ENV : Définit des variables d’environnement pour l’image. L’argument est une paire clé-valeur, par exemple : ENV MY_VARIABLE= »valeur ».
- ADD : Copie des fichiers depuis le système de fichiers hôte dans l’image, tout en permettant des opérations plus avancées. L’argument est le chemin source et de destination, par exemple : ADD app.tar.gz /app.
- COPY : Copie des fichiers depuis le système de fichiers hôte dans l’image, sans les opérations avancées offertes par ADD. L’argument est le chemin source et de destination, par exemple : COPY index.html /var/www/html/.
- WORKDIR : Définit le répertoire de travail actuel pour les instructions suivantes dans le Dockerfile. L’argument est le chemin du répertoire, par exemple : WORKDIR /app.
- USER : Spécifie l’utilisateur ou l’identifiant de l’utilisateur sous lequel les commandes RUN, CMD, et ENTRYPOINT sont exécutées. L’argument est le nom de l’utilisateur ou l’identifiant.
- VOLUME : Crée un point de montage de volume pour le stockage de données persistantes en dehors du conteneur. L’argument est le chemin du point de montage, par exemple : VOLUME /data.
En somme toutes les étapes que nous avions réalisées dans le chapitre 03 Image Docker pour créer nos images peuvent être fait à l’aide d’un Dockerfile.
Création un DockerFile
Dans cette mise en pratique nous allons créer un Dockerfile qui nous permettra d’exécuter PHP en version 7.4.Nous commencerons par créer un répertoire de travail.
[root@docker ~]# mkdir /home/MonProjet
Aprés avoir créer ce répertoire, nous allons créer un fichier, qui devra se nommer Dockerfile.
[root@docker ~]# vi /home/MonProjet/Dockerfile
Dans ce fichier, nous allons renseigner les instructions pour la création de mon image. Nous indiquerons l’image que nous souhaitons utiliser.
# Utilisation d’une image Ubuntu de base
FROM ubuntu:latest
Supprimons maintenant toutes les interactivités imposée lors de l’installation de paquets en utilisant les Dockerfiles.
ENV DEBIAN_FRONTEND=nonintercative
Nous mettons ensuite à jours la distribution puis nous installons le service Apache2.
# Mise à jour des packages et installation d'Apache2
RUN apt update -y && apt install -y apache2
Installons les dépendances nécessaires à l’installation de PHP 7.4 puis nous installerons PHP.
# Installation de PHP7.4
RUN apt install software-properties-common -y && add-apt-repository ppa:ondrej/php -y && apt install php7.4 -y
Nous exposerons le port 80 de notre image.
# Exposer le port 80 pour Apache
EXPOSE 80
Ensuite créons le volume pour rendre les données persistantes. Pour cette étape, nous créerons le répertoire sur notre machine. Ensuite nous le monterons dans un volume de notre image.
# Créez un répertoire pour les données d'Apache et configurez un point de montage de volume
RUN mkdir /var/www/html/data
VOLUME /var/www/html/data
Nous créerons un fichier PHP qui affichera les informations PHP.
# Créez un fichier PHP qui exécute phpinfo()
RUN echo "" > /var/www/html/data/phpinfo.php
Nous démarrerons ensuite PHP.
# Démarrer Apache en premier plan
CMD ["apachectl", "-D", "FOREGROUND"]
Executer le DockerFile
La liste de ses instructions, vont être exécuté lorsque nous créerons notre image à l’aide de la commande « docker build ». Nous allons nous rendre dans le répertoire de travail où se trouver notre Dockerfile afin d’exécuter les Dockerfiles.
[root@docker ~]# cd /home/MonProjet/
Dans ce répertoire, nous exécuterons la commande de création de notre image, en lui donnant un nom.
[root@docker MonProjet]# docker build -t php74 .
Une fois la commande exécutée, nous voyons les étapes de la création.
Nous vérifierons que l’images à bien été ajouter à notre registre interne.
[root@docker MonProjet]# docker images | grep php74
Testons cette images, après avoir créé notre instance, nous tenterons d’accéder à notre page « phpinfo.php », en utilisant les Dockerfiles correctement configurés.
[root@docker MonProjet]# docker run -d -p 80:80 php74