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/