GitLab: Jak budować obrazy Docker w GitLab CI

Ta dokumentacja jest częścią przewodnika CI/CD. Pełny przewodnik znajdziesz tutaj: Jak korzystać z GitLab CI/CD.

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie GitLab cloud, stworzone z myślą o zespołach potrzebujących szybkiego, bezpiecznego i skalowalnego środowiska:

  • Nieograniczona liczba użytkowników, repozytoriów, transferów danych oraz czasu przetwarzania CI/CD – pełna elastyczność.
  • Bezproblemowe aktualizacje jednym kliknięciem – Twoje środowisko zawsze aktualne, bez przestojów.
  • Własna nazwa domeny zabezpieczona HTTPS (np. https://git.twoja-firma.com) – profesjonalny wizerunek i bezpieczeństwo.
  • Stała wydajność i wysoki poziom bezpieczeństwa na Twojej prywatnej, dedykowanej infrastrukturze. Brak "głośnych sąsiadów" i pełna izolacja.
  • Wybór lokalizacji hostingu: 🇪🇺 Europa lub 🇺🇸 USA – zgodnie z wymaganiami dotyczącymi zgodności lub opóźnień.

Zacznij szybko i skup się na swoim kodzie. Rozwiązanie GitLab cloud hosting od Stackhero jest gotowe do użycia w około 5 minut.

Jeśli repozytorium projektu zawiera pliki Dockerfile, można zautomatyzować proces budowania, uruchamiania oraz – w razie potrzeby – publikowania obrazów Docker do rejestru.

Na początek należy włączyć obsługę "Docker in Docker" (DinD) w panelu Stackhero.

Włączenie obsługi DinD wiąże się z ryzykiem bezpieczeństwa, zwłaszcza jeśli zależy Państwu na izolacji użytkowników i uniemożliwieniu im dostępu do projektów innych osób.

Następnie należy zaktualizować plik gitlab-ci.yml, aby dodać konfigurację pipeline'u budującego Dockerfile z wykorzystaniem DinD. Przykładowa konfiguracja poniżej:

image: docker:29

build:
  stage: build
  services:
    - name: docker:29-dind
      alias: docker
  variables:
    # Ustawia CLI dockera na usługę Docker-in-Docker przez jej zwykły
    # (nie-TLS) port. Zobacz poniższą uwagę, dlaczego DOCKER_HOST jest istotny.
    DOCKER_HOST: "tcp://docker:2375"
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - docker info
  script:
    # Zamień "my-docker-image" na nazwę wybranego obrazu:
    - docker build -t my-docker-image .
    # Opcjonalnie, przetestuj obraz Docker:
    # - docker run my-docker-image /script/to/run/tests

Usługa docker:29-dind uruchamia demona Docker obok zadania, a DOCKER_HOST wskazuje CLI dockera, aby z niego korzystał. Zawsze ustawiaj DOCKER_HOST, gdy deklarujesz usługę docker:dind: jeśli tego nie zrobisz, CLI po cichu połączy się z innym demonem, a build może się powieść nawet przy błędnej konfiguracji usługi, co ukrywa rzeczywiste problemy. DOCKER_TLS_CERTDIR: "" pozwala korzystać ze zwykłego portu 2375 (bez TLS) w wewnętrznej sieci zadania.

Jako prostszą alternatywę można całkowicie pominąć blok services i obie zmienne: runner Stackhero udostępnia już gotowego demona Docker przez zamontowany socket, więc zwykłe docker build działa od razu.

Dodatkowe informacje na temat budowania obrazów Docker z GitLab CI można znaleźć w oficjalnej dokumentacji GitLab.