Docker Compose — co to jest i jak uruchomić wiele kontenerów jednym poleceniem

Docker Compose — co to jest i jak uruchomić wiele kontenerów jednym poleceniem

Docker Compose to narzędzie, które pozwala zdefiniować wielokontenerową aplikację w jednym pliku (docker-compose.yml) i uruchomić ją jednym poleceniem: docker compose up. Zamiast ręcznie uruchamiać każdy kontener Docker osobno (baza danych, serwer web, cache, kolejka) – definiujesz wszystko w YAML i Compose robi resztę.

Co to jest Docker i Docker Compose, jak napisać pierwszy docker-compose.yml, jak uruchomić WordPress + MySQL w 5 minut i kiedy Compose jest potrzebny.

Docker w 60 sekund – szybkie przypomnienie

Docker to platforma do uruchamiania aplikacji w kontenerach – izolowanych środowiskach, które zawierają aplikację + wszystkie jej zależności (system, biblioteki, konfigurację). Kontener to jak „przenośny serwer”: działa tak samo na Twoim laptopie, na serwerze testowym i na produkcji. „U mnie działa” → „wszędzie działa”.

Obraz (image) = szablon kontenera (np. „WordPress 6.5 na PHP 8.2 z Apache”).
Kontener (container) = uruchomiona instancja obrazu (żywy serwer na podstawie szablonu).
Docker Hub = repozytorium gotowych obrazów (mysql, nginx, wordpress, redis, node – tysiące).

Po co Docker Compose – problem wielu kontenerów

Typowa aplikacja webowa składa się z kilku serwisów:

  • Web server (nginx lub Apache) – serwuje stronę
  • Aplikacja (PHP, Node.js, Python) – logika biznesowa
  • Baza danych (MySQL, PostgreSQL) – dane
  • Cache (Redis) – przyspieszenie
  • Kolejka (RabbitMQ, Redis Queue) – zadania asynchroniczne

Bez Compose: musisz ręcznie uruchamiać 5 kontenerów z 5 długimi poleceniami docker run, konfigurować sieci, volumeny, zmienne środowiskowe. Przy 5 kontenerach to jeszcze do ogarnięcia. Przy 10+ – koszmar.

Z Compose: opisujesz wszystko w jednym pliku YAML i wpisujesz docker compose up. Compose uruchamia wszystkie serwisy, łączy je siecią, montuje volumeny i ustawia zmienne. Jedno polecenie = cała aplikacja działa.

Jak zainstalować Docker Compose

Docker Compose jest wbudowany w Docker Desktop (Windows, macOS) – jeśli masz Docker Desktop, masz Compose. Na Linuxie:

# Docker Desktop (Windows/macOS): Compose jest wbudowany

# Linux (jeśli nie masz Docker Desktop):
sudo apt update
sudo apt install docker-compose-plugin

# Sprawdź wersję:
docker compose version

Uwaga: starsza wersja to docker-compose (z łącznikiem, Python). Nowa (v2) to docker compose (bez łącznika, wbudowany plugin). Używaj nowej.

Pierwszy docker-compose.yml – WordPress + MySQL

Najprostszy praktyczny przykład: WordPress z MySQL – lokalnie, w 5 minut, bez instalowania PHP, Apache ani MySQL na Twoim komputerze.

Utwórz plik docker-compose.yml:

services:
 db:
 image: mysql:8.0
 restart: always
 environment:
 MYSQL_ROOT_PASSWORD: supersecret
 MYSQL_DATABASE: wordpress
 MYSQL_USER: wpuser
 MYSQL_PASSWORD: wppassword
 volumes:
 - db_data:/var/lib/mysql

 wordpress:
 image: wordpress:latest
 restart: always
 ports:
 - "8080:80"
 environment:
 WORDPRESS_DB_HOST: db
 WORDPRESS_DB_USER: wpuser
 WORDPRESS_DB_PASSWORD: wppassword
 WORDPRESS_DB_NAME: wordpress
 volumes:
 - wp_data:/var/www/html
 depends_on:
 - db

