Ответ 1
В чем разница между докером: dind и докером: последние изображения?
-
docker:latest
содержит все необходимое для подключения к демону docker, т.е. для запускаdocker build
docker run
и тому подобного. Он также содержит демон docker, но не запускается как точка входа. -
docker:dind
основывается наdocker:latest
и запускает демон docker в качестве своей точки входа.
Таким образом, их содержимое почти одинаково, но через точки входа одно из них настроено на подключение к tcp://docker:2375
в качестве клиента, а другое предназначено для использования в качестве демона.
зачем нужен сервис и образ докера […]?
Вам не нужны оба. Вы можете просто использовать любой из них, запустить dockerd
в качестве первого шага, а затем запустить команды docker build
docker run
как обычно, как я делал здесь; очевидно, это был оригинальный подход в gitlab в какой-то момент. Но я считаю более service: docker:dind
просто написать service: docker:dind
вместо того, чтобы использовать before_script
для настройки dockerd
. Также вам не нужно выяснять, как правильно запустить и установить dockerd
в вашем базовом образе (если вы не используете docker:latest
.)
Объявление службы в вашем .gitlab-ci.yml
также позволяет вам легко заменить docker-in-docker, если вы знаете, что ваш бегун монтирует свой /var/run/docker.sock
в ваш образ. Вы можете установить для защищенной переменной DOCKER_HOST
значение unix:///var/run/docker.sock
чтобы получить более быструю сборку. Другие, у которых нет доступа к такому бегуну, могут все еще dind
ваш репозиторий и перейти на сервис dind
без изменения вашего .gitlab-ci.yml
.