Docker - Les Dockerfiles
17/Sep 2015
1 - Introduction
Docker est un logiciel Open Source permettant de gérer des conteneurs.
Contrairement à la virtualisation classique comprenant un système hôte sur lequel il est possible d’installer tout ce qui le serait sur un système classique, les conteneurs contiennent au maximum, que les applications/bibliothèques.
Dans le premier tutoriel, nous avions abordé uniquement l’installation de Docker sur les systèmes Linux et Windows.
Dans le suivant, nous nous sommes concentrés sur les commandes de base de Docker.
Dans celui-ci, nous allons aborder des notions plus avancées telles que la création de Dockerfiles.
2 - Qu’est ce qu’un Dockerfile ?
Les dockerfiles sont des fichiers textes décrivant les différentes étapes de création d’un conteneur totalement personnalisé.
L’équivalent d’un Dockerfile pour une application Console affichant l’universel « Hello World » pourrait être le suivant :
FROM busybox
ENTRYPOINT ["echo"]
CMD ["hello world"]
3 - Comment créer un Dockerfile ?
Le dockerfile doit :
- Utiliser un OS de base
- Installer les pré-requis système
- Installer les packages nécessaires
Les commandes que doit contenir un dockerfile sont les suivantes :
ADD
Copie un fichier de l’hôte vers le conteneur
CMD
Définit les commandes par défaut à exécuter, ou à passer à ENTRYPOINT
ENTRYPOINT
Définit le point d’entrée d’une application dans le conteneur
ENV
Définit les variables d’environnement (Exemple : “clé = valeur”)
EXPOSE
Expose un port du conteneur vers l’hôte (fonctionne de la même manière que la commande “docker run -p”)
FROM
Définit l’image à utiliser
MAINTAINER
Définit l’auteur du fichier
RUN
Démarre une commande à l’intérieur du conteneur
USER
Définit l’utilisateur pouvant exécuter l’image
VOLUME
Monte un dossier de l’hôte sur le conteneur
WORKDIR
Définit le dossier pour les directives CMD à exécuter
LABEL
Ajoute des metadata à une image Docker
COPY
Copie les fichier de [src] et les ajoute au chemin [dest]
ONBUILD
Ajoute un déclencheur pour que l’instruction soit exécutée plus tard.
Toutes les commandes à lancer, pour une installation classique de serveur, sont précédées par la commande docker RUN.
Une fois le fichier de configuration créé, il faut lancer la construction du conteneur ainsi que l’exportation vers une nouvelle image à l’aide de la commande suivante :
docker build -t [nom de l'image] - < [nom du fichier]
Ou sur un dépôt GitHub : docker build -t [nom de l'image] [dépot GitHub/nom du fichier]
Exemples de Dockerfile :
Dockerfile nginx
# Nginx
#
# VERSION 0.0.1
FROM ubuntu
MAINTAINER ######
LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
Dockerfile Firefox over VNC
# Firefox over VNC
#
# VERSION 0.3
FROM ubuntu
# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir ~/.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'
EXPOSE 5900
CMD ["x11vnc", "-forever", "-usepw", "-create"]
Dockerfile Cherokee Webserver
############################################################
# Dockerfile to build Cherokee Webserver Containers
# Based on CentOS
############################################################
# Set the base image to CentOS
FROM tutum/centos:latest
MAINTAINER Arubacloud.fr
# Add the application resources URL
RUN yum install wget gcc gcc-c++ libtool bind mysql-server mysql-devel php-mysql gettext git psmisc -y
RUN yum groupinstall "Development Tools" -y
# Environment
RUN mkdir /home/cherokee
WORKDIR /home/cherokee
# Download & clone Cherokee from git repository
RUN cd /home/cherokee && git clone http://github.com/cherokee/webserver.git
WORKDIR /home/cherokee/webserver
RUN /autogen.sh
RUN make && make install
EXPOSE 22 80 9090
RUN cherokee-admin -b
Une fois le traitement du dockerfile terminé, il faut lancer la commande suivante pour créer le conteneur :
docker run --name [nom du conteneur] -i -t [nom de l'image]
Ou, si le dockerfile se nomme “Dockerfile” : docker run --name [nom du conteneur] .
4 - Conclusion
Dans cette série de tutoriels, nous allons aborder le fonctionnement de Docker et de ses outils Compose et Swarm.
Nous nous sommes concentrés sur l’installation de Docker et sur les commandes de base de Docker dans les précédents documents, celui-ci était orienté sur les Dockerfiles.
Dans le prochain document, nous aborderons les outils Docker Machine, Compose et Swarm.