Manipulation des images et construction manuelle
Nous allons construire une image contenant un serveur web et une page web.
Pour ce faire, nous allons procéder manuellement en utilisant la commande docker commit
Démarrer l'image de base
Nous avons besoin d'une base pour créer notre image, en l'occurence nous allons partir de l'image ubuntu.
Exécuter la commande suivante :
docker run ubuntu
Afficher la liste des conteneurs en cours d'exécution.
Où est notre conteneur basé sur Ubuntu ?
Nous avons besoin d'un shell pour réaliser les modifications dans notre image de base avant de faire un docker commit, démarrons donc un conteneur ubuntu avec quelques arguments supplémentaires.
docker run -it ubuntu /bin/bash
Les options -i (--interactive) et -t (--tty) nous permettent d'associer notre interface en ligne de commande à celle du conteneur, que
nous démarrons en passant son chemin absolu en commande de démarrage (/bin/bash).
Ajouter nginx à l'image de base
Nous sommes maintenant "à l'intérieur" du conteneur et pouvons réaliser les modifications que nous voulons.
Commençons par installer nginx.
apt-get update
apt-get install nginx
Nous pouvons dès maintenant utiliser les commandes diff et commit pour créer une nouvelle image.
Afficher les différences crées par l'exécution des commandes précédentes (récupérer l'identifiant du conteneur avec docker ps au préalable) :
docker diff <id du conteneur>
Créer une nouvelle image à partir du conteneur
docker commit <id du conteneur>
Quel est le nom de l'image ?
Pour manipuler les images que nous créons de manière plus pratique nous allons lui associer un tag (ou un "nom" par abus de langage)
docker commit <id du conteneur> my-nginx
Il est temps de démarrer un conteneur basé sur l'image que nous venons de créer
docker run my-nginx
Que s'est-il passé ?
Nous allons devoir configurer nginx pour qu'il ne se lance pas en tant que démon.
Avec docker diff, localiser le fichier de configuration de nginx.
Trouver un moyen d'ajouter la directive suivante à la fin du fichier
daemon off;
À nouveau, nous allons utiliser docker commit pour mettre à jour notre image
docker commit <id du conteneur> my-nginx
Pour faire fonctionner nginx, nous allons devoir le lancer comme commande principale du conteneur, sans quoi celui s'arrêtera immédiatement. Nous allons également devoir mapper un port pour pouvoir accéder au serveur depuis un navigateur.
docker run -d -p 8888:80 my-nginx nginx
Accéder à l'adresse http://localhost:8888/ dans un navigateur.
Ajouter notre page web à notre image
Nous allons ajouter une page web à notre image avec docker cp et utiliser docker commit une dernière fois pour finaliser notre image.
Télécharger la page du présent TP (ctrl+s).
docker cp nous permet d'ajouter un fichier à un conteneur en cours d'exécution. Localiser le chemin servi par nginx dans notre conteneur (en analysant le contenu
du fichier de configuration ou en utilisant docker diff)
docker cp <chemin vers page téléchargée> <id du conteneur>:<chemin dans le conteneur>
Mettre à jour l'image et la relancer
docker commit <id du conteneur> my-nginx
docker run -d -p 8888:80 my-nginx nginx
Accéder à l'adresse http://localhost:8888/ dans un navigateur. La page du TP doit s'afficher.