Utilisation des conteneurs Docker

Un conteneur Docker est un environnement logiciel léger, portable et autonome utilisé pour exécuter des applications.

Les conteneurs Docker empaquettent l'application et toutes ses dépendances, y compris les bibliothèques, les fichiers de configuration, les outils système, etc., dans un paquet standardisé, permettant à l'application de s'exécuter de manière cohérente n'importe où.

Les conteneurs sont une virtualisation au niveau du système d'exploitation. Ils n'ont pas besoin d'exécuter un système d'exploitation complet, ce qui rend le démarrage et l'exploitation plus efficaces.

La relation entre les images et les conteneurs

  • Image: Un modèle statique pour les conteneurs, contenant toutes les dépendances et les fichiers requis pour que l'application s'exécute. Les images sont immuables.
  • Conteneur: Une instance en cours d'exécution d'une image, avec son propre système de fichiers, ses processus, son réseau, etc., et elle est dynamique. Un conteneur démarre à partir d'une image et reste modifiable pendant son exécution.


Client Docker

Le client Docker est un outil en ligne de commande qui interagit avec le démon Docker.

Le client Docker est très simple ; nous pouvons directement saisir la commande docker pour voir toutes les options de commande du client Docker.

example@example:~# docker

Vous pouvez utiliser la commandedocker command --helppour mieux comprendre comment utiliser une commande Docker spécifiée.

Par exemple, si nous voulons consulterdocker statsl'utilisation détaillée des commandes :

example@example:~# docker stats --help

Voici les commandes courantes du client Docker :

