Vous êtes ici

Premiers pas avec Docker - 3

dockerArticle précédent

Utilisation d'un Dockerfile

Tentons maintenant d'écrire un fichier Dockerfile qui construise la même image Apache que celle que nous avons générée dans l'article précédent.

Après plusieurs tentatives, le fichier Dockerfile le plus simple auquel je suis arrivé est le suivant :

FROM ubuntu:14.04

MAINTAINER <name> <<email>>

RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
    apache2 \
    libapache2-mod-php5 \
    nano \
    php5 \
    php5-mysql

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2ctl","-DFOREGROUND"]

Lors d'un premier test, j'ai essayé de modifier le fichier policy-rc.d, comme je l'avais fait auparavant. Mais il est apparu que cela n'était pas nécessaire.

La définition DEBIAN_FRONTEND=noninteractive est là uniquement pour empêcher apt-get d'afficher des messages d'avertissement.

Le paramètre -DFOREGROUND indique à Apache de faire tourner le processus parent en avant-plan, de façon à ce que le container ne termine pas son exécution tout de suite après avoir été lancé.

Pour créer l'image à partir de ce fichier :

  • créer un répertoire, cd dans ce répertoire, y mettre le fichier ci-dessus en le nommant Dockerfile
  • construire l'image avec la commande suivante :
docker build -t="<userid>/apache2:v1" .
  • ensuite, pour faire tourner l'image résultante :
docker run -p 80:80 -d <userid>/apache2:v1

L'option -d indique à Docker de lancer le container en arrière-plan.

Pour obtenir la liste des containers actifs : docker ps

Pour arrêter le container, utiliser l'id affichée dans la commande précédente : docker stop <containerId>

Et nous y voilà : nous avons une image fonctionnelle, sur la machine de développement, construite grâce à un Dockerfile.

De la machine de développement à la machine de production

Au lieu de transférer l'image sur mon serveur (la "machine de production"), je transfère le Dockerfile, et construit l'image sur la machine de production. Comme j'ai déjà un serveur web qui tourne là, j'ai besoin d'indiquer un autre port quand je lance le container :

docker run -p 8080:80 -d <userid>/apache2:v1

Le serveur web du container sera atteignable sur le port 8080.

Mise à jour : d'autres articles concernant mes expérimentations avec Docker se trouvent dans la partie anglaise du site. Désolé, je n'ai pas encore eu le temps de les traduire.