GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Guide du débutant sur le monde Docker

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 / Fedora
Comment 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 login
Comment 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 volumes
Comment 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.


Docker
  1. Un guide du terminal Linux pour les débutants

  2. La différence entre CMD et ENTRYPOINT dans les images Docker

  3. Un guide rapide pour utiliser Docker Compose

  4. Présentation des images Docker

  5. Guide du débutant sur SELinux

Comment mettre à jour les images Docker vers la dernière version

Docker pour Mac :le guide d'installation complet

Comment installer et utiliser Docker sur Ubuntu (dans le monde réel)

Guide complet pour supprimer les images Docker

Partage d'images Docker sur Docker Hub

Travailler avec des images Docker à partir de la ligne de commande