Découvrez l’installation de Docker et démarrez dans un seul article

Explication détaillée de Docker dans un article

Qu’est-ce que Docker ?

Docker est une plateforme de conteneurisation open source conçue pour simplifier le processus de déploiement, d'exécution et de gestion des applications. Il est basé sur la technologie de conteneurisation, qui peut regrouper les applications et leurs dépendances dans un conteneur indépendant et portable, permettant ainsi aux applications de s'exécuter de manière cohérente dans différents environnements.

Un conteneur est une unité d'exécution légère et autonome qui contient une application et tous les logiciels, bibliothèques, variables d'environnement et fichiers de configuration dont elle a besoin pour s'exécuter. En utilisant Docker, vous pouvez regrouper une application et ses dépendances dans une image de conteneur, puis déployer et exécuter cette image de conteneur dans n'importe quel environnement prenant en charge Docker sans vous soucier des différences dans l'environnement sous-jacent.

Docker fournit un ensemble d'outils de ligne de commande et d'API pour créer, gérer et exécuter des conteneurs. Il utilise des technologies de virtualisation de la couche du système d'exploitation telles que Linux Containers (LXC) ou des technologies open source plus récentes telles que le moteur de conteneur (containerd) et le runtime de conteneur (container runtime) pour obtenir une conteneurisation efficace.

Grâce à Docker, vous pouvez déployer et étendre rapidement des applications, améliorant ainsi l'efficacité du développement, de l'exploitation et de la maintenance. Il offre isolation, portabilité et réutilisabilité, ce qui rend les applications plus faciles à empaqueter, à fournir et à gérer. De plus, Docker prend également en charge la communication réseau et le montage de volumes de données entre conteneurs, ce qui facilite l'interconnexion et le partage de données entre conteneurs.

En résumé, Docker est une plate-forme de conteneurisation qui fournit des outils et des environnements qui simplifient le déploiement et la gestion des applications, permettant aux applications de s'exécuter de manière cohérente dans différents environnements .

Quels sont les scénarios d’application de Docker ?

Docker propose un large éventail de scénarios d'application. Voici quelques scénarios d'application courants :

  1. Conditionnement et livraison d'applications : Docker peut regrouper une application et toutes ses dépendances dans une image de conteneur, garantissant ainsi que l'application s'exécute de manière cohérente dans différents environnements. Cela rend le déploiement et la livraison des applications plus faciles et plus fiables.
  2. Déploiement et mise à l'échelle des applications : grâce à Docker, les applications peuvent être rapidement déployées et mises à l'échelle. En empaquetant votre application dans une image de conteneur, vous pouvez facilement déployer et exécuter votre application dans n'importe quel environnement compatible Docker. Dans le même temps, les applications peuvent être rapidement mises à l’échelle horizontalement selon les besoins pour répondre à la demande croissante.
  3. Architecture de microservices : Docker est idéal pour créer et gérer des architectures de microservices. Chaque microservice peut être regroupé dans un conteneur indépendant pour réaliser un découplage et un déploiement indépendant entre les services. En utilisant Docker, il est plus facile de gérer et de faire évoluer les microservices, ainsi que de communiquer et de collaborer entre les microservices.
  4. Intégration continue et déploiement continu (CI/CD) : Docker peut être combiné avec des processus d'intégration continue et de déploiement continu pour réaliser une construction, des tests et un déploiement automatisés. En utilisant des conteneurs Docker, vous pouvez créer un environnement de construction et de test cohérent pour garantir la cohérence de votre application à différentes étapes.
  5. Isolation et cohérence des environnements de développement : Docker aide les développeurs à créer localement des environnements de développement légers et isolés. Les développeurs peuvent utiliser des conteneurs pour configurer et gérer l'environnement d'exécution des applications sans affecter le système hôte. Cela rend l'installation et la configuration d'un environnement de développement plus simple et plus reproductible.
  6. Déploiement multiplateforme et cloud hybride : en raison de la nature multiplateforme de Docker, les images de conteneurs peuvent être déployées dans différents systèmes d'exploitation et plateformes cloud. Cela rend les applications plus flexibles pour migrer et évoluer dans différents environnements, tout en facilitant également le déploiement de cloud hybride et la gestion de plates-formes cross-cloud.

En plus des scénarios d'application ci-dessus, Docker peut également être utilisé pour la création d'environnements de test, la construction et le partage rapides d'environnements, l'isolation et la sécurité des ressources, etc. Sa flexibilité et sa portabilité rendent Docker largement utilisé dans le développement et le déploiement d'applications modernes.

Concepts de base de Docker

Avant de comprendre les concepts de base de Docker, plusieurs termes fondamentaux doivent être compris :

  1. Image : Une image Docker est un modèle en lecture seule qui contient tous les systèmes de fichiers, environnements logiciels, applications et dépendances requis pour exécuter un conteneur. Les images constituent la base de la création de conteneurs. Vous pouvez obtenir des images existantes à partir de Docker Hub ou de référentiels privés, ou créer des images personnalisées via Dockerfiles.
  2. Conteneur : un conteneur Docker est une instance exécutable d'une image et constitue un environnement d'exécution indépendant et isolé. Un conteneur contient tous les fichiers, variables d'environnement, bibliothèques et configuration requis pour exécuter une application. Vous pouvez exécuter des applications en démarrant un conteneur, et vous pouvez démarrer, arrêter, suspendre, supprimer, etc. des opérations sur le conteneur.
    1. La relation entre l'image (Image) et le conteneur (Container) est similaire aux classes et aux instances dans la programmation orientée objet . L'image est une définition statique et le conteneur est l'entité lorsque l'image est exécutée.
  3. Entrepôt (Docker Registry) : Docker Registry fournit un référentiel centralisé et accessible pour stocker et distribuer des images Docker, permettant aux utilisateurs de partager, télécharger et gérer facilement des images.
    1. Une fois l'image créée, elle peut être facilement exécutée sur l'hôte actuel. Cependant, si nous devons utiliser cette image sur d'autres serveurs, nous avons besoin d'un service centralisé pour stocker et distribuer les images. Docker Registry est un tel service.
    2. Un Docker Registry peut contenir plusieurs référentiels (Repositories) ; chaque référentiel peut contenir plusieurs balises ; chaque balise correspond à une image.
    3. Habituellement, un entrepôt contient des images de différentes versions du même logiciel, et des balises sont souvent utilisées pour correspondre à chaque version du logiciel
      . Nous pouvons spécifier quelle version de ce logiciel est l'image via le format <warehouse name> :<tag>
    4. Docker fournit officiellement un registre public appelé Docker Hub. Sur Docker Hub, les utilisateurs peuvent trouver un grand nombre d'images publiques qui peuvent être utilisées directement ou comme images de base pour créer leurs propres images.
    5. En plus de Docker Hub, les utilisateurs peuvent également créer un registre Docker privé pour stocker et gérer leurs propres images afin d'obtenir une sécurité et une contrôlabilité accrues.
  4. Dockerfile : un Dockerfile est un fichier texte qui définit comment créer une image Docker. Dockerfile contient une série d'instructions et de configurations pour guider les opérations du moteur Docker pendant le processus de construction, telles que la sélection de l'image de base, l'installation du logiciel, la copie de fichiers, la configuration des variables d'environnement, etc. Grâce à Dockerfile, le processus automatisé de création d'images peut être réalisé.
  5. Docker Compose : Docker Compose est un outil permettant de définir et d'exécuter plusieurs conteneurs Docker. Il utilise un fichier YAML pour configurer les relations et les dépendances entre plusieurs conteneurs et peut démarrer, arrêter et gérer l'ensemble de l'application conteneur avec une seule commande.

