Maison  >  Article  >  Opération et maintenance  >  Quelle est la différence entre docker:latest et docker:dind

Quelle est la différence entre docker:latest et docker:dind

王林
王林avant
2020-10-20 17:31:554539parcourir

Quelle est la différence entre docker:latest et docker:dind

Contexte :

Lors de l'écriture de CI, l'image est déclarée comme environnement d'exécution du travail, et chaque travail est exécuté dans un conteneur pur.

Parfois, nous avons besoin d'un environnement de conteneur Docker pour effectuer Docker build, Docker push et d'autres opérations. En regardant l'image officielle du docker, nous constatons qu'il existe deux versions principales : docker:latest, docker:dind et docker:git.

(Tutoriel recommandé : tutoriel docker)

docker:dind

Cette image contient le client Docker (outil de ligne de commande) et le démon Docker.

Grâce à la commande docker history docker:dind, nous avons constaté que docker:dind a installé le démon Docker sur la base de docker:latest, et les deux dernières commandes de construction sont :

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
66dc2d45749a        8 weeks ago         /bin/sh -c #(nop)  CMD []                       0B                  
<missing>           8 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["dockerd-entr…   0B                  
...

Exécuter l'image Lorsque, le paramètre sh CMD ne peut pas être spécifié. La commande dockerd-entrypoint.sh ne démarrera pas le démon Docker lors de la réception de ce paramètre. Pour démarrer correctement le démon Docker dans le conteneur et entrer dans le conteneur, vous devez procéder étape par étape :

$ docker run -d --name dind --privileged docker:dind # 启动容器
$ docker logs -f dind # 查看启动日志
$ docker exec -it dind sh # 进入容器

Lors du démarrage du conteneur docker:dind, il faut ajouter le paramètre --privileged, sinon le démon Docker signalera une erreur au démarrage.

docker:latest

Cette image contient uniquement le client Docker et nécessite la prise en charge du démon Docker. Vous pouvez utiliser docker:dind ou monter le /var/run/docker de l'hôte.

Cette image ne nécessite pas le paramètre --privileged pour démarrer.

On découvre grâce à la commande docker history docker:latest que la valeur par défaut du CMD est sh :

81f5749c9058        3 months ago        /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
<missing>           3 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B                  
...

Méthode de démarrage 1 : monter le fichier sock hôte

$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:latest

Méthode de démarrage deux : coopérer avec docker: dind

Mettez docker:dind et docker:latest dans le même réseau et spécifiez l'alias du conteneur dind dans le réseau comme docker, car l'hôte démon par défaut dans le dernier conteneur est appelé docker.

De plus, vous devez faire attention au problème du certificat. La nouvelle version du client Docker nécessite un certificat TLS pour communiquer avec le démon Docker afin d'assurer la sécurité des communications. Le conteneur docker:dind générera le certificat. le répertoire spécifié par la variable d'environnement DOCKER_TLS_CERTDIR. Le certificat doit être monté et fourni pour être utilisé par les conteneurs docker:latest.

$ docker run --privileged --name some-docker -d \
    --network some-network --network-alias docker \
    -e DOCKER_TLS_CERTDIR=/certs \
    -v some-docker-certs-ca:/certs/ca \
    -v some-docker-certs-client:/certs/client \
    docker:dind
$ docker run --rm --network some-network \
    -e DOCKER_TLS_CERTDIR=/certs \
    -v some-docker-certs-client:/certs/client:ro \
    docker:latest

docker:git

docker:git est docker:latest qui contient la commande git, ce qui est pratique pour utiliser Git dans CI.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer