Docker partie 2 : les commandes de bases

Ce sujet fait suite à l’article “Docker Partie 1 : installation”, maintenant que Docker est installé, nous pouvons commencer à l’utiliser.

Récupérer les informations de l’installation

Récupérer l’état de l’installation, par exemple pour connaitre la version de docker ou si l’installation de Docker peux être utile.

Récupérer les informations de l’installation:

docker info

Récupérer les informations de la version:

docker version

Recherche une image sur docker hub

Docker permet de lancer des images téléchargées depuis le docker hub accessible via le lien suivant: https://hub.docker.com/. Ce hub rassemble beaucoup d’image, certaines sont certifiées comme étant officielles, d’autres non, les images peuvent être notées avec des étoiles. Attention: certaines images peuvent être corrompue, c’est pour cela qu’il est préférable de n’utiliser que des images officielles, quitte à parfois recréer ce qui a déja été fait.

Chercher une image sur dockerhub en ligne de commande:

docker search --no-trunc "nom de l'image à chercher"

Il est plus intéressant de chercher les images sur le dockerhub en web, cela permet d’afficher plus d’informations comme par exemple comment est construite l’image pour vérifier la sécurité des images non officielles

Les images

Obtenir une image

Pour télécharger une image de base, on doit commencer par la télécharger:

docker pull $IMAGE_NAME

Pour télécharger la dernière version de l’image:

docker pull $IMAGE_NAME:latest

Pour télécharger une version précise:

docker pull $IMAGE_NAME:$IMAGE_VERSION

Pour obtenir ces informations, le plus simple est de passer par le dockerhub.

Il est également possible d’utiliser ces options avec docker run pour avoir le même comportement

Les commandes sur les images

Pour lister les images téléchargées, il faut lancer la commande:

docker image list

Afficher l’historique des commandes utilisées pour construire l’image (souvent vide pour les images de base):

docker image history --no-trunc $IMAGE_NAME

Inspecter une image (voir les ports utilisés, les l’entrypoint, les commandes, variables d’environnement):

docker image inspect $IMAGE_NAME

Construire une image (le sujet sera de nouveau aborder plus tard):

docker image build Dockerfile

Supprimer une image:

docker rmi $IMAGE_NAME

Supprimer les images inutilisées:

docker image prune

Les conteneurs

Lister les conteneurs

Pour lister les conteneurs démarrer:

docker ps

Pour lister tous les conteneurs:

docker ps -a

commande alternative:

docker container list

Voir la consommation en ressource des conteneurs démarrés

Pour afficher la consommation en ressource des conteneurs:

docker container stats

Sauvegarder les modifications d’un conteneur

Pour sauvegarde l’état d’un conteneur, il faut le commit (comme git):

docker commit $CONTAINER_NAME

Alternative:

docker container commit $CONTAINER_NAME

Démarrer un conteneur

Pour lancer un conteneur:

docker start $CONTAINER_NAME
docker container start $CONTAINER_NAME

Arrêter un conteneur

Pour arrêter un conteneur:

docker stop $CONTAINER_NAME
docker container stop $CONTAINER_NAME

Supprimer un conteneur

Pour supprimer un conteneur:

docker rm $CONTAINER_NAME

Pour supprimer les conteneurs éteints:

docker container prune

Executer une commande dans un conteneur démarrer

Pour lancer une seule commande sur un conteneur en cours d’exécution:

docker container exec $CONTAINER_NAME COMMAND

Pour se connecter avec un shell sur le conteneur et garder la main sur le conteneur:

docker container exec -it $CONTAINER_NAME bash

Il est également possible d’utiliser sh ou zsh comme shell en fonction des distributions

Les autres commandes

J’ai traité les principales commandes, cependant la commande docker container --help en liste beaucoup d’autres.

Les volumes

Lister les volumes

Lister les volumes:

docker volume ls

Ou

docker volume list

Créer un volume

Créer un volume:

docker volume create $VOLUME_NAME

Inspecter un volume

Afficher les informations d’un volume:

docker volume inspect $VOLUME_NAME

Supprimer un volume

Supprimer un volume:

docker volume rm $VOLUME_NAME

Nettoyer les volumes

Pour supprimer les volumes non utilisés:

docker volume prune 

Les networks

Lister les networks:

docker network ls

ou

docker network list

Créer un network

Créer un network classique:

docker network create -d $DRIVER $NETWORK_NAME

Créer un network avec une plage d’ip:

docker network create --subnet $FIRST_IP_PLAGE/$MASK --gateway $GATEWAY_IP $NETWORK_NAME

Créer un network sur en utilisant le driver bridge qui ne pourra pas accéder au réseau externe:

docker network create -d bridge --internal $NETWORK_NAME

Connecter et déconnecter un conteneur à un network

Pour connecter un conteneur à un network:

docker network connect $CONTAINER_NAME $NETWORK_NAME

Pour connecter en précisant une ip:

docker network connect --ip $IP_ADDRESS $CONTAINER_NAME $NETWORK_NAME

La commande: docker network connect --help permet de voir toutes les informations

Pour déconnecter un conteneur à un network:

docker network disconnect $CONTAINER_NAME $NETWORK_NAME

Afficher les paramètres d’un network

Pour voir les paramètres d’un network:

docker network inspect $NETWORK_NAME

Supprimer les networks

Pour supprimer un réseau:

docker network rm $NETWORK_NAME

Pour nettoyer les network inutilisés:

docker network prune

La commande docker run

Créer un conteneur et le lancer en mode interactif:

docker run --it $IMAGE_NAME 

Créer un conteneur en mode interactif et le supprimer ensuite:

docker run --it --rm $IMAGE_NAME

Créer et lancer un conteneur en arrière plan:

docker run -d $IMAGE_NAME

Lancer un conteneur en remappant un port vers l’hote:

docker run -p 8080:80 $IMAGE_NAME

Créer un conteneur en lui liant un volume:

docker run -v $VOLUME_NAME:$CONTAINER_DIRECTORY_MAPPING $IMAGE_NAME

Créer un conteneur en attribuant une ip spécifique:

docker run --ip $IP $IMAGE_NAME

Créer un conteneur et le lier à un network:

docker run --network $NETWORK_NAME $IMAGE_NAME

Nettoyage complet de docker

Supprimer TOUT ce qui n’est pas utilisé par docker:

docker system prune

Nettoyer encore plus de choses:

docker system prune -a --volumes

Docker inspect

Obtenir un seul élément sur les informations sur les commandes inspect

Voici comment filtrer les éléments sur les commandes “inspect” pour n’obtenir qu’un seul élément:

-f "{{json .$ELEMENT_A_AFFICHER}}

Obtenir la configuration d’un network en json:

docker network inspect -f "{{json .}}" $NETWORK_NAME

par exemple pour voir tout les bindings de port utilisés:

docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{with $conf}}{{(index . 0).HostPort}}{{else}}none{{end}} {{end}}' $INSTANCE_ID

Pour plus d’information, utiliser la doc officielle de Docker: https://docs.docker.com/reference/cli/docker/inspect/