Le démarrage / arrêt
Nous avons vu dans le chapitre précédent que pour lancer un container, nous utilisions la commande :
docker run IMAGECependant, il faut savoir que la commande “docker run” exécute les deux commande suivantes :
docker create IMAGE
docker start CONTAINERIl peut parraitre plus simple de créer directement le container en lançant ce dernier avec la commande “docker run”, mais avec les paramètre, il est souvent plus facile de créer une image avec la commande “docker create IMAGE” puis de la lancer avec “docker start CONTAINER”. Nous pourrons ainsi relancer plus facilement un container si ce dernier plante, ou éventuellement démarrer un second container avec la même image.
Afficher les log du container :
docker logs CaontainerNamePour arrêter un container :
docker stop ContainerNameIl est aussi possible de stoper tout les container qui sont en cours d’exécution en plaçant une variable dans notre commande docker stop :
docker stop $(docker ps -aq)Quelques explication sur la commande qnue nous venons de tapper:
“$()” est une substitution de commande qui va exécuter la commande entre parenthèse et la remplacer avec le résultat avant d’exécuter la commande docker stop.
“docker ps -aq” ou “docker container la -aq” permet de lister tous les ID des containers. Nous passons donc la liste de tous les ID de containers à la commande docker stop qui va pouvoir stopper tout les container en cours d’exécution.
Pour redémarrer un container :
docker restart ContainerNameEn cas de gros plantage, il est tout a fait possible de tuer un container (arrêt brutal) :
docker kill ContainerNameCreate
pour créer un container, il suffit comme vu au dessus de taper la commande :
docker create ImageSourcePour les option du démarrage du container, il faudra mettre les options lors de la création du container.
Pour ajouter le terminal interactif, qui rendra possible la connexion au terminal dans le futur, et un nom à notre container. Ajoutons une commande qui va pinger google.com nous allons entrer la commande suivante :
Commande :
docker create -it --name ImageName ImageSource commande
Exemple :
docker create -it --name machine_test alpine ping google.comNous avons créer le container, mais pas encore lancé. C’est pour cela que la commande “docker ps” nous affiche notre container avec le statut “Create”.
Il faut ensuite démarrer le container :
Commande :
docker start ContainerName
Exemple :
docker start machine_testA ce stade, la commande “docker ps” affiche notre container avec le statut “Up About a minute” car il n’est pas attacher a notre terminale. Cela montre simplement que la machine vient d’être lancé depuis moins d’une minute. Ce container est donc bien démarrer.
Si l’option -it à été activé à la création, nous utiliserons la commande “attach” pour nous attaché (se connecter) au container comme ceci :
Commande :
docker attach ContainerName
Exemple :
docker attach alpine_testIl est aussi possible de démarrer un container et de directement lui attacher le terminale. La commande “run” et les option attache interactif “-ai” le permet :
Exemple :
docker start -ai ContainerName
Commande :
docker start -ai alpine_testPour quitter, la commande “exit” et c’est fait.
Attention, la commande “attach” nous force à éteindre le container en le quittant.
Exercices
Nous allons a présent lancer 3 container en arrière-plan basés sur les images suivantes : mongo, redis et postgres. Les 3 container devrons avoir le nom de l’image (histoire de savoir à quoi cela correspond) Ensuite, nous allons les éteindre tous ensemble et supprimer tous les container qui sont stopper.
Commençons par lancer les 3 container :
docker run -d --name mongo mongo
docker run -d --name redis redis
docker run -d --name postgres postgresNous remarquerons une erreur lors du lancement du container postgres.
Nous allons donc afficher les logs qui vont nous donner les erreur que ce container rencontre au démarrage.
docker logs postgresNous avons donc l’erreur suivante :
Error: Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD to a non-empty value for the
superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
connections without a password. This is *not* recommended.
See PostgreSQL documentation about "trust":
https://www.postgresql.org/docs/current/auth-trust.htmlNous pouvons voir qu’il manque une variable d’environnement. Il y est indiquer 2 paramètres possible a ajouter dans notre commande pour remédier a ce problème. Le premier étant “-e POSTGRES_PASSWORD=password” qui permet d’ajouter un mot de passe a postgres. Le second qui est “-e POSTGRES_HOST_AUTH_METHOD=trust” nous permet de démarrer postgres sans mot de passe (il est indiquer que cela n’est pas recommander, mais dans exercice comme celui que nous faisons actuellement, cela n’est pas grave).
Relançons donc notre container sans mot de passe :
docker run -d --name postgres -e POSTGRES_HOST_AUTH_METHOD=trust postgresVoila, notre container est à présent lancé !
Afficher la liste des container actif :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03d60a10fd76 postgres "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 5432/tcp postgres
3628a246c8fa redis "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 6379/tcp redis
d6a91ab29dbb mongo "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 27017/tcp mongoTous nos container sont bien actif.
A présent, on stop tout :
docker stop $(docker ps -aq)
OU
docker stop mongo redis postgresPuis supprimer les container pour nettoyer le système :
docker system prune -a

