Docker
Gestion des conteneurs
Recherche…
Syntaxe
- docker rm [OPTIONS] CONTENEUR [CONTENEUR ...]
- docker attach [OPTIONS] CONTENEUR
- docker exec [OPTIONS] COMMANDER COMMAND [ARG ...]
- docker ps [OPTIONS]
- docker logs [OPTIONS] CONTAINER
- docker inspect [OPTIONS] CONTENEUR | IMAGE [CONTENEUR | IMAGE ...]
Remarques
- Dans les exemples ci-dessus, chaque fois que le conteneur est un paramètre de la commande docker, il est mentionné sous la forme
<container>
oucontainer id
ou<CONTAINER_NAME>
. Dans tous ces endroits, vous pouvez soit passer un nom de conteneur ou un identifiant de conteneur pour spécifier un conteneur.
Liste des conteneurs
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
docker ps
imprime seul les conteneurs en cours d'exécution. Pour afficher tous les conteneurs (y compris ceux arrêtés), utilisez l'indicateur -a
:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago berserk_wozniak
2bc9b1988080 redis "docker-entrypoint.sh" 2 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp elephant-redis
817879be2230 postgres "/docker-entrypoint.s" 2 weeks ago Up 2 hours 0.0.0.0:65432->5432/tcp pt-postgres
Pour répertorier les conteneurs avec un statut spécifique, utilisez l'option de ligne de commande -f
pour filtrer les résultats. Voici un exemple de liste de tous les conteneurs sortis:
$ docker ps -a -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9cc69f11a0f7 docker/whalesay "ls /" 26 hours ago Exited (0) 26 hours ago
Il est également possible de répertorier uniquement les ID de conteneur avec le commutateur -q
. Cela facilite le fonctionnement du résultat avec d'autres utilitaires Unix (tels que grep
et awk
):
$ docker ps -aq
9cc69f11a0f7
2bc9b1988080
817879be2230
Lorsque vous docker run --name mycontainer1
un conteneur avec docker run --name mycontainer1
vous donnez un nom spécifique et non un nom aléatoire (sous la forme mood_famous, tel que nostalgic_stallman), et il peut être facile de les trouver avec une telle commande
docker ps -f name=mycontainer1
Référencement de conteneurs
Les commandes Docker qui prennent le nom d'un conteneur acceptent trois formes différentes:
Type | Exemple |
---|---|
UUID complet | 9cc69f11a0f76073e87f25cb6eaf0e079fbfbd1bc47c063bcd25ed3722a8cc4a |
UUID court | 9cc69f11a0f7 |
prénom | berserk_wozniak |
Utilisez docker ps
pour afficher ces valeurs pour les conteneurs sur votre système.
L'UUID est généré par Docker et ne peut pas être modifié. Vous pouvez donner un nom au conteneur lorsque vous le lancez. docker run --name <given name> <image>
. Docker générera un nom aléatoire pour le conteneur si vous n'en spécifiez pas un au moment du démarrage du conteneur.
REMARQUE : la valeur de l'UUID (ou un UUID court) peut avoir n'importe quelle longueur tant que la valeur donnée est unique pour un conteneur.
Démarrage et arrêt des conteneurs
Pour arrêter un conteneur en cours d'exécution:
docker stop <container> [<container>...]
Cela enverra au processus principal du conteneur un SIGTERM, suivi d'un SIGKILL s'il ne s'arrête pas pendant la période de grâce. Le nom de chaque conteneur est imprimé à mesure qu'il s'arrête.
Pour démarrer un conteneur qui est arrêté:
docker start <container> [<container>...]
Cela va démarrer chaque conteneur passé en arrière-plan; le nom de chaque conteneur est imprimé au démarrage. Pour démarrer le conteneur au premier plan, passez le drapeau -a
( --attach
).
Liste des conteneurs au format personnalisé
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'
Recherche d'un conteneur spécifique
docker ps --filter name=myapp_1
Rechercher un conteneur IP
Pour connaître l'adresse IP de votre conteneur, utilisez:
docker inspect <container id> | grep IPAddress
ou utiliser docker inspecter
docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID}
Redémarrage du conteneur Docker
docker restart <container> [<container>...]
Option - time : secondes pour attendre l'arrêt avant de tuer le conteneur (par défaut 10)
docker restart <container> --time 10
Supprimer, supprimer et nettoyer des conteneurs
docker rm
peut être utilisé pour supprimer un conteneur spécifique comme celui-ci:
docker rm <container name or id>
Pour supprimer tous les conteneurs, vous pouvez utiliser cette expression:
docker rm $(docker ps -qa)
Par défaut, docker ne supprimera pas un conteneur en cours d'exécution. Tout conteneur en cours d'exécution produira un message d'avertissement et ne sera pas supprimé. Tous les autres conteneurs seront supprimés.
Sinon, vous pouvez utiliser xargs
:
docker ps -aq -f status=exited | xargs -r docker rm
Où docker ps -aq -f status=exited
retournera une liste des ID de conteneur des conteneurs ayant le statut "Exit".
Avertissement: tous les exemples ci-dessus ne supprimeront que les conteneurs "arrêtés".
Pour supprimer un conteneur, qu'il soit ou non arrêté, vous pouvez utiliser l'indicateur de force -f
:
docker rm -f <container name or id>
Pour supprimer tous les conteneurs, quel que soit leur état:
docker rm -f $(docker ps -qa)
Si vous souhaitez supprimer uniquement les conteneurs avec un statut dead
:
docker rm $(docker ps --all -q -f status=dead)
Si vous souhaitez supprimer uniquement les conteneurs avec un statut exited
:
docker rm $(docker ps --all -q -f status=exited)
Ce sont toutes les permutations de filtres utilisées lors de la liste des conteneurs .
Pour supprimer à la fois les conteneurs indésirables et les images en attente qui utilisent de l'espace après la version 1.3 , utilisez ce qui suit (similaire à l'outil Unix df
):
$ docker system df
Pour supprimer toutes les données inutilisées:
$ docker system prune
Exécuter la commande sur un conteneur de docker existant
docker exec -it <container id> /bin/bash
Il est courant de se connecter à un conteneur déjà en cours pour effectuer des tests rapides ou voir ce que fait l’application. Souvent, cela dénote des mauvaises pratiques d'utilisation des conteneurs dues aux journaux et les fichiers modifiés doivent être placés dans des volumes. Cet exemple nous permet de connecter le conteneur. Cela suppose que / bin / bash est disponible dans le conteneur, il peut être / bin / sh ou autre chose.
docker exec <container id> tar -czvf /tmp/backup.tgz /data
docker cp <container id>:/tmp/backup.tgz .
Cet exemple archive le contenu du répertoire de données dans un tar. Ensuite, avec docker cp
vous pouvez le récupérer.
Journaux de conteneurs
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, --follow=false Follow log output
--help=false Print usage
--since= Show logs since timestamp
-t, --timestamps=false Show timestamps
--tail=all Number of lines to show from the end of the logs
Par exemple:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ff9716dda6cb nginx "nginx -g 'daemon off" 8 days ago Up 22 hours 443/tcp, 0.0.0.0:8080->80/tcp
$ docker logs ff9716dda6cb
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
xx.xx.xx.xx - - [15/Jul/2016:14:03:44 +0000] "GET /index.html HTTP/1.1" 200 511 "https://google.com" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36"
Se connecter à une instance exécutée en tant que démon
Il y a deux manières d'y parvenir, la première et la plus connue est la suivante:
docker attach --sig-proxy=false <container>
Celui-ci attache littéralement votre bash au conteneur bash, ce qui signifie que si vous avez un script en cours d'exécution, vous verrez le résultat.
Pour détacher, tapez simplement: Ctl-P Ctl-Q
Mais si vous avez besoin d'une méthode plus conviviale et pour pouvoir créer de nouvelles instances de bash, lancez simplement la commande suivante:
docker exec -it <container> bash
Copier un fichier depuis / vers des conteneurs
de conteneur à hôte
docker cp CONTAINER_NAME:PATH_IN_CONTAINER PATH_IN_HOST
de l'hôte au conteneur
docker cp PATH_IN_HOST CONTAINER_NAME:PATH_IN_CONTAINER
Si j'utilise jess / transmission de
https://hub.docker.com/r/jess/transmission/builds/bsn7eqxrkzrhxazcuytbmzp/
, les fichiers dans le conteneur sont dans / transmission / téléchargement
et mon répertoire actuel sur l'hôte est / home / $ USER / abc, après
docker cp transmission_id_or_name:/transmission/download .
Je vais avoir les fichiers copiés dans
/home/$USER/abc/transmission/download
vous ne pouvez pas, en utilisant docker cp
copier un seul fichier, vous copiez l'arborescence et les fichiers
Supprimer, supprimer et nettoyer les volumes du menu fixe
Les volumes Docker ne sont pas automatiquement supprimés lorsqu'un conteneur est arrêté. Pour supprimer des volumes associés lorsque vous arrêtez un conteneur:
docker rm -v <container id or name>
Si l' -v
n'est pas spécifiée, le volume reste sur le disque en tant que «volume en suspens». Pour supprimer tous les volumes en suspens:
docker volume rm $(docker volume ls -qf dangling=true)
Le filtre docker volume ls -qf dangling=true
renvoie une liste de noms de volumes de docker volume ls -qf dangling=true
, y compris ceux qui ne sont pas docker volume ls -qf dangling=true
, qui ne sont pas attachés à un conteneur.
Vous pouvez également utiliser xargs
:
docker volume ls -f dangling=true -q | xargs --no-run-if-empty docker volume rm
Exporter et importer des systèmes de fichiers de conteneur Docker
Il est possible de sauvegarder le contenu du système de fichiers d'un conteneur Docker dans un fichier d'archive tarball. Ceci est utile pour déplacer des systèmes de fichiers de conteneur vers différents hôtes, par exemple si un conteneur de base de données a des modifications importantes et qu'il n'est pas possible de répliquer ces modifications ailleurs. Veuillez noter qu'il est préférable de créer un conteneur entièrement nouveau à partir d'une image mise à jour à l'aide d'une commande docker run
ou d' docker-compose.yml
fichier docker-compose.yml
, au lieu d'exporter et de déplacer le système de fichiers d'un conteneur. Le pouvoir de Docker repose en partie sur l’auditabilité et la responsabilisation de son style déclaratif de création d’images et de conteneurs. En utilisant l' docker export
et l' docker import
, cette puissance est modérée en raison de l'obscurcissement des modifications apportées à l'intérieur du système de fichiers d'un conteneur par rapport à son état d'origine.
docker export -o redis.tar redis
La commande ci-dessus créera une image vide, puis exportera le système de fichiers du conteneur redis
dans cette image vide. Pour importer depuis une archive tarball, utilisez:
docker import ./redis.tar redis-imported:3.0.7
Cette commande crée l'image redis-imported:3.0.7
partir de laquelle des conteneurs peuvent être créés. Il est également possible de créer des modifications lors de l'importation, ainsi que de définir un message de validation:
docker import -c="ENV DEBUG true" -m="enable debug mode" ./redis.tar redis-changed
Les directives Dockerfile disponibles pour être utilisées avec l'option de ligne de commande -c
sont CMD
, ENTRYPOINT
, ENV
, EXPOSE
, ONBUILD
, USER
, VOLUME
, WORKDIR
.