Docker command cheat sheet for sysadmin and developers…

Docker est un système de conteneurisation qui empaquette et exécute l’application avec ses dépendances à l’intérieur d’un conteneur. Il existe plusieurs commandes Docker que vous devez connaître lorsque vous travaillez avec Docker. Cet article est consacré à ce sujet.

Si vous ne savez pas ce qu’est Docker, vous pouvez suivre ce cours Udemy pour débutants.

Trouver la version

L’une des premières choses que vous voulez savoir est comment trouver la version installée de Docker.

geekflare@geekflare:/home/geekflare$ docker --version

Docker version 18.09.6, build 481bc77

Téléchargement de l’image

Supposons que vous ayez besoin de télécharger l’image Docker depuis dockerhub (dépôt Docker). L’exemple suivant montre comment télécharger l’image du serveur HTTP Apache.

geekflare@geekflare:/home/geekflare$ docker pull httpd

Utilisation de la balise par défaut : latest

latest : Extraction de la bibliothèque/httpd

f5d23c7fed46 : Extraction terminée

b083c5fd185b : Pull terminé

bf5100a89e78 : Pull terminé

98f47fcaa52f : Pull complet

622a9dd8cfed : Pull terminé

Digest: sha256:8bd76c050761610773b484e411612a31f299dbf7273763103edbda82acd73642

Statut : Téléchargement d'une image plus récente pour httpd:latest

geekflare@geekflare:/home/geekflare$

Images

Liste toutes les images docker présentes sur le système avec les détails de l’image tels que TAG/IMAGE ID/SIZE etc.

geekflare@geekflare:/home/geekflare$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

httpd latest ee39f68eb241 il y a 2 jours 154MB

hello-world dernier fce289e99eb9 il y a 6 mois 1.84kB

sequenceiq/hadoop-docker 2.7.0 789fa0a3b911 il y a 4 ans 1.76GB

Exécuter

Exécutez l’image docker mentionnée dans la commande. Cette commande créera un conteneur docker dans lequel le serveur HTTP Apache sera exécuté.

geekflare@geekflare:/home/geekflare$ docker run -it -d httpd

09ca6feb6efc0578951a3e2557ed5855b2edda39a795d9703eb54d975930fe6e

Qu’est-ce qui s’exécute ?

ps liste tous les conteneurs Docker en cours d’exécution avec les détails du conteneur.

geekflare@geekflare:/home/geekflare$ docker ps

ID DU CONTENEUR IMAGE COMMANDE CRÉÉ STATUT PORTS NOMS

09ca6feb6efc httpd "httpd-foreground" il y a 36 secondes Up 33 seconds 80/tcp suspicious_bell

Comme vous pouvez le voir, le serveur Apache tourne dans ce conteneur docker.

ps -a

Liste tous les conteneurs Docker en cours d’exécution/quittés/arrêtés avec les détails du conteneur.

geekflare@geekflare:/home/geekflare$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

09ca6feb6efc httpd "httpd-foreground" il y a 51 secondes Up 49 seconds 80/tcp suspicious_bell

2f6fb3381078 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -d" il y a 2 semaines Exited (137) il y a 9 jours quizzical_raman

9f397feb3a46 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -..." il y a 2 semaines Exited (255) il y a 2 semaines 2122/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 19888/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp determined_ritchie

9b6343d3b5a0 hello-world "/hello" il y a 2 semaines Exited (0) il y a 2 semaines peaceful_mclean

exec

Accédez au conteneur Docker et exécutez les commandes à l’intérieur du conteneur. Dans cet exemple, j’accède au conteneur du serveur apache.

geekflare@geekflare:/home/geekflare$ docker exec -it 09ca6feb6efc bash

root@09ca6feb6efc:/usr/local/apache2# ls

bin build cgi-bin conf error htdocs icons include logs modules

root@09ca6feb6efc:/usr/local/apache2#

Tapez exit et appuyez sur enter pour sortir du conteneur.

Suppression du conteneur

Supprimez le conteneur docker avec l’identifiant de conteneur mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker rm 9b6343d3b5a0

9b6343d3b5a0

Exécutez la commande ci-dessous pour vérifier si le conteneur a été supprimé ou non.

geekflare@geekflare:/home/geekflare$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

09ca6feb6efc httpd "httpd-foreground" Il y a environ une minute Up Il y a environ une minute 80/tcp suspicious_bell

