Pour commencer, je vous conseille d’aller le lire avant de vous lancer dans ce tutoriel docker ; sur cet article, nous allons apprendre à maîtriser notre Dockerfile.
Vous pouvez regarder la vidéo de la minute agile sur qu’est-ce que docker :
Article Tutoriel Docker : Premiers pas avec Docker
Ce tutoriel va commencer à la fin du premier tutoriel où nous avons builder notre image Docker suivante sous le nom très simple de « monapache » :
FROM ubuntu:14.04 MAINTAINER Judicael paquet RUN apt-get update && \ apt-get install -y apache2
En effet, le but de ce premier tutoriel était d’apprendre les premières commandes de base et de faire une première image très simple à partir d’un Dockerfile.
Apprendre à maîtriser son Dockerfile
Copier des fichiers de son environnement
Pour les plus fous d’entre nous, on pourrait écrire tous nos fichiers en live grâce aux lignes de commandes Linux avec un simple RUN dans notre Dockerfile.
Cependant, il existe une technique beaucoup plus simple et qu’on va bien évidement privilégier : celle de copier des fichiers (pour ceux qui connaissent Vagrant, ils voient parfaitement de quoi je veux parler).
Dans notre dossier où nous avons notre Dockerfile, nous allons créer un dossier docker/ et nous allons y écrire un joli fichier host-apache2.conf comme ceci :
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/test </VirtualHost>
Et nous allons faire un petit fichier index.html qui contient seulement le texte ci-dessous :
Hello World
Maintenant que le fichier est en place, nous allons mettre en place la copie de nos deux fichiers dans notre Dockerfile ; en effet, c’est un peu le but de notre opération :
FROM ubuntu:14.04 MAINTAINER Judicael paquet RUN apt-get update && \ apt-get install -y apache2 ADD docker/host-apache2.conf /etc/apache2/sites-enabled/000-default.conf ADD docker/index.html /var/www/test/index.html
En buildant votre image et en la lançant sur le port 8001, vous aurez un Joli Hello World qui apparaitra dans votre navigateur en tapant http://localhost:8001 :
docker build -t monapache . docker run -d -p 8001:80 monapache /usr/sbin/apache2ctl -D FOREGROUND
Vous pourrez d’ailleurs constater que le http://localhost:8000 du premier tutoriel fonctionne toujours. Vous avez deux conteneurs qui tournent en même temps.
Une question fréquemment posée : quelle est la différence entre ADD et COPY (qui existe aussi) ? En fait la fonction ADD est la même que COPY avec la possibilité en plus de pouvoir indiquer une URL.
Lancer un script au lancement du conteneur
Le Dockerfile vous permet de lancer des scripts au moment du lancement du conteneur comme vous le faites dans votre RUN pour lancer Apache.
Nous allons donc ajouter cela dans notre Dockerfile
FROM ubuntu:16.04 MAINTAINER Judicael paquet RUN apt-get update && \ apt-get install -y apache2 ADD docker/host-apache2.conf /etc/apache2/sites-enabled/000-default.conf ADD docker/index.html /var/www/test/index.html ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
En buildant votre image et en la lançant sur le port 8002, vous aurez toujours le joli Hello World. La différence est que le lancement d’apache est fait directement dans le Dockerfile.
docker build -t monapache . docker run -d -p 8002:80 monapache
D’autres fonctions utiles dans Dockerfile
Le Dockerfile propose d’autres fonctions qui vous serons utiles comme celles-ci :
- WORKDIR [path] qui permet de déplacer le curseur dans un dossier
- ENV [nom] [valeur] qui permet de créer des variables d’environnement que vous pourrez récupérer à la suite en faisant ${nom}
- VOLUME [path] permet de créer un point de montage commun entre l’host maitre et les containers.
- USER [nom] permet d’indiquer l’utilisateur à utiliser
N’hésitez pas à regarder la doc officielle qui propose d’autres fonctions moins utilisées ; cependant, elles pourraient vous être utile plus tard.
Arrêtons le docker run
Alors que vous venez d’apprendre à utiliser le docker run, je vais dès maintenant vous conseiller de ne plus l’utiliser. En fait le docker run est un raccourcis pour faire un docker create + un docker start.
Voici comment nous ferions pour lancer un nouveau conteneur :
docker create --name="super_apache" -p 8003:80 mon_apache docker start super_apache
Si vous arrêtez votre conteneur, vous pourrez le relancer avec le docker start pour récupérer votre conteneur dans l’état où il était au moment du docker stop.
Conclusion dockerfile
J’espère que vous deviendrez maintenant de véritables experts en Dockerfile grâce à ce petit tutoriel sur le sujet. Nous verrons dans un futur tutoriel pour utiliser un autre outil très utile :docker-compose.
Comprenez-vous à présent la force des dockerfile ? En effet, le concept du dockerfile est indispensable à maitriser pour réellement bénéficier de docker. N’attendez plus et testez plus profondément ces dockerfile.
Suite Tutoriel Docker 3 : docker-compose pour le multi-conteneur
Lien utile : documentation officielle dockerfile
Bonjour,
Ce tuto est très bien fait avec des explications claires et compréhensibles.
Bravo et merci