Heim >Betrieb und Instandhaltung >Docker >Was ist der Unterschied zwischen docker:latest und docker:dind?

Was ist der Unterschied zwischen docker:latest und docker:dind?

王林
王林nach vorne
2020-10-20 17:31:554662Durchsuche

Was ist der Unterschied zwischen docker:latest und docker:dind?

Hintergrund:

Beim Schreiben von CI deklarieren wir das Bild als Ausführungsumgebung des Jobs und jeder Job wird in einem reinen Container ausgeführt.

Manchmal benötigen wir eine Docker-Containerumgebung, um Docker-Build, Docker-Push und andere Vorgänge auszuführen. Wenn wir uns das offizielle Docker-Image ansehen, stellen wir fest, dass es zwei Hauptversionen gibt: docker:latest, docker:dind und docker:git.

(Empfohlenes Tutorial: Docker-Tutorial)

docker:dind

Dieses Bild enthält den Docker-Client (Befehlszeilentool) und den Docker-Daemon.

Über den Docker-Verlaufsbefehl docker:dind haben wir festgestellt, dass docker:dind den Docker-Daemon auf Basis von docker:latest installiert hat und die letzten beiden Build-Befehle lauten:

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                  
...

Beim Ausführen des Images kann der CMD-Parameter sh nicht verwendet werden angegeben werden. Der Befehl dockerd-entrypoint.sh startet den Docker-Daemon nicht, wenn dieser Parameter empfangen wird. Um den Docker-Daemon korrekt im Container zu starten und den Container zu betreten, müssen Sie Schritt für Schritt vorgehen:

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

Beim Starten des Docker:dind-Containers muss der Parameter --privileged hinzugefügt werden, sonst meldet der Docker-Daemon einen Fehler beim Starten.

docker:latest

Dieses Image enthält nur den Docker-Client und erfordert Docker-Daemon-Unterstützung. Sie können docker:dind verwenden oder /var/run/docker.sock des Hosts mounten.

Für den Start dieses Bildes ist der Parameter --privileged nicht erforderlich.

Über den Docker-Verlaufsbefehl docker:latest wird festgestellt, dass der CMD-Standard sh:

81f5749c9058        3 months ago        /bin/sh -c #(nop)  CMD ["sh"]                   0B                  
<missing>           3 months ago        /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…   0B                  
...
ist. Startmethode eins: Host-Sock-Datei mounten und docker:latest Geben Sie dasselbe Netzwerk ein und geben Sie den Alias ​​des Dind-Containers im Netzwerk als Docker an, da der im neuesten Container festgelegte Standard-Daemon-Host Docker heißt.

Außerdem müssen Sie auf das Zertifikatproblem achten. Die neue Version des Docker-Clients erfordert ein TLS-Zertifikat für die Kommunikation mit dem Docker-Daemon, um die Kommunikationssicherheit zu gewährleisten. Der Docker:dind-Container generiert das Zertifikat für das von angegebene Verzeichnis Die Umgebungsvariable DOCKER_TLS_CERTDIR Das Zertifikat muss gemountet und bereitgestellt werden docker:latest Container werden verwendet.

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

docker:git

docker:git ist docker:latest, das den Befehl git enthält, der für die Verwendung von Git in CI praktisch ist.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen docker:latest und docker:dind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen