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
-duruchomi 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
.envdo przechowywania haseł i konfiguracji. - Ustal konkretne wersje obrazów (np.
mysql:8.0.32zamiastlatest). - 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.ymlw 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.