2f6fb3381078 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -d" il y a 2 semaines Exited (137) il y a 9 jours quizzical_raman

9f397feb3a46 sequenceiq/hadoop-docker:2.7.0 "/etc/bootstrap.sh -..." il y a 2 semaines Exited (255) il y a 2 semaines 2122/tcp, 8030-8033/tcp, 8040/tcp, 8042/tcp, 8088/tcp, 19888/tcp, 49707/tcp, 50010/tcp, 50020/tcp, 50070/tcp, 50075/tcp, 50090/tcp determined_ritchie

Suppression de l’image

Supprimez l’image docker avec l’identifiant d’image docker mentionné dans la commande

geekflare@geekflare:/home/geekflare$ docker rmi fce289e99eb9

Untagged : hello-world:latest

Untagged: hello-world@sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8

Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e

Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3

geekflare@geekflare:/home/geekflare$

Redémarrez Docker

Redémarrez le conteneur Docker avec l’identifiant du conteneur mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker restart 09ca6feb6efc

09ca6feb6efc

Exécutez la commande ci-dessous et vérifiez le paramètre STATUS pour vérifier si le conteneur a démarré récemment.

geekflare@geekflare:/home/geekflare$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

09ca6feb6efc httpd "httpd-foreground" il y a 6 minutes Up 9 seconds 80/tcp suspicious_bell

Arrêt de Docker

Arrêtez un conteneur avec l’identifiant de conteneur mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker stop 09ca6feb6efc

09ca6feb6efc

Exécutez la commande ci-dessous pour vérifier si le conteneur est toujours en cours d’exécution ou s’il s’est arrêté.

geekflare@geekflare:/home/geekflare$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Démarrer Docker

Cette commande dans Docker démarre le conteneur Docker avec l’identifiant du conteneur mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker start 09ca6feb6efc

09ca6feb6efc

Exécutez la commande ci-dessous pour vérifier si le conteneur a démarré ou non.

geekflare@geekflare:/home/geekflare$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

09ca6feb6efc httpd "httpd-foreground" il y a 8 minutes Up 3 seconds 80/tcp suspicious_bell

Tuer

Arrête le conteneur Docker immédiatement. La commande stop de Docker arrête le conteneur avec élégance, c’est la différence entre une commande kill et stop.

geekflare@geekflare:/home/geekflare$ docker kill 09ca6feb6efc

09ca6feb6efc

Exécutez la commande ci-dessous pour voir si le conteneur a été tué ou non.

geekflare@geekflare:/home/geekflare$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Engagement

Enregistrez une nouvelle image docker avec l’identifiant de conteneur mentionné dans la commande sur le système local. Dans l’exemple ci-dessous, geekflare est le nom d’utilisateur, et httpd_image est le nom de l’image.

geekflare@geekflare:/home/geekflare$ docker commit 09ca6feb6efc geekflare/httpd_image

sha256:d1933506f4c1686ab1a1ec601b1a03a17b41decbc21d8acd893db090a09bb31c

Connexion

Connectez-vous à docker hub. Vos identifiants docker hub vous seront demandés pour vous connecter.

geekflare@geekflare:/home/geekflare$ docker login

Connectez-vous avec votre identifiant Docker pour pousser et tirer des images de Docker Hub. Si vous n'avez pas d'identifiant Docker, rendez-vous sur https://hub.docker.com pour en créer un.

Nom d'utilisateur : geekflare

Mot de passe :

Configurez une aide à l'authentification pour supprimer cet avertissement. Voir

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Connexion réussie

Poussez

Téléchargez une image docker avec le nom d’image mentionné dans la commande sur le dockerhub.

geekflare@geekflare:/home/geekflare$ docker push geekflare/httpd_image

Le push fait référence au dépôt [docker.io/geekflare/httpd_image]

734d9104a6a2 : Poussé

635721fc6973 : Monté depuis library/httpd

bea448567d6c : Monté depuis library/httpd

bfaa5f9c3b51 : Monté depuis library/httpd

9d542ac296cc : Monté depuis library/httpd

d8a33133e477 : Monté depuis library/httpd

latest : digest : sha256:3904662761df9d76ef04ddfa5cfab764b85e3eedaf10071cfbe2bf77254679ac size : 1574

Réseau Docker

La commande suivante dans Docker liste les détails de tous les réseaux dans le cluster.

