GitLab: Como construir imagens Docker no seu GitLab CI

Esta documentação faz parte do guia CI/CD. Consulte o guia completo aqui: Como utilizar o GitLab CI/CD.

👋 Bem-vindo à documentação da Stackhero!

A Stackhero disponibiliza uma solução GitLab cloud pronta a usar, pensada para equipas que necessitam de um ambiente rápido, seguro e escalável:

  • Utilizadores, repositórios, transferências de dados e tempo de processamento CI/CD ilimitados para máxima flexibilidade.
  • Atualizações simples com um só clique, mantendo o seu ambiente sempre atualizado sem tempo de indisponibilidade.
  • Nome de domínio personalizado protegido com HTTPS (por exemplo, https://git.sua-empresa.com) para uma imagem profissional e maior segurança.
  • Desempenho consistente e elevada segurança na sua própria infraestrutura privada e dedicada. Sem vizinhos ruidosos e com total isolamento.
  • Escolha da localização de alojamento: 🇪🇺 Europa ou 🇺🇸 USA, conforme as suas necessidades de conformidade ou latência.

Comece rapidamente e foque-se no seu código. A solução de GitLab cloud hosting da Stackhero fica pronta a usar em cerca de 5 minutos.

Se o repositório do seu projeto inclui ficheiros Dockerfile, pode automatizar o processo de construção, execução e, se necessário, publicação de imagens Docker para um registry.

Para começar, ative o suporte "Docker in Docker" (DinD) no seu dashboard Stackhero.

Ativar o suporte DinD representa um risco de segurança, especialmente se pretende isolar os seus utilizadores e evitar que acedam aos projetos uns dos outros.

De seguida, atualize o seu ficheiro gitlab-ci.yml para incluir uma configuração de pipeline que construa o seu Dockerfile utilizando DinD. Segue-se um exemplo de configuração:

image: docker:29

build:
  stage: build
  services:
    - name: docker:29-dind
      alias: docker
  variables:
    # Aponta o CLI do Docker para o serviço Docker-in-Docker, através do seu porto
    # simples (sem TLS). Veja a nota abaixo sobre a importância do DOCKER_HOST.
    DOCKER_HOST: "tcp://docker:2375"
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - docker info
  script:
    # Substitua "my-docker-image" pelo nome da imagem pretendida:
    - docker build -t my-docker-image .
    # Opcionalmente, teste a imagem Docker:
    # - docker run my-docker-image /script/to/run/tests

O serviço docker:29-dind inicia um daemon Docker ao lado do seu job, e o DOCKER_HOST indica ao CLI docker para o utilizar. Defina sempre o DOCKER_HOST quando declarar um serviço docker:dind: se o omitir, o CLI liga-se silenciosamente a outro daemon, e o seu build pode ter sucesso mesmo que o serviço esteja mal configurado, ocultando problemas reais. DOCKER_TLS_CERTDIR: "" utiliza o porto simples 2375 na rede interna do job.

Como alternativa mais simples, pode remover completamente o bloco services e ambas as variáveis: o runner da Stackhero já expõe um daemon Docker pronto a usar através de um socket montado, pelo que um simples docker build funciona imediatamente.

Para mais informações sobre como construir imagens Docker com o GitLab CI, consulte a documentação oficial do GitLab.