Dockerfile – tutoriel Docker

tutorial dockerfile
tutorial dockerfile

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

[ Article lu 1 fois aujourd'hui ]
A propos Judicaël Paquet 942 Articles
  Paquet Judicaël (expert en transformation et AI) Mes activités en France et en Suisse : - ingénieur prompt - coach AI - architecte de transformation agile - formations agiles personnalisées - sensibilisations et coaching de manager - audits de maturité agile et de situations - coaching agile (équipes, orga, product owner, scrum master, coach agile) Spécialités : scrum, kanban, management 3.0, agilité à l’échelle, lean startup, méthode agile, prompt AI, Intelligence artificielle. [Me contacter]

1 Commentaire

4 Rétroliens / Pings

  1. Tutoriel Docker 3 : docker-compose pour le multi-conteneur | Blog Myagile Partner
  2. Triforce Agile : Scrum, Devops et Lean Startup | Blog Myagile Partner
  3. Tutoriel Docker : Premiers pas avec Docker | Blog Myagile Partner
  4. Tutoriel Docker : Premiers pas avec Docker - Blog Myagile Partner

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.