geekflare@geekflare:/home/geekflare$ docker network ls

NETWORK ID NAME DRIVER SCOPE

85083e766f04 bridge bridge local

f51d1f3379e0 host host local

5e5d9a192c00 none null local

Il existe plusieurs autres commandes docker network.

geekflare@geekflare:/home/geekflare$ docker network

Utilisation : docker network COMMANDE

Gérer les réseaux

Commandes :

connect Connecter un conteneur à un réseau

create Créer un réseau

disconnect Déconnecter un conteneur d'un réseau

inspect Afficher des informations détaillées sur un ou plusieurs réseaux

ls Liste des réseaux

prune Supprimer tous les réseaux inutilisés

rm Supprimer un ou plusieurs réseaux

Exécutez 'docker network COMMAND --help' pour plus d'informations sur une commande.

Docker info

Obtenez des informations détaillées sur Docker installé sur le système, y compris la version du noyau, le nombre de conteneurs et d’images, etc.

geekflare@geekflare:/home/geekflare$ docker info

Conteneurs : 3

En cours d'exécution : 1

En pause : 0

Arrêtée : 2

Images : 3

Version du serveur : 18.09.6

Pilote de stockage : overlay2

Système de fichiers de sauvegarde : extfs

Prend en charge d_type : true

Diffusion native par superposition : true

Pilote de journalisation : json-file

Pilote de groupe : cgroupfs

Plugins :

Volume : local

Réseau : bridge host macvlan null overlay

Log : awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog

Swarm : inactif

Temps d'exécution : runc

Temps d'exécution par défaut : runc

Binaire d'initialisation : docker-init

version de containerd : bb71b10fd8f58240ca47fbb579b9d1028eea7c84

runc version : 2b18fe1d885ee5083ef9f0838fee39b62d653e30

version init : fec3683

Options de sécurité :

apparmor

seccomp

Profil : default

Version du noyau : 4.18.0-25-générique

Système d'exploitation : Ubuntu 18.10

OSType : linux

Architecture : x86_64

CPUs : 1

Mémoire totale : 4.982GiB

Nom : geekflare

ID : RBCP:YGAP:QG6H:B6XH:JCT2:DTI5:AYJA:M44Z:ETRP:6TO6:OPAY:KLNJ

Docker Root Dir : /var/lib/docker

Debug Mode (client) : false

Mode débogage (serveur) : false

Nom d'utilisateur : geekflare

Registre : https://index.docker.io/v1/

Étiquettes :

Expérimental : false

Registres non sécurisés :

127.0.0.0/8

Restauration en direct activée : false

Licence du produit : Moteur communautaire

Copie du fichier

Copier un fichier d’un conteneur docker vers le système local.

Dans cet exemple, je copie le fichier httpd.pid à l’intérieur d’un conteneur docker avec l’id 09ca6feb6efc vers /home/geekflare/

geekflare@geekflare:/home/geekflare$ sudo docker cp 09ca6feb6efc:/usr/local/apache2/logs/httpd.pid /home/geekflare/

mot de passe[sudo] pour geekflare :

Exécutez la commande ci-dessous pour vérifier si le fichier a été copié ou non.

geekflare@geekflare:/home/geekflare$ ls

Documents de bureau exemple exemples.desktop httpd.pid nginx_new.yml nginx.yml

Vérification de l’historique

Affiche l’historique d’une image docker avec le nom d’image mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker history httpd

IMAGE CREATED CREATED BY SIZE COMMENT

ee39f68eb241 il y a 2 jours /bin/sh -c #(nop) CMD ["httpd-foreground"] 0B

<missing> il y a 2 jours /bin/sh -c #(nop) EXPOSE 80 0B

<missing> il y a 2 jours /bin/sh -c #(nop) COPY file:c432ff61c4993ecd... 138B

<missing> il y a 4 jours /bin/sh -c set -eux ; savedAptMark="$(apt-m... 49.1MB

<missing> il y a 4 jours /bin/sh -c #(nop) ENV HTTPD_PATCHES= 0B

<missing> il y a 4 jours /bin/sh -c #(nop) ENV HTTPD_SHA256=b4ca9d05... 0B

<missing> il y a 4 jours /bin/sh -c #(nop) ENV HTTPD_VERSION=2.4.39 0B

<missing> Il y a 4 jours /bin/sh -c set -eux ; apt-get update ; apt-g... 35.4MB