volumes:
 db_data:
 wp_data:

Uruchom:

docker compose up -d

Otwórz przeglądarkę: http://localhost:8080 – zobaczysz instalator WordPressa. Bez instalowania PHP, Apache, MySQL – wszystko działa w kontenerach.

Co się właśnie stało

  1. Compose pobrał obrazy mysql:8.0 i wordpress:latest z Docker Hub.
  2. Uruchomił kontener MySQL z bazą „wordpress” i użytkownikiem „wpuser”.
  3. Uruchomił kontener WordPress podłączony do MySQL.
  4. Zmapował port 80 kontenera WordPress na port 8080 Twojego komputera.
  5. Utworzył volumeny db_data i wp_data do trwałego przechowywania danych (dane nie znikają po wyłączeniu kontenerów).

Struktura pliku docker-compose.yml

services: # Lista serwisów (kontenerów)
 nazwa_serwisu:
 image: # Obraz z Docker Hub (lub Dockerfile)
 build: # Ścieżka do Dockerfile (alternatywa dla image)
 ports: # Mapowanie portów host:kontener
 environment:# Zmienne środowiskowe
 volumes: # Montowanie folderów (trwałe dane)
 depends_on: # Zależności (uruchom X przed Y)
 restart: # Polityka restartu (always, unless-stopped, on-failure)
 networks: # Sieci (opcjonalne, Compose tworzy domyślną)
 command: # Nadpisanie domyślnej komendy startu

volumes: # Definicje trwałych volumenów
networks: # Definicje sieci (opcjonalne)

Najważniejsze komendy Docker Compose

# Uruchom wszystkie serwisy (w tle)
docker compose up -d

# Uruchom i zobacz logi (foreground)
docker compose up

# Zatrzymaj wszystkie serwisy
docker compose down

# Zatrzymaj i usuń volumeny (DANE ZNIKNĄ!)
docker compose down -v

# Pokaż status serwisów
docker compose ps

# Pokaż logi
docker compose logs

# Pokaż logi konkretnego serwisu
docker compose logs wordpress

# Restartuj serwis
docker compose restart wordpress

# Uruchom komendę wewnątrz kontenera
docker compose exec wordpress bash

# Przebuduj obrazy (po zmianie Dockerfile)
docker compose build

# Przebuduj i uruchom
docker compose up -d --build

Przykład 2: Node.js + PostgreSQL + Redis

services:
 app:
 build: .
 ports:
 - "3000:3000"
 environment:
 DATABASE_URL: postgres://user:pass@db:5432/myapp
 REDIS_URL: redis://cache:6379
 depends_on:
 - db
 - cache

 db:
 image: postgres:16
 environment:
 POSTGRES_USER: user
 POSTGRES_PASSWORD: pass
 POSTGRES_DB: myapp
 volumes:
 - pgdata:/var/lib/postgresql/data

 cache:
 image: redis:7-alpine
 ports:
 - "6379:6379"

volumes:
 pgdata:

build: . oznacza: zbuduj obraz z Dockerfile w bieżącym katalogu (zamiast pobierać z Docker Hub). Idealne dla własnych aplikacji.

Kiedy używać Docker Compose

  • Lokalne środowisko deweloperskie – jeden docker compose up i masz całą aplikację (web + baza + cache) gotową do kodowania. Nowy developer dołącza do projektu → klonuje repo → docker compose up → pracuje. Zero „zainstaluj PHP 8.2, MySQL 8.0, Redis 7, skonfiguruj Apache”.
  • Testowanie – CI/CD pipeline uruchamia testy z Docker Compose (aplikacja + testowa baza + mock services).
  • Prototypowanie – chcesz przetestować WordPress z WooCommerce, albo Next.js z PostgreSQL, albo n8n z Redis? Compose + gotowe obrazy z Docker Hub = 5 minut.
  • Self-hosting – uruchamiasz własne instancje narzędzi: Gitea, n8n, Uptime Kuma, Nextcloud, Plausible Analytics – wszystkie mają gotowe docker-compose.yml.

