docker compose build

Buduje (lub przebudowuje) obrazy usług z compose.yaml.

docker compose build buduje (albo przebudowuje) obrazy Dockera dla usług opisanych w pliku compose.yaml — tych, które mają sekcję build: zamiast samego image:. Innymi słowy: bierze Twoje Dockerfile i kontekst budowania zdefiniowane w composie i robi z nich gotowe obrazy, ale ich nie uruchamia. To etap „skompiluj”, zanim odpalisz docker compose up. Przydaje się, gdy chcesz zbudować obrazy z wyprzedzeniem, wymusić świeży build po zmianie kodu albo przygotować obrazy do wypchnięcia do rejestru.

Składnia i najważniejsze opcje

Podstawowa forma: docker compose build [OPTIONS] [SERVICE...]. Bez podania usług buduje wszystkie z sekcją build; możesz też wskazać konkretne, np. docker compose build api worker.

  • --no-cache — buduje bez cache, każda warstwa od zera. Ratuje, gdy Docker uparcie serwuje stary stan.
  • --pull — zawsze próbuje pobrać nowszą wersję obrazu bazowego (FROM) zamiast brać lokalny.
  • --build-arg KEY=VAL — przekazuje zmienną build-time do ARG w Dockerfile.
  • --push — po zbudowaniu wypycha obrazy do rejestru (wymaga ustawionych nazw image).
  • --no-cache i --pull łączą się — daje to najczystszy start budowy.
  • -q, --quiet — nie wypisuje logów budowania, tylko ewentualne błędy.
  • --progress STYLE — typ wyjścia: auto, tty, plain (to ostatnie pokazuje pełne logi, świetne do debugowania) albo quiet.
  • --ssh — udostępnia agenta SSH buildowi (np. do klonowania prywatnego repo).

Przykłady użycia

  • docker compose build — buduje wszystkie usługi z sekcją build wg compose.yaml.
  • docker compose build --no-cache api — przebudowuje tylko usługę api całkowicie od zera.
  • docker compose build --pull --no-cache — pobiera najnowsze obrazy bazowe i ignoruje cache, czyli pełny czysty build.
  • docker compose build --build-arg NODE_ENV=production — buduje, podając argument odbierany przez ARG NODE_ENV.
  • docker compose build --progress plain web — buduje web z pełnymi, niezwijanymi logami, idealne gdy coś się sypie.

Częste błędy i pułapki

Najczęstsza wpadka: zmieniasz kod, robisz docker compose up i widzisz starą wersję. up nie przebudowuje obrazu, jeśli już istnieje — musisz dać docker compose up --build albo wcześniej build. Druga pułapka: --no-cache dotyczy tylko warstw Dockerfile, nie pobierze świeższego obrazu bazowego — do tego potrzebujesz --pull. Pamiętaj też o nowej składni: to docker compose (Compose V2, plugin), a nie stare docker-compose z myślnikiem — flagi bywają identyczne, ale to dwa różne narzędzia i stara wersja powoli odchodzi na emeryturę. I jeszcze klasyk: --push nie zadziała, jeśli usługa nie ma ustawionej nazwy image — nie ma gdzie wypchnąć.

Powiązane komendy: docker compose up --build, docker build, docker compose push, docker compose pull, docker compose config, docker images.