<missing> il y a 4 jours /bin/sh -c #(nop) WORKDIR /usr/local/apache2 0B

<missing> il y a 4 jours /bin/sh -c mkdir -p "$HTTPD_PREFIX" && chow... 0B

<missing> il y a 4 jours /bin/sh -c #(nop) ENV PATH=/usr/local/apach... 0B

<missing> il y a 4 jours /bin/sh -c #(nop) ENV HTTPD_PREFIX=/usr/loc... 0B

<missing> il y a 5 jours /bin/sh -c #(nop) CMD ["bash"] 0B

<missing> il y a 5 jours /bin/sh -c #(nop) ADD file:71ac26257198ecf6a... 69.2MB

Vérification des journaux

Affichez les journaux du conteneur Docker avec l’identifiant contenu mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker logs 09ca6feb6efc

AH00558 : httpd : Could not reliable determine the fully qualified domain name of the server, using 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

AH00558 : httpd : Impossible de déterminer de manière fiable le nom de domaine complet du serveur, en utilisant 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

[Mon Jul 15 14:01:55.400472 2019] [mpm_event:notice] [pid 1:tid 140299791516800] AH00489 : Apache/2.4.39 (Unix) configuré -- reprise des opérations normales

[Mon Jul 15 14:01:55.400615 2019] [core:notice] [pid 1:tid 140299791516800] AH00094 : Ligne de commande : 'httpd -D FOREGROUND'

[Mon Jul 15 14:08:36.798229 2019] [mpm_event:notice] [pid 1:tid 140299791516800] AH00491 : SIGTERM détecté, arrêt de l'application

AH00558 : httpd : Impossible de déterminer de manière fiable le nom de domaine pleinement qualifié du serveur, en utilisant 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

AH00558 : httpd : Impossible de déterminer de manière fiable le nom de domaine complet du serveur, en utilisant 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

[Mon Jul 15 14:08:38.259870 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00489 : Apache/2.4.39 (Unix) configuré -- reprise des opérations normales

[Mon Jul 15 14:08:38.260007 2019] [core:notice] [pid 1:tid 139974087980160] AH00094 : Ligne de commande : 'httpd -D FOREGROUND'

[Mon Jul 15 14:09:01.540647 2019] [mpm_event:notice] [pid 1:tid 139974087980160] AH00491 : SIGTERM détecté, arrêt de l'application

AH00558 : httpd : Impossible de déterminer de manière fiable le nom de domaine pleinement qualifié du serveur, en utilisant 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

AH00558 : httpd : Impossible de déterminer de manière fiable le nom de domaine complet du serveur, en utilisant 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

[Mon Jul 15 14:10:43.782606 2019] [mpm_event:notice] [pid 1:tid 140281554879616] AH00489 : Apache/2.4.39 (Unix) configuré -- reprise des opérations normales

[Mon Jul 15 14:10:43.782737 2019] [core:notice] [pid 1:tid 140281554879616] AH00094 : Ligne de commande : 'httpd -D FOREGROUND'

AH00558 : httpd : Could not reliable determine the fully qualified domain name of the server, using 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

AH00558 : httpd : Impossible de déterminer de manière fiable le nom de domaine complet du serveur, en utilisant 172.17.0.2. Définissez la directive 'ServerName' globalement pour supprimer ce message

[Mon Jul 15 14:14:08.270906 2019] [mpm_event:notice] [pid 1:tid 140595254346880] AH00489 : Apache/2.4.39 (Unix) configuré -- reprise des opérations normales

[Mon Jul 15 14:14:08.272628 2019] [core:notice] [pid 1:tid 140595254346880] AH00094 : Ligne de commande : 'httpd -D FOREGROUND'

Recherche d’une image

Recherchez une image docker sur dockerhub avec le nom mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker search hadoop

NOM DESCRIPTION ÉTOILES OFFICIEL AUTOMATISÉ

sequenceiq/hadoop-docker Un moyen simple d'essayer Hadoop 611 [OK]

uhopper/hadoop Image Hadoop de base avec configuration dynamique... 98 [OK]

harisekhon/hadoop Apache Hadoop (HDFS Yarn, tags 2.2 - 2.8) 54 [OK]

bde2020/hadoop-namenode Nom Hadoop d'un cluster Hadoop 22 [OK]

kiwenlau/hadoop Exécuter un cluster Hadoop dans des conteneurs Docker 19

izone/hadoop Hadoop 2.8.5 Ecosystème entièrement distribué, Ju... 14 [OK]

uhopper/hadoop-namenode Hadoop namenode 9 [OK]

bde2020/hadoop-datanode Datanode Hadoop d'un cluster Hadoop 9 [OK]

singularities/hadoop Apache Hadoop 8 [OK]

uhopper/hadoop-datanode Datanode Hadoop 7 [OK]

harisekhon/hadoop-dev Apache Hadoop (HDFS Yarn) Dev Tools Gi... 6 [OK]

Mise à jour de la configuration

Mettez à jour les configurations des conteneurs. Ceci montre toutes les options de mise à jour.

geekflare@geekflare:/home/geekflare$ docker update --help

Utilisation : docker update [OPTIONS] CONTAINER [CONTAINER...]

Mettre à jour la configuration d'un ou plusieurs conteneurs

Options :

--blkio-weight uint16 Block IO (poids relatif), entre 10 et 1000, ou 0 pour désactiver

(par défaut 0)

--cpu-period int Limiter la période CFS (Completely Fair Scheduler) du CPU

--cpu-quota int Limiter le quota de CFS du CPU (Completely Fair Scheduler)

--cpu-rt-period int Limite la période en temps réel du CPU en microsecondes

--cpu-rt-runtime int Limite la durée d'exécution en temps réel du processeur en microsecondes

-c, --cpu-shares int Parts du CPU (poids relatif)

--cpus decimal Nombre de CPU

--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)

