Ma première cible va être de créer une image Apache que je puisse faire tourner sur le Mac, puis transférer sur le serveur sur Internet, et faire tourner là-bas. Allons-y !
D'abord, je tire une image Ubuntu 14.04 :
docker pull ubuntu:14.04
Le transfert fait plus de 200 Mo.
Ensuite :
apt-get update
apt-get upgrade
apt-get install nano
apt-get install apache2
apt-get install php5 libapache2-mod-php5
apt-get install php5-mysql
Un message d'erreur est affiché par les deux premières commandes :
invoke-rc.d: policy-rc.d denied execution of start.
Cette page donne une solution: éditer le contenu de /usr/sbin/policy-rc.d, pour remplacer exit 101 par exit 0.
docker commit -m="Added Apache2" -a="<author>" \
<imageId> <userid>/apache2:v1
<imageId> est l'identifiant affiché par l'invite du terminal, après que la commande docker run -t -i ubuntu:14.04 /bin/bash ait été exécutée. <userid> peut être l'identifiant utilisateur que vous avez déclaré sur Docker Hub, si vous l'avez fait, ou une autre chaîne.
Maintenant, une façon de tester sur le Mac notre serveur Apache mis en container est d'utiliser la commande docker run pour démarrer un container basé sur notre image :
docker run -t -p 80:80 -i <userid>/apache2:v1 /bin/bash
L'option -p permet de préciser à quel port de la machine doit être assigné le port ouvert dans le container.
Puis, depuis l'intérieur du container :
service apache2 start
Récupérer l'adresse IP permettant de joindre le serveur web :
boot2docker ip
Et maintenant, en utilisant votre navigateur web préféré, visiter l'adresse IP précédente : vous obtenez la page web par défaut d'Apache.
Maintenant, allons un niveau plus loin. Sur le serveur tout neuf, où je viens d'installer Ubuntu Serveur 14.04, j'installe Docker, comme décrit dans la documentation Docker.
Puis :
docker save -o apache2 <userid>/apache2:v1
docker load -i apache2
docker run -t -p 80:80 -i <userid>/apache2:v1 /bin/bash
service apache2 start
Et voilà !