CommandeFonctionnalitésExemple
docker runDémarrer un nouveau conteneur et exécuter une commandedocker run -d ubuntu
docker psLister les conteneurs en cours d'exécutiondocker ps
docker ps -aLister tous les conteneurs (y compris les conteneurs arrêtés)docker ps -a
docker buildUtiliser un Dockerfile pour construire l'image.docker build -t my-image .
docker imagesLister toutes les images stockées localementdocker images
docker pullRécupérer une image depuis un registre Dockerdocker pull ubuntu
docker pushPousser une image vers un registre Dockerdocker push my-image
docker execExécuter une commande dans un conteneur en cours d'exécutiondocker exec -it container_name bash
docker stopArrêter un ou plusieurs conteneursdocker stop container_name
docker startDémarrer les conteneurs arrêtésdocker start container_name
docker restartRedémarrer un conteneurdocker restart container_name
docker rmSupprimer un ou plusieurs conteneursdocker rm container_name
docker rmiSupprimer une ou plusieurs imagesdocker rmi my-image
docker logsAfficher les journaux du conteneurdocker logs container_name
docker inspectObtenir des informations détaillées sur un conteneur ou une imagedocker inspect container_name
docker exec -itEntrer dans le terminal interactif d'un conteneurdocker exec -it container_name /bin/bash
docker network lsLister tous les réseaux Dockerdocker network ls
docker volume lsLister tous les volumes Dockerdocker volume ls
docker-compose upDémarrer une application multi-conteneurs (à partir d'undocker-compose.ymlfichier)docker-compose up
docker-compose downArrêter et supprimer le conteneur créé pardocker-composeles conteneurs, les réseaux, etc. qui sont démarrésdocker-compose down
docker infoAfficher des informations détaillées sur le système Dockerdocker info
docker versionAfficher les informations de version pour le client et le démon Dockerdocker version
docker statsAfficher l'utilisation des ressources des conteneurs en temps réeldocker stats
docker loginSe connecter au registre Dockerdocker login
docker logoutSe déconnecter du registre Dockerdocker logout

Descriptions des options courantes :

  • -d: Exécuter le conteneur en arrière-plan, par exempledocker run -d ubuntu。
  • -it: Exécuter le conteneur dans un terminal interactif, par exempledocker exec -it container_name bash。
  • -t:Attribuer une étiquette à une image, par exempledocker build -t my-image .。

Utilisation des conteneurs

Obtenir l'image

Si nous n'avons pas l'image ubuntu localement, nous pouvons utiliser la commande docker pull pour charger l'image ubuntu :

$ docker pull ubuntu

Démarrer le conteneur

La commande suivante démarre un conteneur à l'aide de l'image ubuntu, avec le paramètre permettant d'entrer dans le conteneur en mode ligne de commande :

$ docker run -it ubuntu /bin/bash

Description du paramètre :

  • -i:Opération interactive.
  • -t: Terminal.
  • ubuntu: image ubuntu.
  • /bin/bash: La partie après le nom de l'image est la commande. Ici, nous voulons un Shell interactif, donc nous utilisons /bin/bash.

Pour quitter le terminal, tapez simplementexit:

root@ed09e4490c57:/# exit

Démarrer un conteneur arrêté

Les commandes pour afficher tous les conteneurs sont les suivantes :

$ docker ps -a

Cliquez sur l'image pour voir une version agrandie :

Utilisez docker start pour démarrer un conteneur arrêté :

$ docker start b750bbbcfd88 

Exécuter en arrière-plan

Dans la plupart des scénarios, nous voulons que le service Docker s'exécute en arrière-plan. Nous pouvons-dSpécifier le mode d'exécution du conteneur.

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

Cliquez sur l'image pour voir une version agrandie :

Remarque :ajouté-dLe paramètre n'entre pas dans le conteneur par défaut ; pour entrer dans le conteneur, vous devez utiliser la commande docker exec(Ceci sera présenté ci-dessous.)

Arrêter un conteneur

La commande pour arrêter un conteneur est la suivante :

$ docker stop <容器 ID>

Un conteneur arrêté peut être redémarré avec docker restart :

$ docker restart <容器 ID>

Entrer dans le conteneur

Lors de l'utilisation de-dLors du démarrage d'un conteneur avec le paramètre, le conteneur s'exécute en arrière-plan. Si vous devez entrer dans le conteneur à ce moment, vous pouvez utiliser la commande suivante pour entrer :

  • docker attach: Permet d'interagir avec l'entrée standard (stdin), la sortie standard (stdout) et l'erreur standard (stderr) du conteneur.

  • docker exec:Il est recommandé d'utiliser la commande docker exec, car cette commande quittera le terminal du conteneur mais n'arrêtera pas le conteneur.

Commande attach

Exemple d'utilisation de la commande docker attach :

$ docker attach 1e560fca3906 

Remarque :Si vous quittez ce conteneur, cela entraînera l'arrêt du conteneur.

commande exec

Exemple d'utilisation de la commande docker exec :

docker exec -it 243c32535da7 /bin/bash

Remarque :Si vous quittez ce conteneur, le conteneur ne s'arrêtera pas, c'est pourquoi il est recommandé que tout le monde utilisedocker exec。

Pour plus d'instructions sur les paramètres, veuillez utiliserdocker exec --helppour afficher avec la commande.

Exporter et importer des conteneurs

Exporter le conteneur

Si vous souhaitez exporter un conteneur local, vous pouvez utiliser la commandedocker export.

$ docker export 1e560fca3906 > ubuntu.tar

Exportez l'instantané du conteneur 1e560fca3906 vers un fichier local ubuntu.tar.

Cela exportera un instantané du conteneur vers un fichier local.

Importer un instantané de conteneur

Vous pouvez utiliser docker import pour importer à nouveau un fichier d'instantané de conteneur en tant qu'image. L'exemple suivant importe le fichier d'instantané ubuntu.tar dans l'image test/ubuntu:v1 :

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

De plus, vous pouvez également importer en spécifiant une URL ou un répertoire, par exemple :

$ docker import http://example.com/exampleimage.tgz example/imagerepo

Supprimer un conteneur

Pour supprimer un conteneur, utilisez la commandedocker rm:

$ docker rm -f 1e560fca3906

La commande suivante peut nettoyer tous les conteneurs à l'état terminé.

$ docker container prune

Lancer une application web

Les conteneurs que nous avons exécutés précédemment n'avaient aucun but particulier.

Ensuite, essayons d'utiliser Docker pour construire une application web.

Nous allons exécuter une application Python Flask dans un conteneur Docker pour faire tourner une application web.

example@example:~# docker pull training/webapp  # 载入镜像
example@example:~# docker run -d -P training/webapp python app.py

Description du paramètre :

  • -d:Exécutez le conteneur en arrière-plan.

  • -P:Mappez les ports réseau utilisés à l'intérieur du conteneur de manière aléatoire vers l'hôte que nous utilisons.


Affichez le conteneur de l'application web

Utilisez docker ps pour afficher les conteneurs que nous exécutons :

example@example:~#  docker ps
CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
d3d5e39ed9d3        training/webapp     "python app.py"     ...        0.0.0.0:32769->5000/tcp

Ici, nous avons des informations supplémentaires sur les ports.

PORTS
0.0.0.0:32769->5000/tcp

Docker a ouvert le port 5000 (le port Python Flask par défaut) et l'a mappé sur le port 32769 de l'hôte.

À ce stade, nous pouvons accéder à l'application WEB via un navigateur.

Nous pouvons également utiliser le paramètre -p pour définir différents ports :

example@example:~$ docker run -d -p 5000:5000 training/webapp python app.py

docker psAfficher les conteneurs en cours d'exécution

example@example:~#  docker ps
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar
d3d5e39ed9d3        training/webapp     ...        0.0.0.0:32769->5000/tcp   xenodochial_hoov

Le port interne 5000 du conteneur est mappé sur le port 5000 de notre hôte local.


Raccourci de port réseau

Avecdocker ps, la commande permet de consulter les mappages de ports du conteneur.dockerIl fournit également un autre raccourcidocker port, utilisezdocker portVous pouvez consulter le port hôte vers lequel un port spécifique d’un conteneur spécifié (par ID ou nom) est mappé.

Le conteneur d'application web que nous avons créé ci-dessus a l'IDbf08b7f2cd89nomméwizardly_chandrasekhar。

Je peux utiliserdocker port bf08b7f2cd89oudocker port wizardly_chandrasekharpour consulter l'état du mappage des ports du conteneur.

example@example:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000
example@example:~$ docker port wizardly_chandrasekhar
5000/tcp -> 0.0.0.0:5000

Consulter les journaux de l'application web

docker logs [ID ou nom] permet de consulter la sortie standard depuis l'intérieur du conteneur.

example@example:~$ docker logs -f bf08b7f2cd89
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 -
192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -

-f:Utiliserdocker logséquivaut à utilisertail -fDe même, il affiche la sortie standard depuis l'intérieur du conteneur.

D'après ce qui précède, nous pouvons voir que l'application utilise le port 5000 et peut consulter les journaux d'accès de l'application.


Consulter les processus du conteneur de l'application web

Nous pouvons également utiliser docker top pour consulter les processus en cours d'exécution à l'intérieur du conteneur

example@example:~$ docker top wizardly_chandrasekhar
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py

Inspecter l'application web

Utilisationdocker inspectPour consulter les informations sous-jacentes de Docker. Il renvoie un fichier JSON qui enregistre la configuration et les informations d'état du conteneur Docker.

example@example:~$ docker inspect wizardly_chandrasekhar
[
    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2018-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-09-17T01:41:26.494185806Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
......

Arrêter le conteneur de l'application web

example@example:~$ docker stop wizardly_chandrasekhar   
wizardly_chandrasekhar

Redémarrer le conteneur de l'application web

Pour un conteneur déjà arrêté, nous pouvons utiliser la commande docker start pour le démarrer.

example@example:~$ docker start wizardly_chandrasekhar
wizardly_chandrasekhar

docker ps -l interroge le conteneur créé la dernière fois :

#  docker ps -l 
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar

Pour les conteneurs en cours d'exécution, nous pouvons utiliserdocker restartla commande pour redémarrer.


Supprimer le conteneur de l'application web

Nous pouvons utiliser la commande docker rm pour supprimer les conteneurs inutiles.

example@example:~$ docker rm wizardly_chandrasekhar  
wizardly_chandrasekhar

Lors de la suppression d'un conteneur, le conteneur doit être à l'état arrêté, sinon l'erreur suivante sera signalée.

example@example:~$ docker rm wizardly_chandrasekhar
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
autres extensions