Tutoriel Docker 2 : Maitrisez les Dockerfile

Ecrit par << Paquet Judicaël >>

Si vous avez loupé mon précédent article, je vous propose d’aller le lire avant de vous lancer dans ce tutoriel docker 2 où nous allons apprendre à maîtriser notre Dockerfile sauf si vous avez déjà de bonnes bases en 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 car 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 tappant 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

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 contenaires.
  • USER [nom] permet d’indiquer l’utilisateur à utiliser

N’hésitez pas à regarder la doc officielle qui propose d’autres fonctions moins utilisées mais qui pourrait 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

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 qui s’appelle le docker-compose.

Suite Tutoriel Docker 3 : docker-compose pour le multi-conteneur

3 réponses sur “Tutoriel Docker 2 : Maitrisez les Dockerfile”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *