Docker – Introduction
Docker est un outil de gestion de plate-forme ouverte pour les conteneurs Linux. Il permet aux développeurs et aux administrateurs système de créer et de conditionner des applications dans des conteneurs légers. Docker comprend les composants suivants :
- Moteur Docker - Un outil d'exécution et d'empaquetage portable et léger
- Centre Docker – Un service cloud pour partager des applications et automatiser les flux de travail
Docker est utilisé pour créer des conteneurs d'applications basés sur des images. Les conteneurs basés sur des images regroupent une application avec la pile d'exécution individuelle dans un seul conteneur. Cela rend le conteneur indépendant du système d'exploitation hôte et de la version du noyau. Par conséquent, vous pouvez exécuter la même application, sans modification, sur des ordinateurs portables, des machines virtuelles de centre de données et n'importe quel cloud. Vous pouvez transférer ce conteneur vers une autre machine qui exécute Docker et exécute l'application sans aucun problème de compatibilité.
La liste suivante répertorie les avantages supplémentaires de l'exécution d'applications dans des conteneurs Docker :
- Les images Docker ne contiennent que le contenu nécessaire à l'exécution d'une application. Elles sont donc plus petites que les machines virtuelles, qui nécessitent l'intégralité du système d'exploitation.
- Un conteneur Docker s'exécute plus rapidement qu'une application qui inclut la surcharge d'une machine virtuelle entière.
- Un conteneur Docker comprend ses propres interfaces réseau, système de fichiers et mémoire, ce qui permet d'isoler et de sécuriser l'application exécutée dans le conteneur des autres processus sur l'ordinateur hôte.
Images Docker
Les conteneurs Docker sont construits à partir d'images Docker. Vous créez des conteneurs Docker pour exécuter vos applications à partir de ces images Docker. L'exemple suivant crée un conteneur Docker nommé "test" à partir d'une image Docker nommée centos:7" et exécute /bin/bash.
# docker create --name test centos:7 /bin/bash Unable to find image 'centos:7' locally Trying to pull repository docker.io/library/centos ... 7: Pulling from docker.io/library/centos 469cfcc7a4b3: Pull complete Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:7 a79ce1655f2ca17c7ac8cc15f307ba0bb438fbebd4595568df3433dd5ff79b73
Les images sont des modèles en lecture seule qui peuvent contenir un système d'exploitation complet avec des services et des applications supplémentaires installés. Docker offre la possibilité de créer des images ou de mettre à jour des images existantes. Vous pouvez créer des images Docker à partir de la ligne de commande ou vous pouvez stocker les instructions pour créer une image dans un Dockerfile. Docker lit ce Dockerfile et exécute les instructions lorsque vous lancez la construction d'une image Docker.
Chaque image commence à partir d'une image de base (par exemple, centos). Chaque image Docker consiste en une série de couches construites à partir de ces images de base. Chaque instruction du Dockerfile crée un nouveau calque dans l'image. Chaque fois que vous apportez une modification à une image Docker, seule cette couche est mise à jour ou ajoutée. Docker utilise unionfs pour combiner ces calques en une seule image. Le service de système de fichiers unionfs permet de superposer des fichiers et des répertoires de systèmes de fichiers distincts dans un seul système de fichiers.
Après avoir créé une image Docker, vous pouvez partager les images en les stockant dans des registres Docker. Ces registres peuvent être privés ou publics. Docker Hub est le registre public Docker qui agit comme une plate-forme Software-as-a-Service pour le partage et la gestion des conteneurs Docker.
Comment installer Docker sur CentOS / RHEL / FedoraComment installer Docker sur Mac
Le registre Docker Hub
Le Docker Hub Registry héberge des applications en tant qu'images Docker et fournit des services qui vous permettent de créer et de gérer un environnement Docker. Le registre Docker Hub est détenu et géré par Docker, Inc. et se trouve à l'adresse https://registry.hub.docker.com/.
Docker Hub fournit un certain nombre de référentiels et chaque référentiel peut contenir un certain nombre d'images. En plus d'héberger des images Docker, Docker Hub fournit des services tels que l'authentification des utilisateurs, la création d'images automatisées et des outils de flux de travail, ainsi que l'intégration avec GitHub et BitBucket. Pour utiliser ces services Docker, vous devez créer un compte Docker Hub. Vous pouvez créer un compte sur https://hub.docker.com/account/signup/. Vous pouvez également créer un compte depuis la ligne de commande en utilisant la commande suivante :
# docker loginComment créer un référentiel public/privé dans Docker Hub et le connecter à distance à l'aide de la ligne de commande
Vous pouvez rechercher des images Docker et extraire (télécharger) des images du Docker Hub sans avoir de compte. Pour envoyer (télécharger) des images, laisser des commentaires sur une image ou un référentiel et utiliser tous les services Docker Hub disponibles, vous avez besoin d'un compte Docker Hub.
Installation et démarrage de Docker
L'installation et le démarrage du service docker est une tâche facile. Vous pouvez utiliser la commande suivante pour installer le package docker :
# yum install docker
Utilisez la commande systemctl pour activer et démarrer le service docker.
# systemctl enable docker # systemctl start docker
Par défaut, Docker utilise devicemapper comme pilote de stockage. Avec RedHat Linux 7, vous pouvez configurer le moteur Docker pour utiliser Btrfs. Cela vous permet de tirer parti des fonctionnalités d'instantané de Btrfs. La commande suivante affiche tous les fichiers installés à partir du package docker :
# rpm -ql docker /etc/docker /etc/docker/certs.d /etc/docker/certs.d/redhat.com /etc/docker/certs.d/redhat.com/redhat-ca.crt /etc/docker/certs.d/redhat.io /etc/docker/certs.d/redhat.io/redhat-ca.crt ...
Vous pouvez voir qu'en plus des fichiers binaires et des fichiers de configuration Docker, la documentation et les pages de manuel sont installées pour toutes les commandes Docker. Le répertoire /var/lib/docker est vide jusqu'au démarrage du service docker. La série de commandes suivante affiche le contenu du répertoire avant et après le démarrage de docker.
# ls /var/lib/docker # systemctl enable docker # systemctl start docker # ls /var/lib/docker containers graph linkgraph.db tmp volumes devicemapper init repositories-devicemapper trust
L'utilitaire docker
L'interface de ligne de commande Docker a plus de 30 commandes. Reportez-vous à la page de manuel de docker pour obtenir une liste des commandes. La commande docker info affiche des informations à l'échelle du système sur l'installation de Docker. Voir la page de manuel docker-info pour plus d'informations. Notez que le pilote de stockage par défaut est devicemapper et que les données et les métadonnées sont stockées dans des périphériques en boucle :/dev/loop0 et /dev/loop1.
# docker info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 1.13.1 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: false Native Overlay Diff: true Logging Driver: journald ...
Les utilisateurs autres que root peuvent exécuter des commandes docker si vous les ajoutez au groupe docker et reconfigurez le service docker.
Rechercher des images dans le registre Docker Hub
Utilisez la commande docker search pour rechercher des images dans Docker Hub. Vous trouverez ci-dessous le résultat de la commande "docker search" :
# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 52 [OK] docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 40 [OK] ...
Cette commande recherche les images "centos" dans Docker Hub. La sortie comprend le nom du référentiel/image, une description, le nombre d'étoiles attribuées, si l'image est officielle et si elle est automatisée. La colonne de nom se présente sous la forme suivante et peut inclure le référentiel contenant pour fournir une identification unique :
[repository_name]/[image_name]
Les étoiles mesurent la popularité des images. Toute personne disposant d'un compte Docker Hub peut « mettre en vedette » une image si elle l'aime. L'exemple suivant recherche les images "centos" avec au moins 3 étoiles :
# docker search -s 3 centos Flag --stars has been deprecated, use --filter=stars=3 instead INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4207 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 108 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8... 94 [OK] ...
Un référentiel "officiel" est certifié par un fournisseur ou un contributeur de Docker. Une image « automatisée » est créée par le processus de création automatisé de Docker Hub.
Téléchargement d'images depuis Docker Hub
Utilisez la commande « docker pull » pour télécharger une image ou un référentiel du registre Docker Hub vers votre système local. L'exemple suivant déroule l'image centos:latest.
# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos Digest: sha256:989b936d56b1ace20ddf855a301741e52abca38286382cba7f44443210e96d16 Status: Downloaded newer image for docker.io/centos:latest
Utilisez la commande "docker images" pour répertorier les images stockées dans le référentiel Docker local.
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB
Chaque image d'un référentiel se distingue par TAG et IMAGE ID.
Ce qui suit montre l'emplacement des fichiers de configuration Docker.
# cd /var/lib/docker/ # ll total 4 drwx------. 3 root root 77 Apr 21 07:57 containers drwx------. 3 root root 21 Apr 21 07:56 image drwxr-x---. 3 root root 18 Apr 21 07:56 network drwx------. 6 root root 4096 Apr 21 07:57 overlay2 drwx------. 4 root root 30 Apr 21 07:56 plugins drwx------. 2 root root 6 Apr 21 07:56 swarm drwx------. 2 root root 6 Apr 21 07:57 tmp drwx------. 2 root root 6 Apr 21 07:56 trust drwx------. 2 root root 24 Apr 21 07:56 volumesComment répertorier / rechercher / extraire des images docker sous Linux
Exécuter une application dans un conteneur
Utilisez la commande docker run pour exécuter une application dans un conteneur. Cette commande démarre un processus avec son propre système de fichiers, sa propre mise en réseau et sa propre arborescence de processus isolée. La syntaxe suivante n'inclut pas toutes les options disponibles pour la commande :
# docker run [OPTION...] IMAGE [COMMMAND] {ARG...]
L'IMAGE qui démarre le processus peut définir les valeurs par défaut liées au processus à exécuter dans le conteneur, la mise en réseau, etc., mais les options d'exécution du menu fixe remplacent les paramètres de l'IMAGE. Si l'IMAGE n'est pas disponible localement, docker run extrait l'image de la même manière que la commande docker pull avant de démarrer le conteneur dans l'IMAGE.
Vous trouverez ci-dessous deux exemples d'utilisation de docker run. Le premier exemple utilise l'image "centos", qui existe déjà sur la machine locale. Docker utilise l'image pour créer un nouvel environnement CentOS, puis exécute la commande echo pour afficher "Bonjour".
# docker run centos /bin/echo "Hello" Hello
Le deuxième exemple utilise l'image fedora, qui n'est pas présente sur le système local. Docker extrait l'image de Docker Hub, puis utilise l'image pour créer un nouvel environnement Fedora et exécute la commande echo.
# docker run fedora /bin/echo "Hello" Unable to find image 'fedora:latest' locally Trying to pull repository docker.io/library/fedora ... latest: Pulling from docker.io/library/fedora 2176639d844b: Pull complete Digest: sha256:ec588fc80b05e19d3006bf2e8aa325f0a2e2ff1f609b7afb39176ca8e3e13467 Status: Downloaded newer image for docker.io/fedora:latest Hello
Dans les deux exemples, les conteneurs Docker s'arrêtent après l'affichage de "Hello" à l'écran. Utilisez la commande docker ps pour répertorier les conteneurs et aucun conteneur n'est affiché :
# docker ps
C'est parce que "docker ps" affiche uniquement les conteneurs en cours d'exécution. Pour afficher tous les conteneurs, y compris ceux arrêtés, utilisez la commande "docker ps -a".
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b772ea59c92 fedora "/bin/echo Hello" 25 seconds ago Exited (0) 23 seconds ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" About a minute ago Exited (0) About a minute ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
La commande docker images indique que la "dernière" image du référentiel "fedora" a été téléchargée depuis Docker Hub lors de l'utilisation de la commande docker run :
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos 7 e934aafc2206 2 weeks ago 199 MB docker.io/centos latest e934aafc2206 2 weeks ago 199 MB docker.io/fedora latest 9110ae7f579f 6 weeks ago 235 MB
Exécuter un conteneur Docker interactif
Utilisez le –t et –i options avec la commande docker run pour exécuter un conteneur interactif. Ces options sont décrites :
- -t :Allouer un pseudo-tty et l'attacher au STDIN (entrée standard) d'un conteneur
- -i :Garde STDIN d'un conteneur ouvert
Vous trouverez ci-dessous deux exemples d'utilisation des commandes d'exécution de docker avec les options –t et –i. Dans les deux exemples, CentOS Linux 7.4 s'exécute sur le système local :
# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Le premier exemple utilise l'image "centos:7". Docker utilise l'image pour créer un nouvel environnement CentOS, puis exécute la commande bash shell. La version du système d'exploitation de cette image est CentOS 7.
# docker run -t -i centos:7 /bin/bash [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
Le deuxième exemple utilise l'image ubuntu. Comme aucune image spécifique n'a été spécifiée, Docker utilise la "dernière" image Ubuntu pour créer un nouvel environnement Ubuntu, puis exécute la commande shell bash. La version du système d'exploitation de cette image est Ubuntu 16.04.4. De plus, comme l'image Ubuntu n'est pas disponible localement, Docker la téléchargera d'abord à partir du référentiel, puis l'exécutera.
# docker run -t -i ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu d3938036b19c: Pull complete a9b30c108bda: Pull complete 67de21feec18: Pull complete 817da545be2b: Pull complete d967c497ce23: Pull complete Digest: sha256:9ee3b83bcaa383e5e3b657f042f4034c92cdd50c03f73166c145c9ceaea9ba7c Status: Downloaded newer image for docker.io/ubuntu:latest
root@9ee24718262c:/# cat /etc/os-release NAME="Ubuntu" VERSION="16.04.4 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.4 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
Vous pouvez utiliser la commande exit ou appuyer sur CTRL + D pour quitter un conteneur interactif.
Répertorier les conteneurs et afficher les journaux des conteneurs
Utilisez la commande docker ps pour répertorier les informations sur les conteneurs Docker. Par défaut, seuls les conteneurs en cours d'exécution sont répertoriés. Inclure le –a option avec la commande docker ps pour afficher tous les conteneurs. La sortie inclut un ID de conteneur unique et un nom de conteneur unique qui sont automatiquement générés lors de la création du conteneur. La sortie de la commande docker ps inclut également l'image qui a été utilisée pour créer le conteneur, la commande qui s'exécute dans le conteneur et les informations d'état. Les informations d'état incluent la date de création du conteneur et la durée d'exécution du conteneur.
# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ee24718262c ubuntu "/bin/bash" 3 minutes ago Exited (127) 2 seconds ago modest_turing b3e1316c4653 centos:7 "/bin/bash" 6 minutes ago Exited (0) 4 minutes ago gracious_pare 7b772ea59c92 fedora "/bin/echo Hello" 18 minutes ago Exited (0) 18 minutes ago vigilant_haibt 263e715ae13c centos "/bin/echo Hello" 19 minutes ago Exited (0) 19 minutes ago condescending_aryabhata a79ce1655f2c centos:7 "/bin/bash" 4 hours ago Created test
La commande docker logs regarde à l'intérieur du conteneur et renvoie sa sortie standard. Vous pouvez utiliser l'ID du conteneur ou le nom du conteneur comme argument de la commande.
# docker logs b3e1316c4653 [root@b3e1316c4653 /]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@b3e1316c4653 /]# exit exit
Dans l'exemple ci-dessus, la commande docker logs montre que la commande « cat /etc/redhat-release » a été exécutée dans le conteneur. Les commandes docker ps et docker logs doivent être exécutées depuis l'extérieur du conteneur, c'est-à-dire depuis une autre fenêtre de terminal.
Afficher toutes les informations d'un conteneur ou d'une image
Utilisez la commande docker inspect pour afficher toutes les informations disponibles pour un conteneur ou une image. L'exemple suivant montre certaines des informations affichées. Utilisez le –f {{.section.subsection}} possibilité d'afficher une information spécifique. L'exemple suivant affiche uniquement les paramètres réseau :
# docker inspect -f {{.NetworkSettings}} modest_turing {{ 98e04ea6d68753022ae2212b06b1514323927a1ed117448bc70ea3fa9a2f4a06 false 0 map[] /var/run/docker/netns/98e04ea6d687 [] []} { 0 0 } map[bridge:0xc4200c0300]}
L'exemple suivant affiche l'adresse IP :
# docker inspect -f {{.NetworkSettings.IPAddress}} modest_turing 172.17.0.10
L'exemple suivant affiche l'ID de processus :
# docker inspect -f {{.State.Pid}} modest_turing 7181
L'exemple suivant affiche la commande en cours d'exécution dans le conteneur :
# docker inspect -f {{.Config.Cmd}} modest_turing [/bin/bash]
Si vous voulez voir toutes les options/propriétés du conteneur, n'utilisez aucune option avec "docker inspect":
# docker inspect modest_turing [ { "Id": "9ee24718262c9f7ed3320019163a8b1b2bb1bccc83eb362a5512a74eaa4ad57f", "Created": "2018-04-21T12:22:21.983441857Z", "Path": "/bin/bash", "Args": [], "State": { ....
Ce sera une sortie assez longue montrant toutes les propriétés du conteneur.
Création d'un nouveau conteneur
La commande docker run exécute un processus dans un nouveau conteneur. Vous pouvez également utiliser la commande docker create pour créer un conteneur que vous pourrez démarrer ultérieurement. La syntaxe et les options disponibles pour docker create sont similaires à la syntaxe d'exécution de docker.
L'exemple ci-dessous crée un nouveau conteneur nommé "geeklab" à partir de l'image centos:7 et, une fois démarré, exécute la commande bash shell. Un nom de conteneur est automatiquement généré si vous omettez l'option –name.
# docker create -t -i --name geeklab centos:7 /bin/bash 667fd40faeb69113d035f08e5a910275a8463aa2a6a0796833f590e878732e17
La sortie de la commande est un ID de conteneur unique très long. Le conteneur ne démarre pas immédiatement comme indiqué par la commande docker ps, qui affiche uniquement les conteneurs en cours d'exécution par défaut :
# docker ps
Vous devez exécuter "docker ps -a" pour afficher tous les conteneurs. L'exemple dirige la sortie vers grep et recherche une partie de l'ID du conteneur :
# docker ps -a | grep 667fd 667fd40faeb6 centos:7 "/bin/bash" About a minute ago Created geeklab
Démarrer, arrêter et supprimer un conteneur
Utilisez le "démarrage du docker ” pour démarrer un conteneur existant. Utilisez le –a et –i options pour attacher le STDIN (entrée standard), STDOUT (sortie standard) et STDERR (erreur standard) du shell actuel au conteneur et également faire en sorte que tous les signaux soient transmis au conteneur.
# docker start -a -i geeklab [root@667fd40faeb6 /]#
Depuis l'intérieur d'un conteneur, utilisez la commande exit ou CTRL-d pour arrêter le conteneur. Depuis l'extérieur du conteneur, c'est-à-dire depuis une autre fenêtre de terminal, utilisez la commande docker stop pour arrêter un conteneur.
# docker stop geeklab
Utilisez le "docker rm ” pour supprimer un conteneur. Vous pouvez supprimer plusieurs conteneurs en une seule commande. Utilisez le –f option pour supprimer un conteneur en cours d'exécution.
# docker rm geeklab geeklab
Ces trois commandes docker acceptent soit l'ID du conteneur, soit le nom du conteneur comme argument.
La commande docker rm supprime un conteneur. Utilisez la commande docker rmi pour supprimer une image :
# docker rmi [IMAGE]Comment répertorier/démarrer/arrêter/supprimer les conteneurs docker
Exécuter des commandes supplémentaires dans un conteneur en cours d'exécution
Utilisez la commande docker exec pour exécuter une commande dans un conteneur en cours d'exécution. Semblable à la commande docker run, incluez les options –t et –i pour exécuter une commande interactive. Fournissez soit l'ID du conteneur, soit le nom du conteneur en tant qu'argument.
Dans l'exemple suivant, la commande docker exec démarre un nouveau shell bash interactif dans le conteneur "invité" :
# docker exec -t -i geeklab /bin/bash [root@68b5b713c37b /]#
L'exemple suivant utilise la commande docker exec pour démarrer le service sshd sur le conteneur « geeklab ». Le conteneur "geeklab" exécute CentOS 6.4. Dans cet exemple, les options -t et -i ne sont pas nécessaires.
# docker exec guest service sshd start Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ]
Le service sshd est démarré sur le conteneur et le contrôle revient au système hôte d'origine.