Wprowadzenie do Docker Compose

1. Wprowadzenie

W poprzednich lekcjach nauczyłeś się uruchamiać pojedyncze kontenery Dockera, tworzyć własne obrazy i zarządzać środowiskiem aplikacji. Jednak w realnych projektach rzadko pracujemy z tylko jednym kontenerem — najczęściej aplikacja składa się z kilku usług, np.:

  • aplikacja backendowa (Python/Node.js),
  • baza danych (MySQL, PostgreSQL),
  • serwer cache (Redis),
  • narzędzia pomocnicze (np. Nginx, Adminer, Celery).

Zarządzanie nimi osobno przy pomocy komend docker run byłoby niewygodne. Dlatego powstał Docker Compose — narzędzie, które pozwala w prosty sposób definiować, uruchamiać i zarządzać wielokontenerowymi aplikacjami.


2. Czym jest Docker Compose

Docker Compose to narzędzie, które umożliwia:

  • definiowanie wielu usług (kontenerów) w jednym pliku konfiguracyjnym (docker-compose.yml),
  • uruchamianie ich za pomocą jednego polecenia,
  • zarządzanie całą aplikacją jak jednym spójnym środowiskiem.

Dzięki Compose nie musisz wpisywać długich poleceń docker run z wieloma opcjami — wszystko jest opisane w jednym, czytelnym pliku YAML.

Przykład: Zamiast uruchamiać:

wystarczy jeden plik docker-compose.yml, a następnie jedno polecenie:


3. Instalacja Docker Compose

3.1 Docker Desktop (Windows / macOS)

Docker Compose jest zintegrowany z Docker Desktop — nie trzeba niczego instalować. Wystarczy, że masz aktualną wersję Dockera, a polecenia docker compose lub docker-compose będą działać.

3.2 Linux

Na większości dystrybucji Compose również jest dostępny w pakiecie Dockera. Aby sprawdzić, czy jest zainstalowany:

Jeśli nie, możesz zainstalować go ręcznie:

lub (dla starszych wersji):


4. Podstawowe komendy Docker Compose

4.1 Uruchamianie środowiska

Uruchamia wszystkie usługi zdefiniowane w pliku docker-compose.yml.

  • Dodanie flagi -d uruchomi wszystko w tle (detached mode):

4.2 Zatrzymywanie środowiska

Zatrzymuje wszystkie uruchomione kontenery, usuwa sieci i tymczasowe zasoby utworzone przez Compose.

4.3 Sprawdzanie stanu usług

Wyświetla listę kontenerów wraz z ich statusami i mapowaniem portów.

4.4 Logi wszystkich usług

Aby śledzić logi w czasie rzeczywistym:

4.5 Przebudowa obrazów

Jeśli zmienisz coś w Dockerfile, możesz odbudować obrazy:

4.6 Restart usług


5. Struktura pliku docker-compose.yml

Plik docker-compose.yml to serce całego systemu. Zapisany jest w formacie YAML (czyli czytelnej składni klucz–wartość). Definiuje on:

  • usługi (services) — poszczególne kontenery,
  • sieci (networks),
  • wolumeny (volumes),
  • zmienne środowiskowe i konfigurację.

5.1 Podstawowa struktura

Wyjaśnienie kluczowych sekcji:

Sekcja Opis
version Wersja składni Compose (najczęściej używana: 3.8 lub 3.9).
services Lista wszystkich kontenerów w aplikacji.
image Obraz, z którego zostanie uruchomiony kontener (np. nginx:latest).
build Zamiast image – wskazuje katalog z plikiem Dockerfile, by zbudować obraz lokalnie.
ports Mapowanie portów hosta na kontener (np. 8080:80).
environment Zmienne środowiskowe dostępne w kontenerze.
volumes Mapowanie danych między hostem a kontenerem (trwałe dane).
depends_on Określa zależności między usługami (np. backend startuje po bazie danych).

5.2 Przykład – aplikacja Python + MySQL

Struktura projektu:

myapp/
│
├── app.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml

Plik app.py (Flask):

Dockerfile:

docker-compose.yml:

Opis działania:

  • web – uruchamia aplikację Flask zbudowaną lokalnie z Dockerfile.
  • db – uruchamia kontener z bazą MySQL i tworzy bazę mydatabase.
  • depends_on zapewnia, że baza wystartuje przed aplikacją.
  • volumes pozwala na trwałe przechowywanie danych MySQL między restartami.

Uruchomienie projektu:

Po chwili aplikacja Flask będzie dostępna pod adresem: http://localhost:5000


5.3 Przykład – aplikacja Node.js + Redis

Dzięki Compose oba kontenery (web i redis) są automatycznie połączone w jednej sieci — aplikacja może komunikować się z Redisem po nazwie hosta redis.


6. Zalety korzystania z Docker Compose

  • Prostota – cała aplikacja opisana w jednym pliku.
  • Automatyzacja – jednym poleceniem uruchamiasz cały system.
  • Izolacja – każdy projekt może mieć własne środowisko i sieć.
  • Przenośność – identyczne środowisko uruchomisz na dowolnym komputerze lub serwerze.
  • Łatwa integracja z CI/CD – Compose świetnie działa z systemami automatycznego wdrażania.

7. Dobre praktyki

  • Zawsze używaj pliku .env do przechowywania haseł i konfiguracji.
  • Ustal konkretne wersje obrazów (np. mysql:8.0.32 zamiast latest).
  • Używaj nazw wolumenów i sieci, aby dane były trwałe między restartami.
  • Unikaj nadawania globalnych portów, jeśli kontener nie musi być dostępny z zewnątrz.
  • Wersjonuj plik docker-compose.yml w repozytorium — stanowi on pełną dokumentację środowiska.

8. Podsumowanie

W tej lekcji dowiedziałeś się:

  • czym jest Docker Compose i dlaczego ułatwia zarządzanie wielokontenerowymi aplikacjami,
  • jak zainstalować Compose i korzystać z najważniejszych komend (up, down, ps),
  • jak wygląda struktura i składnia pliku docker-compose.yml,
  • oraz jak w praktyce zdefiniować kompletne środowisko aplikacji (np. Flask + MySQL lub Node.js + Redis).

Docker Compose to potężne narzędzie, które znacznie usprawnia pracę zespołów programistycznych, automatyzuje proces uruchamiania środowisk i czyni zarządzanie złożonymi projektami niezwykle prostym.