Kiedy NIE Docker Compose

  • Produkcja na skalę – Compose nie zarządza wieloma serwerami. Do orkiestracji kontenerów na wielu maszynach: Kubernetes (K8s), Docker Swarm, Nomad.
  • Jedna aplikacja bez zależności – jeśli masz jeden kontener (np. statyczna strona na nginx), zwykły docker run wystarczy. Compose jest do wielu kontenerów.

Docker Compose vs Kubernetes – porównanie

Cecha Docker Compose Kubernetes
Złożoność Prosty (1 plik YAML) Złożony (wiele plików, koncepcji)
Skalowanie 1 serwer Wiele serwerów (klaster)
Auto-healing Restart policy (basic) Tak (pełne: replica sets, health checks)
Load balancing Nie (ręcznie lub Traefik) Wbudowane
Najlepszy do Development, małe self-hosting Produkcja, enterprise, duża skala
Krzywa uczenia 30 minut Tygodnie–miesiące

Zasada: Compose do developmentu i małych deploymentów. Kubernetes gdy potrzebujesz skalować na wielu serwerach z auto-healingiem i load balancingiem. 95% projektów zaczyna od Compose i przechodzi na K8s dopiero gdy rośnie obciążenie.

Najczęściej zadawane pytania

Czy Docker Compose jest darmowy?

Tak – Docker Compose jest open source i darmowy. Docker Desktop (który zawiera Compose) jest darmowy do użytku osobistego i małych firm (do 250 pracowników i $10M przychodu). Powyżej: licencja Docker Business ($24/mc/user).

Czy dane znikają po docker compose down?

docker compose down – zatrzymuje kontenery, ale zachowuje volumeny (dane w bazie, pliki WordPress). docker compose down -v – usuwa WSZYSTKO, łącznie z volumenami (dane znikają bezpowrotnie). Ważna różnica!

Jak zaktualizować obraz w Compose?

docker compose pull # pobierz nowe wersje obrazów
docker compose up -d # zrestartuj z nowymi obrazami

Czy mogę uruchomić Compose na serwerze produkcyjnym?

Tak – wiele małych i średnich aplikacji działa na Compose w produkcji (na jednym serwerze). Dodaj reverse proxy (Traefik lub nginx-proxy) do obsługi HTTPS i routingu domen. Dla większych deploymentów: migruj na Kubernetes.

docker-compose.yml vs compose.yml – jaka różnica?

Obie nazwy działają. compose.yml (bez „docker-„) to nowa konwencja od Compose v2. docker-compose.yml to stara konwencja (v1). W praktyce: używaj którejkolwiek – Compose rozpoznaje obie.

Podsumowanie

Docker Compose to „jeden plik, jedno polecenie” do uruchamiania wielokontenerowych aplikacji. Piszesz docker-compose.yml (serwisy, porty, volumeny, zmienne), wpisujesz docker compose up -d – i masz gotowe środowisko: WordPress + MySQL, Node.js + Postgres + Redis, albo cokolwiek innego. Idealne do local developmentu, prototypowania i self-hostingu. Krzywa uczenia: 30 minut od „co to jest” do działającego WordPressa w kontenerze.

Picture of Tomasz Zieliński
Tomasz Zieliński

Tomasz zajmuje się tematyką SEO, sztucznej inteligencji i automatyzacji pracy w marketingu internetowym. W swoich artykułach analizuje zmiany w algorytmach wyszukiwarek, rozwój narzędzi AI oraz nowe sposoby tworzenia i optymalizacji treści. Interesuje go przede wszystkim to, jak technologia wpływa na codzienną pracę specjalistów SEO, marketerów i twórców internetowych.

Facebook
Twitter
LinkedIn
Pinterest

Najnowsze Wpisy

Śledź nas