Ces concepts de base constituent le cœur de Docker. En les comprenant, vous pouvez mieux utiliser et gérer les environnements conteneurisés Docker.

Installation du menu Docker

Nous citons ici des informations externes pertinentes pour répertorier l'installation de Docker dans l'environnement CenOS7 :

  1. Tutoriel d'installation détaillé de Vmvare : https://blog.csdn.net/SoulNone/article/details/126681722
  2. Clé d'activation de la machine virtuelle Vmvare : https://www.bilibili.com/read/cv21151094
  3. Téléchargement d'images CenterOS7 : https://blog.csdn.net/a350904150/article/details/129833998
  4. Vmvare et CenterOS7:https://blog.csdn.net/StupidlyGrass/article/details/128646335
  5. Installez Docker dans l'environnement CenterOS7 : https://blog.csdn.net/Siebert_Angers/article/details/127315542

Image Docker

Docker a besoin que l'image correspondante existe localement avant d'exécuter le conteneur. Si l'image n'existe pas localement, Docker téléchargera l'image depuis l'entrepôt d'images.

Obtenir une image

La commande permettant d'obtenir l'image de l'entrepôt d'images Docker est docker pull. Son format de commande est :

$ docker pull [选项] [Docker Registry 地址[:端口号]] 仓库名[:标签]
  • Adresse de l'entrepôt d'images Docker : le format de l'adresse est généralement <nom de domaine/IP>[:numéro de port]. L'adresse par défaut est DockerHub
  • Nom de l'entrepôt : comme mentionné précédemment, le nom de l'entrepôt est ici un nom en deux parties, c'est-à-dire <nom d'utilisateur>/<nom du logiciel>. Pour DockerHub, si le nom d'utilisateur n'est pas donné, la valeur par défaut est library, qui est l'image officielle.
[root@localhost snow]# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
58690f9b18fc: Pull complete 
b51569e7c507: Pull complete 
da8ef40b9eca: Pull complete 
fb15d46c38dc: Pull complete 
Digest: sha256:1f1a2d56de1d604801a9671f301190704c25d604a416f59e03c04f5c6ffee0d6
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04
[root@localhost snow]# 

Dans l'exemple ci-dessus, l'adresse de l'entrepôt d'images Docker n'est pas indiquée, l'image sera donc obtenue à partir de Docker Hub. Le nom de l'image est ubuntu:16.04, donc l'image étiquetée 16.04 dans la bibliothèque d'images officielle/l'entrepôt Ubuntu sera obtenue.

À partir du processus de téléchargement, vous pouvez voir le concept de stockage hiérarchisé que nous avons mentionné précédemment. L'image est composée de plusieurs couches de stockage. Le téléchargement se fait également couche par couche, pas un seul fichier.

courir

Une fois que nous avons l'image, nous pouvons démarrer et exécuter un conteneur basé sur cette image. En prenant l'ubuntu:16.04 ci-dessus comme exemple, si nous prévoyons de démarrer bash à l'intérieur et d'effectuer des opérations interactives :

root@localhost snow]# docker run -it --rm ubuntu:16.04 bash
root@3f44186a6166:/# ls -la
total 4
drwxr-xr-x.   1 root root    6 May 27 18:29 .
drwxr-xr-x.   1 root root    6 May 27 18:29 ..
-rwxr-xr-x.   1 root root    0 May 27 18:29 .dockerenv
drwxr-xr-x.   2 root root 4096 Aug  4  2021 bin
drwxr-xr-x.   2 root root    6 Apr 12  2016 boot

docker run est la commande pour exécuter le conteneur. Le format détaillé de la commande sera expliqué dans la section conteneur.

Liste des images

Pour lister les images téléchargées, utilisez la commande docker image ls :

root@3f44186a6166:/# exit
exit
[root@localhost snow]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    9c7a54a9a43c   3 weeks ago     13.3kB
ubuntu        16.04     b6f507652425   21 months ago   135MB

Supprimer l'image locale

Si vous souhaitez supprimer l'image locale, vous pouvez utiliser la commande docker image rm, dont le format est :

$ docker image rm [选项] <镜像1> [<镜像2> ...]

Parmi eux, <image> peut être un identifiant court d'image, un identifiant long d'image, un nom d'image ou un résumé d'image.

L'ID court répertorié par docker image ls par défaut est généralement constitué des 3 premiers caractères ou plus, à condition qu'ils soient suffisants pour le distinguer des autres images.

