GitLab Runner: Construir uma imagem Docker com Docker-in-Docker
Esta documentação faz parte do guia Construir imagens Docker. Consulte o guia completo aqui: Construa e envie imagens Docker de forma eficiente a partir dos seus pipelines GitLab CI/CD utilizando runners Stackhero e Docker-in-Docker.
👋 Bem-vindo à documentação da Stackhero!
A Stackhero disponibiliza uma solução GitLab Runner cloud simples que torna a execução dos seus jobs GitLab CI/CD eficiente e sem complicações. Eis o que pode esperar:
- Minutos CI/CD ilimitados: execute os seus pipelines sempre que precisar, sem cobrança por minuto nem custos inesperados.
- Vários jobs em simultâneo: acelere o desenvolvimento ao executar múltiplos jobs em paralelo.
- O executor Docker com suporte para Docker-in-Docker: construa e faça push de imagens de containers facilmente como parte do seu processo CI/CD.
- Compatível tanto com GitLab.com como com instâncias GitLab self-managed.
- Uma infraestrutura privada e dedicada com armazenamento NVMe/SSD rápido garante um desempenho de build estável e previsível.
- Disponível nas regiões 🇪🇺 Europa e 🇺🇸 USA para responder às necessidades da sua equipa.
Poupe tempo: pode ligar o seu primeiro GitLab Runner e começar a executar pipelines em apenas alguns minutos!
Pode adicionar o seguinte exemplo de .gitlab-ci.yml ao seu repositório. Esta configuração constrói o Dockerfile na raiz do seu projeto:
build-image:
stage: build
image: docker:29
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
before_script:
- docker info
script:
# Substitua "my-image" pelo nome pretendido:
- docker build -t my-image .
# Opcionalmente, execute um teste rápido na imagem construída:
# - docker run --rm my-image /path/to/tests
Estamos a utilizar a versão 29 da imagem Docker neste exemplo. Pode optar por uma versão mais recente assim que estiver disponível. Pode consultar as tags mais recentes na página oficial da imagem Docker.
Nesta configuração, o serviço docker:29-dind inicia um daemon Docker ao lado do seu job, e DOCKER_HOST: "tcp://docker:2375" indica ao CLI do docker para o utilizar. Defina sempre o DOCKER_HOST quando declarar um serviço docker:dind: sem esta variável, o CLI liga-se silenciosamente a outro daemon, o que pode fazer com que o build passe mesmo quando o serviço está mal configurado, ocultando problemas reais (e quebrando ferramentas como o Testcontainers que dependem deste serviço). DOCKER_TLS_CERTDIR: "" liga-se através da porta interna não segura (sem TLS) 2375 na rede interna do job.
Como alternativa mais simples, pode omitir o bloco services e ambas as variáveis: o runner da Stackhero também expõe um daemon Docker pronto a usar através de um socket montado, pelo que um simples docker build funciona sem configuração adicional.