Ho un Dockerfile che inizia con l'installazione del pacchetto texlive-full, che è enorme e richiede molto tempo. Se I docker build
localmente, l'immagine intermedia creata dopo l'installazione viene memorizzata nella cache e le build successive sono veloci.Come posso lasciare che le immagini intermedie della cache di immagini DinD di gitlab-ci-runner?
Tuttavia, se si esegue il push della mia installazione di GitLab e viene avviato il builder GitLab-CI, questo sembra sempre iniziare da zero, scaricare di nuovo l'immagine FROM
e eseguire di nuovo apt-get install. Questo mi sembra un enorme spreco, quindi sto cercando di capire come ottenere l'immagine GDD di GitLab per memorizzare le immagini intermedie tra le build, senza fortuna fino ad ora.
Ho provato a utilizzare il --cache-dir
e --docker-cache-dir
per il comando gitlab-runner register
, senza alcun risultato.
E 'forse questo qualcosa che l'immagine DinD di gitlab-runner dovrebbe essere in grado di fare?
mio .gitlab-ci.yml
:
build_job:
script:
- docker build --tag=example/foo .
mio 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.
Io uso GitLab CE 8.4.0 e gitlab/gitlab-runner: ultima come corridore, iniziato come
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 \
; \
Il corridore è registrato utilizzando:
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/ \
; \
questo crea il seguente 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/"
(Ho sperimentato con valori diversi per cache_dir
, docker_cache_dir
e disable_cache
, tutte con lo stesso risultato: no cache di alcun tipo)
Sto assumendo "Dind" sta per Docker-in-Docker? – BrokenBinary
Sì, DinD è la terminologia di Gitlab per l'esecuzione della finestra mobile all'interno di un contenitore e forniscono un'immagine predefinita per questo scopo: https://hub.docker.com/r/gitlab/dind/ –
Ciao, stai accettando i cambiamenti di il DinD all'immagine docker? L'immagine DinD si sta riavviando del tutto se ciò causa la perdita della cache poiché non si sta effettuando il commit della cache su una nuova immagine di finestra mobile. – Deckerz