--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)

--kernel-memory bytes Limite de mémoire du noyau

-m, --memory octets Limite de mémoire

--mory-reservation octets Limite de mémoire souple

--memory-swap octets Limite de swap égale à la mémoire plus le swap : '-1' pour permettre un swap illimité

--restart string Politique de redémarrage à appliquer lors de la sortie d'un conteneur

Exécutez la commande ci-dessous pour mettre à jour la configuration CPU du conteneur Docker avec l’identifiant du conteneur mentionné dans la commande.

geekflare@geekflare:/home/geekflare$ docker update -c 1 2f6fb3381078

2f6fb3381078

Création du volume

Créez un volume que le conteneur docker utilisera pour stocker des données.

geekflare@geekflare:/home/geekflare$ docker volume create

7e7bc886f69bb24dbdbf19402e31102a25db91bb29c56cca3ea8b0c611fd9ad0

Exécutez la commande ci-dessous pour vérifier si le volume a été créé ou non.

geekflare@geekflare:/home/geekflare$ docker volume ls

DRIVER VOLUME NAME

local 7e7bc886f69bb24dbdbf19402e31102a25db91bb29c56cca3ea8b0c611fd9ad0

Installation du plugin

Installez un plugin docker vieux/sshfs avec l’environnement debug à 1.

geekflare@geekflare:/home/geekflare$ docker plugin install vieux/sshfs DEBUG=1

Le plugin "vieux/sshfs" demande les privilèges suivants :

- réseau : [hôte]

- mount : [/var/lib/docker/plugins/]

- mount : []

- device : [/dev/fuse]

- capabilities : [CAP_SYS_ADMIN]

Accordez-vous les permissions ci-dessus ? [y/N] y

dernier : Tiré de vieux/sshfs

52d435ada6a4 : Téléchargement terminé

Digest: sha256:1d3c3e42c12138da5ef7873b97f7f32cf99fb6edde75fa4f0bcf9ed277855811

Statut : Téléchargement d'une image plus récente pour vieux/sshfs:latest

Installation du plugin vieux/sshfs

Exécutez la commande ci-dessous pour lister les plugins docker.

geekflare@geekflare:/home/geekflare$ docker plugin ls

ID NAME DESCRIPTION ENABLED

2a32d1fb95af vieux/sshfs:dernier plugin sshFS pour Docker true

Déconnexion

Déconnexion de dockerhub.

geekflare@geekflare:/home/geekflare$ docker logout

Suppression des identifiants de connexion pour https://index.docker.io/v1/

Conclusion

J’espère que vous avez maintenant une bonne compréhension des commandes Docker. Essayez ces commandes dans votre environnement de développement ou de laboratoire pour pratiquer et apprendre.

Si vous êtes intéressé par l’apprentissage de Docker et Kubernetes, consultez ce cours en ligne.