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 ...
$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock docker:latest
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!