[root@localhost snow]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
redis         latest    0ec8ab59a35f   4 days ago      117MB
hello-world   latest    9c7a54a9a43c   3 weeks ago     13.3kB
ubuntu        16.04     b6f507652425   21 months ago   135MB
[root@localhost snow]# docker image rm 0ec
Untagged: redis:latest
Untagged: redis@sha256:f9724694a0b97288d2255ff2b69642dfba7f34c8e41aaf0a59d33d10d8a42687
Deleted: sha256:0ec8ab59a35faa3aaee416630128e11949d44ac82d15d43053f8af5d61182a5d
Deleted: sha256:f89720eafb298773509177d4b8b76a32adda4da1015ca28f52daa03fc6090499
Deleted: sha256:c3b5385e13627e14d553f09a098275d1f1ada0b6228cc30c92e095d669df799c
Deleted: sha256:b830b2806be6a052c6d857f927f72ef18a2539e69fdb6d51cf95d76d7e06c8f1
Deleted: sha256:8de1c0863fac10debb4e19de0cc27639ae97c1111eca0920649b21d97bc8dded
Deleted: sha256:80940c1d5550f3f56f5ab008aa79e899e4d3c9b6b41b9f76077f31dcfb2c482c
Deleted: sha256:8cbe4b54fa88d8fc0198ea0cc3a5432aea41573e6a0ee26eca8c79f9fbfa40e3
[root@localhost snow]# 

Si vous observez les informations de sortie des commandes ci-dessus, vous remarquerez que le comportement de suppression est divisé en deux catégories, l'une est Non balisé et l'autre est Supprimé. Comme nous l'avons introduit précédemment, l'identifiant unique d'une image est son identifiant et son résumé, et une image peut avoir plusieurs balises.

Lorsque vous utilisez la commande ci-dessus pour supprimer une image, vous demandez en fait de supprimer l'image d'une certaine balise. La première chose que nous devons faire est donc d'annuler toutes les balises d'image qui répondent à nos exigences. Ce sont les informations non balisées que nous voyons. Lorsque toutes les balises de l'image sont annulées, l'image risque de perdre le sens de son existence, donc le comportement Supprimé sera déclenché.

commit Comprendre la composition de l'image

Remarque : en plus de l'apprentissage, la commande docker commit a également des applications spéciales, telles que la sauvegarde de la scène après avoir été envahie. Cependant, n'utilisez pas docker commit pour personnaliser l'image. La personnalisation de l'image doit être effectuée à l'aide d'un Dockerfile . Si vous souhaitez personnaliser l'image, veuillez consulter la section suivante

Prenons maintenant l'exemple de la personnalisation d'un serveur Web pour expliquer comment l'image est construite :

[root@localhost snow]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f03b40093957: Pull complete 
eed12bbd6494: Pull complete 
fa7eb8c8eee8: Pull complete 
7ff3b2b12318: Pull complete 
0f67c7de5f2c: Pull complete 
831f51541d38: Pull complete 
Digest: sha256:af296b188c7b7df99ba960ca614439c99cb7cf252ed7bbc23e90cfda59092305
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost snow]# docker run --name web1.0 -d -p 80:80 nginx
054d1cdcf5cf2de43116697f2a96e0c50a5138cd753580f55f1966364df155f1
[root@localhost snow]# 

Cette commande démarrera un conteneur avec l'image nginx, nommé web1.0, et mappera le port 80, afin que nous puissions utiliser le navigateur pour accéder au serveur nginx ;

Si vous exécutez Docker sous Linux, vous pouvez accéder directement : http://localhost ; si vous utilisez Docker installé sur une machine virtuelle ou un serveur cloud, vous devez remplacer localhost par l'adresse de la machine virtuelle ou l'adresse réelle du serveur cloud.

[Échec du transfert de l'image du lien externe. Le site source peut avoir un mécanisme anti-sangsue. Il est recommandé de sauvegarder l'image et de la télécharger directement (img-Licj8a72-1686898089872) (C:\Users\lixuewen\AppData\Roaming\Typora\ typora-user-images\ image-20230527191015639.png)]

Supposons que nous n'aimons pas cette page d'accueil et que nous souhaitions la remplacer par un autre texte. Nous pouvons utiliser la commande docker exec pour entrer dans le conteneur et modifier son contenu.

[root@localhost snow]# docker exec -it web1.0 bash
root@054d1cdcf5cf:/# echo '<h1>Hello,World!</h1>' > /usr/share/nginx/html/index.html
root@054d1cdcf5cf:/# exit
exit
[root@localhost snow]# 

Nous sommes entrés dans le conteneur du serveur Web en mode terminal interactif et avons exécuté la commande bash, c'est-à-dire que nous avons obtenu un Shell exploitable ; puis nous avons utilisé

Bonjour le monde!

Couvre le contenu de /usr/share/nginx/html/index.html ;

Actualisez le navigateur et la page apparaîtra comme suit :

[Échec du transfert d'image par lien externe. Le site source peut avoir un mécanisme anti-sangsue. Il est recommandé de sauvegarder l'image et de la télécharger directement (img-N2yya1zd-1686898089873) (C:\Users\lixuewen\AppData\Roaming\Typora\ typora-user-images\ image-20230527193042587.png)]

Nous avons modifié les fichiers du conteneur, ce qui signifie que nous avons changé la couche de stockage du conteneur. Nous pouvons voir les changements spécifiques grâce à la commande docker diff

[root@localhost snow]# docker diff web1.0
C /run
A /run/nginx.pid
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /root
A /root/.bash_history
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /var
C /var/cache

Docker fournit une commande docker commit qui peut enregistrer la couche de stockage du conteneur dans une image. Autrement dit, sur la base de l'image originale, la couche de stockage du conteneur se superpose pour former une nouvelle image . Lorsque nous exécuterons cette nouvelle image à l'avenir, nous aurons les dernières modifications de fichier du conteneur d'origine :

Le format de syntaxe du commit docker est :

$ docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
[root@localhost snow]# docker commit --author "snow" --message "edit index.html" web1.0 nginx:2.0
sha256:c06e3839c9eb09fee7e4409290e2d51ddeb214fe87a73d9806cd9479ddf2c9ca
[root@localhost snow]# docker image ls nginx
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        2.0       c06e3839c9eb   28 seconds ago   143MB
nginx        latest    f9c14fe76d50   2 days ago       143MB
[root@localhost snow]# 

–author spécifie l'auteur de la modification, tandis que --message enregistre le contenu de cette modification. Ceci est similaire au contrôle de version git ; nous pouvons voir cette nouvelle image personnalisée dans l'image docker ls.

Une fois la nouvelle image personnalisée, nous pouvons exécuter l'image :

Ici, nous nommons le nouveau service web2.0 et le mappons au port 81. Nous accédons à nouveau directement à http://ip:81 et voyons le résultat : son contenu doit être le même que celui du web1.0 précédemment modifié.

[Échec du transfert de l'image du lien externe. Le site source peut avoir un mécanisme anti-sangsue. Il est recommandé de sauvegarder l'image et de la télécharger directement (img-UdbJXDID-1686898089874) (C:\Users\lixuewen\AppData\Roaming\Typora\ typora-user-images\ image-20230527194357988.png)]

Jusqu'à présent, nous avons terminé l'image personnalisée pour la première fois.Nous avons utilisé la commande docker commit pour ajouter manuellement un nouveau calque à l'ancienne image afin de former une nouvelle image.

Utilisez Docker Commit avec prudence

Bien que l'utilisation de la commande docker commit puisse aider à comprendre intuitivement le concept de stockage hiérarchisé d'images, elle n'est pas utilisée de cette façon dans l'environnement réel.

L'utilisation de docker commit signifie que toutes les opérations sur l'image sont des opérations de boîte noire. L'image générée est également appelée image de boîte noire. En d'autres termes, sauf pour la personne qui a créé l'image qui sait quelles commandes ont été exécutées et comment générer l'image , d'autres n'ont aucun moyen de le savoir.

Image personnalisée Dockerfile

De l'étude de docker commit, j'ai appris que la personnalisation de l'image est en fait la personnalisation de la configuration et des fichiers ajoutés à chaque couche. Si nous pouvons écrire les commandes pour modifier, installer, construire et exploiter chaque couche dans un script, et utiliser ce script pour créer et personnaliser l'image, alors les problèmes mentionnés précédemment ne peuvent pas être répétés, la transparence de la construction de l'image et le volume de Les problèmes seront tous résolus. Ce script est le Dockerfile.

En prenant comme exemple la personnalisation précédente de l'image nginx, cette fois nous utilisons Dockerfile pour la personnaliser.

Dans un répertoire vide, créez un fichier texte et nommez-le Dockerfile :

[root@localhost snow]# mkdir nginxtest
[root@localhost snow]# cd nginxtest
[root@localhost nginxtest]# touch Dockerfile

Ajoutez son contenu via la commande Vim :

FROM nginx
RUN echo '<h1>Hello, EveryDay!</h1>' > /usr/share/nginx/html/index.html
  • FROM spécifie l'image de base

    L'image dite personnalisée doit être basée sur une image et personnalisée par-dessus celle-ci. Tout comme nous avons précédemment exécuté un
    conteneur avec une image nginx puis l'avons modifié, l'image de base doit être spécifiée. FROM spécifie l'image de base
    , donc FROM est une instruction nécessaire dans un Dockerfile et doit être la première instruction .

  • Commande d'exécution RUN

    L'instruction RUN est utilisée pour exécuter des commandes de ligne de commande.
    En raison des puissantes capacités de la ligne de commande, la commande RUN est l'une des commandes les plus couramment utilisées lors de la personnalisation des images . Il existe deux formats :

    • format shell : RUN <command>, tout comme une commande saisie directement sur la ligne de commande
    RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
    
    • format exec : RUN ["fichier exécutable", "paramètre 1", "paramètre 2"], cela ressemble plus au format des appels de fonction

Puisque RUN peut exécuter des commandes comme un script Shell, pouvons-nous mapper chaque
commande à un RUN comme un script Shell ? Par exemple:

FROM debian:jessie
RUN apt-get update
RUN apt-get install -y gcc libc6-dev make
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"
RUN mkdir -p /usr/src/redis
RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
RUN make -C /usr/src/redis
RUN make -C /usr/src/redis install

La méthode d'écriture ci-dessus crée une image à 7 couches. Cela n’a absolument aucun sens ; une meilleure façon de l’écrire serait la suivante :

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

Au lieu d'utiliser plusieurs paires RUN pour correspondre à différentes commandes une par une, une seule instruction RUN est utilisée et && est utilisé pour concaténer les commandes requises. Simplification des 7 couches précédentes en 1 couche. Lorsque vous écrivez un Dockerfile, rappelez-vous toujours que vous n'écrivez pas un script shell, mais que vous définissez comment chaque
couche doit être construite.

Construire une image

Maintenant que nous comprenons le contenu de ce Dockerfile, construisons l'image. Exécuter dans le répertoire où se trouve le fichier Dockerfile :

[root@localhost nginxtest]# docker build -t nginx:3.0 .
[+] Building 0.9s (6/6) FINISHED                                                             
 => [internal] load build definition from Dockerfile                                         
 => => transferring dockerfile: 179B                                                         
 => [internal] load .dockerignore                                                           
 => => transferring context: 2B                                                             
 => [internal] load metadata for docker.io/library/nginx:latest                             
 => [1/2] FROM docker.io/library/nginx                                                       
 => [2/2] RUN echo '<h1>Hello, EveryDay!</h1>' > /usr/share/nginx/html/index.html           
 => exporting to image                                                                       
 => => exporting layers                                                                     
 => => writing image sha256:e899e0dd12df606efc99e3bb62b57d99935db376c9b1760b05ed7352a004c37a 
 => => naming to docker.io/library/nginx:3.0                                                            

