Подтвердить что ты не робот

Как я могу позволить промежуточным изображениям кэша изображений DinD для gitlab-ci-runner?

У меня есть файл Docker, который начинается с установки пакета texlive-full, который огромен и занимает много времени. Если я docker build он локально, промежуточное изображение, созданное после установки, кэшируется, а последующие сборки выполняются быстро.

Однако, если я нажимаю на свою собственную установку GitLab и запускает сборщик GitLab-CI, это всегда начинается с нуля, перезагружая образ FROM и снова выполняя установку apt-get. Мне кажется, что это огромная трата, поэтому я пытаюсь понять, как заставить изображение GitLab DinD кэшировать промежуточные изображения между сборками без ведома.

Я попытался использовать команды --cache-dir и --docker-cache-dir для команды gitlab-runner register, но безрезультатно.

Возможно, это что-то, что может сделать dinD-образ gitlab-runner?

Мой .gitlab-ci.yml:

build_job:
    script:
    - docker build --tag=example/foo .

Мой Dockerfile:

FROM php:5.6-fpm
MAINTAINER Roel Harbers <[email protected]>
RUN apt-get update && apt-get install -qq -y --fix-missing --no-install-recommends texlive-full
RUN echo Do other stuff that has to be done every build.

Я использую GitLab CE 8.4.0 и gitlab/gitlab-runner: последний как бегун, начинающийся как

docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/local/gitlab-ci-runner/config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest \
; \

Бегун регистрируется с помощью:

docker exec -it gitlab-runner gitlab-runner register \
    --name foo.example.com \
    --url https://gitlab.example.com/ci \
    --cache-dir /cache/build/ \
    --executor docker \
    --docker-image gitlab/dind:latest \
    --docker-privileged \
    --docker-disable-cache false \
    --docker-cache-dir /cache/docker/ \
; \

Это создает следующий config.toml:

concurrent = 1
[[runners]]
    name = "foo.example.com"
    url = "https://gitlab.example.com/ci"
    token = "foobarsldkflkdsjfkldsj"
    tls-ca-file = ""
    executor = "docker"
    cache_dir = "/cache/build/"
    [runners.docker]
        image = "gitlab/dind:latest"
        privileged = true
        disable_cache = false
        volumes = ["/cache"]
        cache_dir = "/cache/docker/"

(Я экспериментировал с разными значениями для cache_dir, docker_cache_dir и disable_cache, все с тем же результатом: никакого кэширования вообще не было)

4b9b3361

Ответ 1

Я полагаю, нет простого ответа на ваш вопрос. Прежде чем добавлять некоторые детали, я настоятельно рекомендую прочитать эту статью в блоге у сопровождающего DinD, который изначально назывался "не использовать Docker в Docker for CI".

Что вы можете попробовать, объявив /var/lib/docker в качестве тома для вашего бегуна GitLab. Но будьте осторожны, в зависимости от ваших драйверов файловой системы вы можете использовать AUFS в контейнере в файловой системе AUFS на вашем хосте, что очень вероятно вызовет проблемы.

Я бы предложил вам создать отдельную Docker-VM, только для бегунов (-ов) и bind-mount docker.sock из виртуальной машины в ваш контейнер-бегун. Мы используем эту настройку с GitLab с большим успехом ( > 27 000 сборок за 12 месяцев).

Вы можете взглянуть на наш бегун с поддержкой docker-compose, который на самом деле основан на исполнятеле оболочки исполнителя бегуна GitLab.

Ответ 2

В настоящее время вы не можете кэшировать промежуточные уровни в GitLab Docker-in-Docker. Хотя есть планы добавить это (это указано в ссылке ниже). Что вы можете сделать сегодня, чтобы ускорить создание DinD, это использовать файловую систему overlay. Для этого вам нужно запустить ядро ​​liunx >= 3.18 и убедиться, что вы загружаете модуль ядра наложения. Затем вы установите эту переменную в свой gitlab-ci.yml:

variables:
  DOCKER_DRIVER: overlay

Для получения дополнительной информации см. эту проблему, и в частности этот комментарий к "Состояние оптимизации Docker Builds!", см. раздел "Использование исполнителя докеров с помощью dind".

https://gitlab.com/gitlab-org/gitlab-ce/issues/17861#note_12991518