Docker:Administration | Partie 2) Les conteneurs docker + les Dockerfiles

Sommaire


  • Les conteneurs docker
    • Créer ses conteneurs
    • Mappage de ports
    • Gestion des volumes de données
    • Liaison inter conteneurs – Link
  • Administrer ses conteneurs
    • Inspecter les statistiques
    • Commiter les containers
  • Les Dockerfiles

Pour ce TP, je prends en considération que je suis authentifié en tant qu’utilisateur Root et que je suis sur une Virtual Machine Debian 9 Stretch avec Docker à bord.

2.1) Les conteneurs docker


2.1.1) Créer ses conteneurs


On va tout d’abords lister les images présentes, puis on va lancer un conteneur et lui demander d’exécuter une commande Echo avant de s’arrêter, car tout conteneur étant éphémère s’arrête si on ne lui précise pas de tourner en background (tâche de fond):

cc0.PNG

docker run debian echo "Welcome MAT"

On peut voir que le conteneur a bien exécuté la commande avant de s’arrêter.

cc1.PNG
On va désormais créer un conteneur, rentrer dedans grâce à une interface interactive Shell créer un dossier dans le conteneur, puis en sortir mais faire en sorte que le conteneur ne s’arrête pas.

docker run -it debian /bin/bash
ls
mkdir test
Puis on appuie sur  Ctrl P+Q pour en sortir sans l’arrêter 
docker ps

On a bien le résultat escompté.

cc2.PNG

On peut grâce à la commande Attach rentrer dans un conteneur déjà lancé, si on le fait on peut aussi remarquer que notre dossier « test » est toujours présent.

cc3.PNG

Si on utilise un Exit pour sortir du conteneur plutôt que la combinaison de touche le conteneur s’arrêtera.

On peut aussi utiliser la commande Exec qui permet d’utiliser une commande dans un conteneur à partir de l’hôte, sans renter dans ce conteneur. On va ici lister le contenu du répertoire /home du conteneur nommé Web:

exec.PNG

Lors d’un Run de conteneur l’option -d permet aussi de lancer le conteneur en tâche de fond.

docher run -d nginx

On peut aussi utiliser d’autres commandes sur ces conteneurs comme:

docker start IDduconteneur #Pour démarrer un conteneur inactif
docker stop IDduconteneur #Pour stopper un conteneur actif
docker kill IDduconteneur #Pour forcer la suppression d'un conteneur
docker rmi IDdel'image  #Pour supprimer une image
docker rm IDduconteneur  #Pour supprimer un conteneur arrêté ou inactif 
docker pause IDduconteneur #Pour mettre en pause un conteneur actif
docker unpause IDduconteneur #Pour redémarrer un conteneur en pause 
ps  #Liste les conteneurs actifs
ps -all #Liste tous les conteneurs inactifs
ps -a #Liste tous les conteneurs actifs et inactifs

2.1.2) Mappage de ports


Le mappage de port est assez simple on redirige un port avec l’option -p, par exemple si on veut rediriger le port 80 d’un serveur Nginx vers le port 8080:

 docker run -d -p 8080:80 --name web nginx

cc4.PNG

On vérifie avec l’adresse IP  du serveur que le serveur est fonctionnel:

cc5.PNG

2.1.3) Gestion des volumes de données


Ici on va voir le mappage de volume de données, on va plus précisément créer un mappage de données sur l’hôte à fin de pouvoir modifier au quotidien le contenu de ce répertoire.

On va créé sur notre hôte le répertoire « test » puis dans ce répertoire on va créer un nouveau fichier index.html (avec du contenu peu importe ce que vous y mettez)  à fin de pouvoir faire un test du bon fonctionnement plus tard.

CC6.PNG

On va mapper le répertoire « test » créé sur notre hôte au préalable vers le répertoire /usr/share/nginx/html/ du conteneur.

docker run -d --name web2 -p 8000:80 -v /test:/usr/share/nginx/html/ nginx

Ensuite on vérifie avec l’adresse IP de notre hôte et le bon port si tout fonctionne bien.

cc7.PNG

On peut aussi pointer différents conteneurs vers les mêmes volumes de données.

2.1.4) Liaison inter conteneurs – Link


Ici on va voir comment lier de façon simple deux conteneurs, je vais prendre comme exemple le cas où l’on veut lier notre serveur Web à un serveur de base de données.

On va commencer par aller chercher l’image d’un conteneur PostgreSQL puis on va lancer ce conteneur en background. La commande Run permettant de faire les deux.

docker run -d --name db postgres

On vient que le conteneur est bien lancé, grâce à son statut Up.

cc8.PNG

On va désormais lier notre conteneur Nginx avec notre conteneur PostgreSQL grâce à l’option –link.

docker run -d --name web --link db -p 8001:80 -v /test:/usr/share/nginx/html/ nginx

On constate que le conteneur s’est bien lancé et qu’il est bien lié.

cc9.PNG

2.2) Administrer ses conteneurs


2.2.1) Inspecter les statistiques


On peut récupérer les statistiques d’un conteneur avec la commande docker Inspect.

docker inspect web

insp.PNG

Il est possible de filtrer plus en précisant les paramètres de filtrage avec l’option –format. Voici des exemples pour avoir l’adresse MAC de l’interface réseau du conteneur, son adresse IP, ou encore son nom.

docker inspect --format='{{range.NetworkSettings.Networks}}{{.MacAddress}}{{end}}' web
docker inspect --format='{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web
docker inspect --format='{{.Name}}' web

insp1.PNG

2.2.2) Commiter les containers


On va voir dans cette partie comment faire un commit d’un conteneur, c’est à dire comment créer une image d’un conteneur.

On va commit le conteneur nommé Web créé précédemment et on va l’enregistrer dans notre registre Docker local créé lui aussi précédemment.

docker commit web localhost:5000/web_mat

On constate que notre image est bien présente.

commit.PNG

On peut désormais à partir de notre nouvelle image créer un nouveau conteneur qui sera identique au conteneur qu’on a commit.

docker run -d -p 8002:80 localhost:5000/web_mat

commit1.PNG

On peut vérifier avec un moteur de recherche que notre conteneur fonctionne.

commit2.PNG

2.3) Les Dockerfiles


Les Dockerfiles sont des fichiers qui permettent de construire une image Docker adaptée à nos besoins, étape par étape.

Pour construire son image il faut d’abords créer un fichier Dockerfile avec un éditeur de texte quelconque.

nano Dockerfile

FROM centos   #On précise l'OS de l'image
MAINTAINER mat <matjudo98@gmail.com> #On précise qui contacter en cas de problème
RUN yum install -y httpd net-tools #On installe les paquets httpd et net-tools
RUN echo "Welcome on Mat's turorial" > /usr/share/httpd/noindex/index.html #On va modifier le fichier index.html d'Nginx
EXPOSE 80 #On expose le port 80
CMD ("-D", "FOREGROUND"] #Option de commande pour le serveur Web
ENTRYPOINT ("/usr/sbin/httpd") #On lance notre serveur Web

dckile.PNG

On va maintenant construire notre image avec la commande Build à partir de notre fichier Dockerfile et l’enregistrer dans notre registre local Docker, en précisant avec le « . » que le Dockerfile se trouve dans le répertoire courant:

docker build --tag=localhost:5000/httpd_dc .

dckile1.PNG

On va maintenant créer et lancer un conteneur à partir de l’image qu’on vient de créer:

docker run -d -p 8003:80 localhost:5000/httpd_dc

Et voilà votre conteneur est lancé et fonctionnel.

Laisser un commentaire

Un site Web propulsé par WordPress.com.

Retour en haut ↑