(Remarque : assurez-vous d'ajouter un espace et un point à la fin de la commande de construction ci-dessus , sinon une erreur sera signalée)

Contexte de création d'image (Contexte)

Si vous faites attention, vous verrez qu'il y a un .à la fin de la commande docker build. . représente le répertoire courant et le Dockerfile se trouve dans le répertoire courant ; le format de commande ci-dessus spécifie en fait le chemin du contexte. Alors, qu’est-ce que le contexte ?

Tout d’abord, vous devez comprendre comment fonctionne la construction de Docker. Docker est divisé en moteur Docker (c'est-à-dire démon côté serveur) et outils côté client au moment de l'exécution . Le moteur Docker fournit un ensemble d'API REST, appelé API DockerRemote, et des outils clients tels que les commandes Docker interagissent avec le moteur Docker via cet ensemble d'API pour remplir diverses fonctions. Par conséquent, bien qu'en apparence, il semble que nous exécutons diverses fonctions de Docker localement, en fait, tout est fait côté serveur (moteur Docker) en utilisant l'appel à distance.

Lorsque vous utilisez la commande docker build pour créer une image, vous devez souvent copier certains fichiers locaux dans l'image. Cependant, celle-ci n'est pas construite localement, mais côté serveur, c'est-à-dire dans le moteur Docker. Alors dans cette architecture client/serveur, comment le serveur peut-il obtenir des fichiers locaux ?

Cela introduit la notion de contexte. Lors de la construction, l'utilisateur spécifiera le chemin pour créer le contexte de l'image. Une fois que la commande dockerbuild aura appris ce chemin, elle regroupera tout le contenu sous le chemin, puis le téléchargera sur le moteur Docker. De cette façon, une fois que le moteur Docker aura reçu le package de contexte, il se développera et obtiendra tous les fichiers nécessaires à la création de l'image.

Comprendre le contexte de construction est très important pour la création d'images afin d'éviter de commettre des erreurs inutiles. Par exemple, certains débutants ont constaté que COPY /opt/xxxx /app ne fonctionnait pas, ils ont donc simplement placé le Dockerfile dans le répertoire racine du disque dur à construire. Ils ont constaté qu'après l'exécution de Docker build, l'envoi de dizaines de Go de les choses étaient extrêmement lentes et faciles. La construction a échoué. En effet, cette approche demande à Docker build de regrouper l'intégralité du disque dur, ce qui est évidemment une erreur d'utilisation.

De manière générale, le Dockerfile doit être placé dans un répertoire vide ou dans le répertoire racine du projet. Si les fichiers requis ne sont pas trouvés dans ce répertoire, vous devez copier les fichiers requis. S'il y a des éléments dans le répertoire que vous ne souhaitez vraiment pas transmettre au moteur Docker lors de la construction, vous pouvez écrire un .dockerignore avec la même syntaxe que .gitignore . Ce fichier est utilisé pour éliminer les éléments qui n'ont pas besoin d'être transmis au moteur Docker comme contexte.

Explication détaillée des instructions Dockerfile

  1. COPIER Copier les fichiers : COPIER <chemin source>… <chemin de destination>


    1. L'instruction COPY copiera les fichiers/répertoires à <chemin source> dans le répertoire de contexte de construction vers l' emplacement <chemin cible> dans l'image de la nouvelle couche . Par exemple:

      COPY package.json /usr/src/app/
      
    2. <chemin source> peut être multiple, voire un caractère générique

    3. <Chemin cible> peut être un chemin absolu dans le conteneur ou un chemin relatif par rapport au répertoire de travail (le répertoire de travail peut être
      spécifié à l'aide de la directive WORKDIR)

    4. À l'aide de l'instruction COPY, diverses métadonnées du fichier source seront conservées. Tels que la lecture, l'écriture, les autorisations d'exécution, l'heure de changement de fichier, etc. Cette fonctionnalité est utile pour la personnalisation des images. Surtout lorsque les fichiers liés à la construction sont gérés à l'aide de Git.

  2. ADD est un fichier de copie plus avancé : le format et les propriétés de la commande et de COPY sont fondamentalement les mêmes. Mais certaines fonctions sont ajoutées en fonction de COPY

    1. Par exemple, <chemin source> peut être une URL. Dans ce cas, le moteur Docker tentera de télécharger le fichier lié et de le placer dans le <chemin cible>.

    2. Si <chemin source> est un fichier compressé tar et que le format de compression est gzip, bzip2 et xz, la commande ADD décompressera automatiquement le fichier compressé en <chemin de destination> .

    3. Par conséquent, lorsque vous choisissez entre les instructions COPY et ADD, vous pouvez suivre ce principe : utilisez l'instruction COPY pour toutes les copies de fichiers et utilisez ADD uniquement lorsqu'une décompression automatique est requise.

  3. Commande de démarrage du conteneur CMD :

    format du shell : CMD <commande> ;

    format d'exécution : CMD ["fichier exécutable", "paramètre 1", "paramètre 2"...]

    Lorsque j'ai présenté les conteneurs, j'ai dit un jour que Docker n'était pas une machine virtuelle, mais que les conteneurs étaient des processus. Puisqu'il s'agit d'un processus, lors du démarrage du conteneur, vous devez spécifier le programme et les paramètres à exécuter. L'instruction CMD est utilisée pour spécifier la commande de démarrage par défaut du processus principal du conteneur.

    Lors de l'exécution, vous pouvez spécifier une nouvelle commande pour remplacer la commande par défaut dans les paramètres de l'image . Par exemple, le CMD par défaut de l'image Ubuntu est /bin/bash. Si nous exécutons directement -it ubuntu par docker, nous entrerons directement bash. Nous pouvons également spécifier d'autres commandes à exécuter au moment de l'exécution, telles que docker run -it ubuntu cat /etc/os-release. Cela signifie remplacer la commande par défaut /bin/bash par la commande cat /etc/os-release et afficher les informations de version du système.

  4. POINT D'ENTRÉEPoint d'entrée

    L'objectif d'ENTRYPOINT est le même que celui de CMD, qui consiste à spécifier le programme et les paramètres de démarrage du conteneur. ENTRYPOINT peut également être remplacé au moment de l'exécution, mais il est légèrement plus lourd que CMD et doit être spécifié via le paramètre --entrypoint de docker run.

    Lorsque ENTRYPOINT est spécifié, la signification de CMD change. Au lieu d'exécuter sa commande directement, le contenu de CMD est passé à l'instruction ENTRYPOINT en tant que paramètre. En d'autres termes, une fois réellement exécuté, il deviendra : ""

    Après avoir eu CMD, pourquoi avons-nous besoin d’ENTRYPOINT ?

    1. Laissez l'image être utilisée comme une commande

    2. Préparatifs avant d'exécuter l'application

  5. ENV définit les variables d'environnement : les deux formats sont les suivants :

    ENV
    ENV = =…

    Cette commande sert uniquement à définir les variables d'environnement. Qu'il s'agisse d'autres instructions ultérieures, telles que RUN, ou d'applications d'exécution, vous pouvez directement utiliser les variables d'environnement définies ici.

    Une fois la variable d'environnement définie, cette variable d'environnement peut être utilisée dans les instructions suivantes.

  6. Paramètres de construction ARG : Format : ARG <nom du paramètre>[=<valeur par défaut>]

    Les paramètres de construction ont le même effet que ENV, définissant les variables d'environnement. La différence est que les variables d'environnement de l'environnement de construction définies par ARG n'existeront pas lors de l'exécution future du conteneur.

    La directive ARG du Dockerfile définit les noms des paramètres et définit leurs valeurs par défaut. Cette valeur par défaut peut être remplacée par --build-arg <argument name>=<value> dans la commande build docker build.

  7. VOLUME définit un volume anonyme

    Le format est :
    VOLUME ["<chemin1>", "<chemin2>"…]
    VOLUME <chemin>

    Nous avons déjà dit que lorsque le conteneur est en cours d'exécution, nous devrions essayer d'empêcher la couche de stockage du conteneur d'écrire des opérations.Pour les applications de base de données qui ont besoin de sauvegarder des données dynamiques, leurs fichiers de base de données doivent être stockés dans des volumes.Nous présenterons plus en détail les volumes Docker dans les chapitres suivants.le concept de.

    Afin d'éviter que l'utilisateur n'oublie de monter le répertoire dans lequel les fichiers dynamiques sont enregistrés en tant que volume pendant l'exécution, dans le Dockerfile, nous pouvons spécifier à l'avance certains répertoires à monter en tant que volumes anonymes, de sorte que si l'utilisateur ne spécifie pas le montage au moment de l'exécution, l'application peut fonctionner normalement et s'exécuter sans écrire de grandes quantités de données sur la couche de stockage du conteneur.

    VOLUME /data
    

    Le répertoire /data ici sera automatiquement monté en tant que volume anonyme au moment de l'exécution, et toute information écrite dans /data ne sera pas enregistrée dans la couche de stockage du conteneur, garantissant ainsi l'apatridie de la couche de stockage du conteneur.

  8. EXPOSE déclarer le port

    Le format est : EXPOSE <port1> [<port2>…]

    La directive EXPOSE déclare que le conteneur d'exécution fournit un port de service. Il s'agit simplement d'une instruction. L'application n'ouvrira pas le service de ce port au moment de l'exécution à cause de cette instruction.

    Écrire une telle déclaration dans le Dockerfile présente deux avantages :

    1. La première consiste à aider les utilisateurs d'images à comprendre le port de garde de ce service d'imagerie afin de faciliter le mappage de configuration ;

    2. Une autre utilisation consiste à utiliser le mappage de port aléatoire au moment de l'exécution, c'est-à-dire que lorsque Docker exécute -P, le port EXPOSE sera automatiquement et aléatoirement mappé.

  9. WORKDIR spécifie le répertoire de travail

    Le format est : WORKDIR <chemin du répertoire de travail>

    Vous pouvez utiliser la commande WORKDIR pour spécifier le répertoire de travail (ou répertoire actuel). À l'avenir, le répertoire actuel de chaque couche sera remplacé par le répertoire spécifié. Si le répertoire n'existe pas, WORKDIR vous aidera à créer le répertoire.

    Comme mentionné précédemment, une erreur courante commise par certains débutants est d'écrire Dockerfile en tant que script Shell. Cette mauvaise compréhension
    peut également conduire aux erreurs suivantes :

    RUN cd /app
    RUN echo "hello" > world.txt
    

    Si vous exécutez ce Dockerfile pour créer l'image, vous constaterez que le fichier /app/world.txt est introuvable ou que son contenu n'est pas bonjour. La raison est en réalité très simple : dans le Shell, deux lignes consécutives représentent le même environnement d'exécution du processus, donc l'état mémoire modifié par la commande précédente affectera directement la commande suivante ; dans le Dockerfile, les environnements d'exécution des deux lignes de RUN les commandes sont fondamentalement différentes. , sont deux conteneurs complètement différents . Il s'agit d'une erreur causée par une non-compréhension du concept de création de stockage hiérarchique à l'aide de Dockerfile.

    Comme mentionné précédemment, chaque RUN démarre un conteneur, exécute la commande, puis valide les modifications du fichier de couche de stockage.

Exploitation des conteneurs Docker

En termes simples, un conteneur est une application ou un groupe d'applications qui s'exécutent indépendamment, ainsi que leur environnement d'exécution. En conséquence, une machine virtuelle peut être comprise comme un ensemble complet de systèmes d'exploitation qui simulent l'exécution (en fournissant un environnement d'exécution et d'autres environnements système) et des applications qui s'y exécutent.

Démarrer le conteneur

Il existe deux manières de démarrer un conteneur. L'une consiste à créer un nouveau conteneur basé sur l'image et à le démarrer. L'autre consiste à redémarrer le conteneur à l'état terminé (arrêté).

Créer nouveau et commencer

La commande requise est principalement docker run .

Par exemple, la commande suivante génère un « Hello Docker », puis termine le conteneur :

[root@localhost snow]# docker run ubuntu:16.04 /bin/echo 'Hello Docker'
Hello Docker

La commande suivante démarre un terminal bash, permettant l'interaction de l'utilisateur :

[root@localhost snow]# docker run -t -i ubuntu:16.04 /bin/bash
root@d80afe7ea29f:/# ps
   PID TTY          TIME CMD
     1 pts/0    00:00:00 bash
    10 pts/0    00:00:00 ps
root@d80afe7ea29f:/# exit
exit

Parmi eux, l'option -t permet à Docker d'attribuer un pseudo-tty (pseudo-tty) et de le lier à l'entrée standard du conteneur, et -i maintient l'entrée standard du conteneur ouverte.

Lorsque vous utilisez Docker Run pour créer un conteneur, les opérations standard exécutées par Docker en arrière-plan incluent :

  1. Vérifiez si l'image spécifiée existe localement. Si elle n'existe pas, téléchargez-la depuis l'entrepôt public.
  2. Créer et démarrer un conteneur à l'aide d'une image
  3. Allouer un système de fichiers et monter une couche en lecture-écriture en dehors de la couche d'image en lecture seule
  4. Ponter une interface virtuelle de l'interface de pont configurée sur l'hôte hôte vers le conteneur
  5. Configurer une adresse IP du pool d'adresses vers le conteneur
  6. Exécuter l'application spécifiée par l'utilisateur
  7. Après exécution, le conteneur est terminé
Démarrer un conteneur terminé

Vous pouvez utiliser la commande docker containers start pour démarrer directement un conteneur terminé.

Le cœur du conteneur est l'application en cours d'exécution, et les ressources requises sont toutes nécessaires à l'exécution de l'application. En dehors de cela, il n’y a pas d’autres ressources. Vous pouvez utiliser ps ou top dans un pseudo-terminal pour afficher les informations sur le processus.

Processus en arrière-plan

Le plus souvent, il est nécessaire de laisser Docker s'exécuter en arrière-plan au lieu de transmettre directement les résultats de l'exécution de la commande à l'hôte actuel.
À ce stade, cela peut être réalisé en ajoutant le paramètre -d.

Après avoir commencé avec le paramètre -d,un ID unique sera renvoyé. Vous pouvez également afficher les informations sur le conteneur via la commande docker containers ls.

[root@localhost snow]# docker container ls
CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS      PORTS                               NAMES
e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0

Pour obtenir les informations de sortie du conteneur, vous pouvez utiliser la commande docker conteneur logs .

Terminer le conteneur

Vous pouvez utiliser Docker Container Stop pour mettre fin à un conteneur en cours d'exécution.

De plus, lorsque l'application spécifiée dans le conteneur Docker est terminée, le conteneur est automatiquement terminé . Par exemple, pour le conteneur qui n'a démarré qu'un seul terminal dans le chapitre précédent, lorsque l'utilisateur quitte le terminal via la commande exit ou Ctrl+d, le conteneur créé sera immédiatement terminé.

Le conteneur terminé peut être vu à l'aide de la commande docker containers ls -a. Par exemple

[root@localhost snow]# docker container ls -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS                               NAMES
d80afe7ea29f   ubuntu:16.04   "/bin/bash"              9 minutes ago    Exited (0) 9 minutes ago                                          bold_saha
626c2066188c   ubuntu:16.04   "/bin/bash"              10 minutes ago   Exited (127) 10 minutes ago                                       jolly_shockley
791d1f4d5eca   ubuntu:16.04   "/bin/bash"              10 minutes ago   Exited (127) 10 minutes ago                                       boring_margulis
1280e87e1cae   ubuntu:16.04   "/bin/echo 'Hello Do…"   11 minutes ago   Exited (0) 11 minutes ago                                         wonderful_saha

Un conteneur dans un état terminé peut être redémarré via la commande docker containers start.
De plus, la commande docker containers restart mettra fin à un conteneur en cours d'exécution, puis le redémarrera.

Entrez dans le conteneur

Lors de l'utilisation du paramètre -d, le conteneur entrera en arrière-plan après le démarrage.

Parfois, vous devez entrer dans le conteneur pour des opérations, notamment à l'aide de la commande docker attach ou de la commande docker exec. Il est recommandé d'utiliser la commande docker exec pour les raisons expliquées ci-dessous.

  1. joindre la commande

    docker attach est une commande fournie avec Docker. Voici un exemple d'utilisation de cette commande :

    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                               NAMES
    5f6884f826e4   ubuntu      "/bin/bash"              23 seconds ago   Up 22 seconds                                       practical_payne
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago       Up 6 days       0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago       Up 6 days       0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    [root@localhost snow]# docker attach 5f6
    root@5f6884f826e4:/# exit
    exit
    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED      STATUS      PORTS                               NAMES
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago   Up 6 days   0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    

    Remarque : Quitter ce stdin entraînera l'arrêt du conteneur.

  2. commande d'exécution

    Docker exec peut être suivi de plusieurs paramètres. Ici, nous expliquons principalement les paramètres -i -t.

    Lorsque seul le paramètre -i est utilisé, puisqu'aucun pseudo-terminal n'est alloué, l'interface n'a pas l'invite de commande Linux familière, mais les
    résultats de l'exécution de la commande peuvent toujours être renvoyés.

    Lorsque les paramètres -i -t sont utilisés ensemble, vous pouvez voir l'invite de commande Linux familière.

    [root@localhost snow]# docker run -dit ubuntu
    3a7731e1a8a290b59263e9c73695f0a52e57e009505b4652be57c3fbe88a147e
    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                               NAMES
    3a7731e1a8a2   ubuntu      "/bin/bash"              3 seconds ago   Up 2 seconds                                       hardcore_ptolemy
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago      Up 6 days      0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago      Up 6 days      0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    [root@localhost snow]# docker exec -it 3a77 bash
    root@3a7731e1a8a2:/# exit
    exit
    [root@localhost snow]# docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED              STATUS              PORTS                               NAMES
    3a7731e1a8a2   ubuntu      "/bin/bash"              About a minute ago   Up About a minute                                       hardcore_ptolemy
    e015f7987776   nginx:2.0   "/docker-entrypoint.…"   6 days ago           Up 6 days           0.0.0.0:81->80/tcp, :::81->80/tcp   web2.0
    054d1cdcf5cf   nginx       "/docker-entrypoint.…"   6 days ago           Up 6 days           0.0.0.0:80->80/tcp, :::80->80/tcp   web1.0
    

    Quitter ce stdin n’entraînera pas l’arrêt du conteneur. C'est pourquoi il est recommandé à tout le monde d'utiliser docker exec.

    Pour plus de descriptions de paramètres, veuillez utiliser docker exec --help pour afficher

Conteneurs d'exportation et d'importation

Conteneur d'exportation :

Si vous souhaitez exporter un conteneur local, vous pouvez utiliser la commande docker export. (Cela exportera l'instantané du conteneur vers un fichier local)

[root@localhost snow]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                        PORTS                               NAMES
3a7731e1a8a2   ubuntu         "/bin/bash"              4 minutes ago    Up 4 minutes                                                      hardcore_ptolemy
[root@localhost snow]# docker export 3a77 > ubuntuBash.tar

Conteneur d'importation :

Vous pouvez utiliser Docker Import pour importer depuis le fichier d'instantané du conteneur vers une image :

[root@localhost snow]# cat ubuntuBash.tar | docker import - test/ubuntu:test2.0
sha256:1f2b949f67cade289f240a22612630363380d95b43d63bc60e032bbff69bc373
[root@localhost snow]# docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
test/ubuntu   test2.0   1f2b949f67ca   12 seconds ago   77.8MB
nginx         3.0       e899e0dd12df   3 hours ago      143MB

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

Remarque : Les utilisateurs peuvent soit utiliser Docker Load pour importer des fichiers de stockage d'images dans la bibliothèque d'images locale, soit utiliser dockerimport pour importer un instantané de conteneur dans la bibliothèque d'images locale. La différence entre les deux est que le fichier d'instantané du conteneur supprime tous les enregistrements historiques et les informations de métadonnées (c'est-à-dire qu'il enregistre uniquement l'état de l'instantané du conteneur à ce moment-là), tandis que le fichier de stockage d'images enregistre les enregistrements complets et est plus grand.

De plus, les informations de métadonnées telles que les balises peuvent être respécifiées lors de l'importation à partir d'un fichier instantané de conteneur.

Supprimer le conteneur

Vous pouvez utiliser Docker Container rm pour supprimer un conteneur qui est dans un état terminé. Par exemple

[root@localhost snow]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS                           PORTS                               NAMES
3a7731e1a8a2   ubuntu         "/bin/bash"              15 minutes ago      Up 15 minutes                                                        hardcore_ptolemy
5f6884f826e4   ubuntu         "/bin/bash"              19 minutes ago      Exited (0) 18 minutes ago                                            practical_payne
d80afe7ea29f   ubuntu:16.04   "/bin/bash"              About an hour ago   Exited (0) About an hour ago                                         bold_saha
[root@localhost snow]# docker container rm 5f68
5f68

Si vous souhaitez supprimer un conteneur en cours d'exécution, vous pouvez ajouter le paramètre -f. Docker enverra le signal SIGKILL au conteneur.

Nettoyer tous les conteneurs terminés

Utilisez la commande docker containers ls -a pour afficher tous les conteneurs créés, y compris l'état terminé. S'il y en a trop, il peut être difficile de les supprimer un par un. Utilisez la commande suivante pour nettoyer tous les conteneurs à l'état terminé.

$ docker container prune

Visitez l'entrepôt

Le référentiel est un endroit où les images sont stockées de manière centralisée.

Un concept facile à confondre est celui du serveur d'enregistrement (Registry). En fait, le serveur d'enregistrement est un serveur spécifique qui gère l'entrepôt. Chaque serveur peut avoir plusieurs entrepôts, et chaque entrepôt a plusieurs miroirs. À cet égard, un référentiel peut être considéré comme un projet ou un répertoire spécifique. Par exemple, pour l'adresse de l'entrepôt dl.dockerpool.com/ubuntu, dl.dockerpool.com est l'adresse du serveur d'enregistrement et ubuntu est le nom de l'entrepôt.

Centre Docker

Docker gère officiellement un référentiel public, Docker Hub, qui contient déjà plus de 15 000 images. La plupart des exigences peuvent être satisfaites en téléchargeant l'image directement depuis Docker Hub.

  1. Inscription : enregistrez un compte Docker gratuit sur https://cloud.docker.com

  2. Connexion : exécutez la connexion Docker pour vous connecter, exécutez la déconnexion Docker pour vous déconnecter.

  3. Extrayez l'image : utilisez la commande docker search pour trouver l'image dans l'entrepôt officiel et utilisez la commande docker pull pour
    la télécharger localement ;

    Les ressources miroirs peuvent être divisées en deux catégories selon qu’elles sont officiellement fournies ou non.

    1. L'une est une image comme centos, appelée image de base ou image racine, qui est officiellement fournie
    2. Un autre type, tel que l'image tianon/centos, est créé et maintenu par les utilisateurs de Docker et est souvent
      préfixé par le nom d'utilisateur.
  4. Pousser l'image : utilisez la commande docker push pour transférer votre propre image vers Docker Hub

  5. Création automatique : très pratique pour ceux qui ont besoin de mettre à jour fréquemment les programmes dans l'image

    Permet aux utilisateurs de spécifier des projets de suivi sur un site Web cible (prenant actuellement en charge GitHub ou BitBucket) via Docker Hub. Une fois qu'une nouvelle soumission se produit dans le projet ou qu'une nouvelle balise est créée, Docker Hub créera automatiquement l'image et la transmettra à Docker Hub.

Entrepôt privé

Pour l'adresse dl.dockerpool.com/ubuntu, dl.dockerpool.com est l'adresse du serveur d'enregistrement et ubuntu est le nom de l'entrepôt.

Centre Docker

Docker gère officiellement un référentiel public, Docker Hub, qui contient déjà plus de 15 000 images. La plupart des exigences peuvent être satisfaites en téléchargeant l'image directement depuis Docker Hub.

  1. Inscription : enregistrez un compte Docker gratuit sur https://cloud.docker.com

  2. Connexion : exécutez la connexion Docker pour vous connecter, exécutez la déconnexion Docker pour vous déconnecter.

  3. Extrayez l'image : utilisez la commande docker search pour trouver l'image dans l'entrepôt officiel et utilisez la commande docker pull pour
    la télécharger localement ;

    Les ressources miroirs peuvent être divisées en deux catégories selon qu’elles sont officiellement fournies ou non.

    1. L'une est une image comme centos, appelée image de base ou image racine, qui est officiellement fournie
    2. Un autre type, tel que l'image tianon/centos, est créé et maintenu par les utilisateurs de Docker et est souvent
      préfixé par le nom d'utilisateur.
  4. Pousser l'image : utilisez la commande docker push pour transférer votre propre image vers Docker Hub

  5. Création automatique : très pratique pour ceux qui ont besoin de mettre à jour fréquemment les programmes dans l'image

    Permet aux utilisateurs de spécifier des projets de suivi sur un site Web cible (prenant actuellement en charge GitHub ou BitBucket) via Docker Hub. Une fois qu'une nouvelle soumission se produit dans le projet ou qu'une nouvelle balise est créée, Docker Hub créera automatiquement l'image et la transmettra à Docker Hub.

Entrepôt privé

Je suppose que tu aimes

Origine blog.csdn.net/weixin_40709965/article/details/131246908
conseillé
Classement