Commandes Docker
Cette fiche sert à rappeler les commandes des opérations courantes pour Docker.
Lancer un conteneur
docker run hello-world
Lister les conteneurs
docker container ls
ou
docker container ls -a
Lister les conteneurs en route
docker ps
ou
docker ps -a
Afficher l'espace disque par volume et par conteneur
docker system df -v
Renommer un conteneur
docker rename idduconteneur nouveaunom
Arrêter, supprimer un conteneur
docker ps
docker stop ID_DU_CONTENEUR
docker rm ID_DU_CONTENEUR
Utilisation des ressources Docker
On peut connaître l’utilisation des ressources de tout nos conteneurs avec docker stats
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
70a0036e3f42 grafana 0.02% 90.04MiB / 3.832GiB 2.29% 268kB / 73.1kB 38.2MB / 897kB 12
aa112804701d prestashop-prestashop-1 0.00% 381.2MiB / 3.832GiB 9.72% 33.9MB / 16.4MB 496MB / 81MB 12
81b6805b7958 prestashop-phpmyadmin-1 0.00% 59.95MiB / 3.832GiB 1.53% 820kB / 1.97MB 17.7MB / 274kB 11
cbbdfd1dc351 prestashop-mariadb-1 0.02% 161.2MiB / 3.832GiB 4.11% 6.7MB / 30.5MB 37.5MB / 70.2MB 20
52ff3ce2cdd4 some-mysql 0.04% 183.1MiB / 3.832GiB 4.67% 3.65kB / 0B 46.4MB / 289MB 27
0d30c50416ba uptime-kuma 1.85% 175.4MiB / 3.832GiB 4.47% 6.29GB / 902MB 10.7GB / 33.8GB 19
de1fe729a910 watchtower 0.00% 10.48MiB / 3.832GiB 0.27% 2.25MB / 724kB 237MB / 0B 8
5ecb123fd655 prometheus 1.68% 399.3MiB / 3.832GiB 10.18% 71.5GB / 2.04GB 47.6GB / 19.8GB 9
f5d4531cb702 node_exporter 0.00% 11.56MiB / 3.832GiB 0.29% 75.8MB / 1.48GB 120MB / 0B 5
80ac1dc21666 influxdb_container 0.03% 110.6MiB / 3.832GiB 2.82% 6.52GB / 562MB 1.86GB / 7.37GB 12
69c71229285a cadvisor 1.72% 78.89MiB / 3.832GiB 2.01% 316MB / 18.9GB 461MB / 0B 13
c11fd0979a9a snipeit_snipe-it_1 0.02% 191MiB / 3.832GiB 4.87% 1.02GB / 775MB 9.89GB / 95.7MB 18
2d48d154aaf6 snipe-mysql 0.04% 498.9MiB / 3.832GiB 12.71% 124MB / 994MB 849MB / 409MB 29
d851f1204226 dozzle 0.00% 6.77MiB / 3.832GiB 0.17% 28.4MB / 167MB 117MB / 0B 10
b52b9d4ee829 portainer_portainer_1 0.00% 22.48MiB / 3.832GiB 0.57% 3.48GB / 720MB 2.5GB / 7.56GB 7
Ouvrir un shell dans son conteneur
On peut ouvrir un shell en tant qu’utilisateur normal, ou en sudo avec -u 0
docker exec -ti ID_DU_CONTENEUR bash
docker exec -ti -u 0 ID_DU_CONTENEUR bash
Pour ajouter un fichier à un conteneur qui tourne, il faut mettre à jour le conteneur afin de pouvoir télécharger wget par exemple
apt update && apt get -y upgrade
apt-get -y install wget
wget URL_DU_FICHIER_A_TELECHARGER
Vous pouvez télécharger nano pour éditer un fichier de conf par exemple
apt-get -y install nano
Envoyer son image sur le Docker Hub
Pour envoyer une copie de son image sur son Docker Hub, il faut se connecter au hub avec vos identifiants, création de compte ici : Lien du Docker Hub
docker login
(se connecter avec vos IDs)
docker commit ID_DU_CONTENEUR pseudo_docker/repo:TAG
docker stop ID_DU_CONTENEUR
docker push pseudo_docker/repo:TAG
Création d'une image Docker
Pour créer une image, il faut créer un fichier “Dockerfile”, il faut le voir comme le sommaire d’une recette de cuisine d’une pièce montée, ou chaque instruction (appelée Layer), serait comme un nouvel étage de la pièce montée. Pour que le conteneur soit le plus performant possible il faut limiter le nombre d’étages de notre pièce montée. Une fois tout les instructions imprimées dans votre fichier, il suffit de lancer la commande :
docker build #nomdufichier
Il faut ensuite lister les images, tagger son image, et la pousser sur le Docker Hub
docker image -a
docker tag ID_DE_LIMAGE pseudo_docker/MON_IMAGE
dockerpush peudo_docker/MON_IMAGE
Supprimer une image
Pour supprimer une image il faut utiliser docker images et docker rmi
docker images
docker rmi nom_image
Réparer Docker
Parfois Docker, ça marche pas. Il faut lancer ces commandes affin de repartir proprement.
docker system prune
wget -qO- https://get.docker.com/ | sh
systemctl restart docker.service
systemctl status docker.service
Copier des fichiers dans un conteneur
Pour copier des fichiers depuis sa machine hôte vers son conteneur, il faut utiliser docker cp
docker cp nomdufichier/ idconteneur:/dossier
Par exemple :
docker cp hello.txt 47e92dc425c4:/srv
On peut également faire l’inverse et donc copier des fichiers depuis un conteneur vers sa machine hôte :
docker cp 47e92dc425c4:/hello.txt /home/debian/
Ou bien d’un conteneur vers un autre avec la syntaxe suivante :
docker cp 47e92dc425c4:/hello.txt .
docker exec -i 03e18e5de3d5 sh -c 'cat > ./hello.txt' < ./hello.txt
Error > port in use
Si docker vous dis que le port 53 est occupé, il faut relancer le service DNS pour lui laisser la place
systemctl stop systemd-resolved
systemctl disable systemd-resolved
systemctl restart systemd-resolved
Si un autre port est occupé, on peut utiliser lsof pour lister les processus qui utilisent le port, ici je vais regarder le port 22 par exemple
lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 629 root 3u IPv4 18451 0t0 TCP *:ssh (LISTEN)
sshd 629 root 4u IPv6 18453 0t0 TCP *:ssh (LISTEN)
sshd 1987038 root 4u IPv4 178802227 0t0 TCP addok:ssh->admin-serv79.umd.edu:53451 (ESTABLISHED)
On peut aussi tout lister avec ss
ss -lptun
tcp LISTEN 0 4096 [::]:9443 [::]:* users:(("docker-proxy",pid=1750088,fd=4))
tcp LISTEN 0 4096 [::]:7878 [::]:* users:(("docker-proxy",pid=1664290,fd=4))
tcp LISTEN 0 4096 [::]:9000 [::]:* users:(("docker-proxy",pid=737485,fd=4))
tcp LISTEN 0 4096 [::]:9001 [::]:* users:(("docker-proxy",pid=737663,fd=4))
tcp LISTEN 0 50 [::]:139 [::]:* users:(("smbd",pid=769,fd=48))
tcp LISTEN 0 4096 [::]:3020 [::]:* users:(("docker-proxy",pid=1945500,fd=4))
tcp LISTEN 0 4096 [::]:3021 [::]:* users:(("docker-proxy",pid=1945468,fd=4))
Plus d’informations sur : https://ldugrain.xyz/reseaulinux/