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.
Krok 1: Włącz obsługę Docker in Docker (DinD)
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.
Krok 2: Skonfiguruj pipeline GitLab CI
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.