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.