Docker Engine jest fantastyczny do uruchamiania pojedynczych, odizolowanych kontenerów. Ale nowoczesne aplikacje rzadko istnieją w całkowitej izolacji. Zazwyczaj masz serwer WWW, API backend, bazę danych (jak MySQL lub PostgreSQL) i może warstwę buforującą (jak Redis).
Próba uruchomienia wszystkich tych kontenerów ręcznie i ręczne łączenie ich wewnętrznych sieci przez wyczerpujące, milowe polecenia docker run jest frustrujące i poważnie podatne na błędy ludzkie.
Wprowadź Docker Compose. Pozwala ci zadeklarować cały stos aplikacji w pojedynczym, czystym pliku .yml (YAML). Z jednym centralnym poleceniem, Docker buduje wewnętrzne sieci, pobiera wszystkie niezbędne obrazy i uruchamia cały stos sekwencyjnie.
Krok 1: Zweryfikuj że Docker Compose jest zainstalowany
Jeśli śledziłeś nasze przewodniki instalacji Dockera dla Ubuntu/Debian lub AlmaLinux/Rocky/Fedora, w rzeczywistości już masz zainstalowany Docker Compose!
Nowoczesne dystrybucje Dockera przeszły od starego samodzielnego pliku binarnego docker-compose (napisanego w Pythonie) do natywnej wtyczki Docker Compose V2 (napisanej w Go) osadzonej bezpośrednio w CLI Dockera.
Zweryfikuj że jest zainstalowany sprawdzając jego wersję:

docker compose version
(Zwróć uwagę na spację między docker a compose, nie myślnik!)
Powinieneś zobaczyć wynik podobny do tego:
Docker Compose version v2.32.x
Jeśli otrzymasz błąd "command not found", musisz zainstalować wtyczkę przez swój menedżer pakietów:
- Ubuntu/Debian:
sudo apt install docker-compose-plugin - AlmaLinux/RHEL:
sudo dnf install docker-compose-plugin
Krok 2: Skonfiguruj katalog projektu
Docker Compole opiera się absolutnie na kontekście katalogu w którym uruchamiasz polecenie. Szuka pliku o nazwie docker-compose.yml w jakimkolwiek folderze w którym obecnie jesteś.
Najpierw stwórzmy dedykowany dom dla swojego nowego projektu tak aby pliki pozostały zorganizowane:

mkdir my-webapp
cd my-webapp
Krok 3: Utwórz plik docker-compose.yml
Teraz stwórzmy funkcjonalny, realistyczny przykład. Będziemy wdrażać oficjalny obraz WordPress i podłączyć go do bezpiecznej bazy danych MySQL backend, czysto konfigurując wszystko przez Compose.
Otwórz nowy plik za pomocą nano:

nano docker-compose.yml
Wklej następujący blok YAML w całości:
services:
database:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: secure_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: secure_wp_password
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: database
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: secure_wp_password
WORDPRESS_DB_NAME: wordpress
depends_on:
- database
volumes:
db_data:
Wyjaśnienie konfiguracji:
- services: Zdefiniowaliśmy dwa kontenery:
databaseiwordpress. - image: Mówi Dockerowi jaki szablon kontenera pobrać z Docker Hub.
- environment: Wstrzykuje bezpieczne zmienne (jak hasła i nazwy użytkowników) automatycznie do kontenerów tak aby konfigurowały się cicho przy pierwszym uruchomieniu. Spójrz jak kontener
wordpresswie że jego host todatabase(dokładna nazwa innej usługi). Docker Compose automatycznie zbudował wewnętrzną, niewidoczną sieć dla nich aby mogły ze sobą rozmawiać bezproblemowo! - ports: Mapuje port
8080na publicznym internecie bezpośrednio do portu80(Standardowy HTTP) wewnątrz odizolowanego kontenera WordPress. - volumes: W standardowych kontenerach, gdy usuwasz kontener, wszystkie dane znikają z nim. Zmapowaliśmy przechowywanie bazy danych do woluminu dysku twardego tak aby twoje dane przetrwały nawet jeśli zrestartujesz lub usuniesz kontener!
- depends_on: Zapewnia że WordPress nie próbuje uruchomić dopóki baza danych nie działa pomyślnie.
Zapisz i wyjdź.
Krok 4: Uruchom to
Z jednym plikiem, cała twoja infrastruktura jest zadeklarowana. Aby ją uruchomić, użyj polecenia up. Flaga -d mówi mu aby działał "odłączony" w tle tak abyś mógł nadal używać konsoli terminala:

docker compose up -d
Docker automatycznie:
- Stworzy dedykowaną wewnętrzną sieć dla
my-webapp. - Pobierze ciężkie obrazy MySQL i WordPress.
- Uruchomi bazę danych, przypisze hasła i zbuduje trwałą partycję przechowywania.
- Uruchomi serwer WordPress, podłączy go do sieci i zmapuje port 8080.
Gdy skończone, otwórz swoją przeglądarkę internetową i nawiguj do adresu IP swojego serwera połączonego z portem 8080:
http://your_server_ip:8080
[!OSTRZEŻENIE]
Ostrzeżenie bezpieczeństwa: Docker zarządza swoimi własnymi regułami sieciowymi przeziptables. Gdy używasz mapowanieports:w swoim plikudocker-compose.yml, Docker będzie całkowicie omijać twoją zaporę UFW. Aby utrzymać usługę prywatną, zmapuj ją do127.0.0.1:8080zamiast tylko8080.

Natychmiast trafisz słyny ekran instalacji WordPress!
Krok 5: Zarządzaj swoim środowiskiem
Oto kluczowe polecenia do zapamiętania gdy działasz w katalogu zawierającym twój plik docker-compose.yml:
Zobacz co aktywnie działa w tym projekcie:

docker compose ps
Sprawdź głęboko szczegółowe logi systemowe w tle (przydatne jeśli aplikacja ulegnie awarii aby zobaczyć dlaczego umarła):
docker compose logs
# Dodaj -f aby śledzić logi na żywo
docker compose logs -f
Zatrzymaj kontenery tymczasowo bez usuwania ich:

docker compose stop
(Możesz je ponownie uruchomić używając docker compose start)
Zniszcz cały projekt w dół (zatrzymuje kontenery, usuwa je i usuwa wewnętrzne sieci):

docker compose down
(Domyślnie, to NIE usuwa twojego woluminu bazy danych, więc twoje posty WordPress są całkowicie bezpieczne przy ponownym wdrożeniu).
Aby wdrażać stosy aplikacji o wysokiej dostępności używając architektury kontenerowej, nie ma nic lepszego niż wysokowydajna infrastruktura backendowa ją wspierająca. Uruchom Premium VPS, zainstaluj Docker, skopiuj swoje konfiguracje YAML i uruchom swoje złożone, wielowarstwowe infrastruktury do produkcji bez wysiłku.