Co to jest docker compose?

Autor: Opublikowano

W skrócie: Docker Compose to narzędzie do definiowania i uruchamiania aplikacji złożonych z kilku kontenerów Dockera. W jednym pliku opisujesz usługi, ich konfigurację, połączenia i miejsce przechowywania danych, a następnie uruchamiasz je poleceniem docker compose up. Przydaje się na przykład wtedy, gdy projekt potrzebuje aplikacji, bazy danych i dodatkowego panelu administracyjnego.

Jak Docker Compose współpracuje z Dockerem

Docker uruchamia programy w kontenerach, czyli odizolowanych środowiskach zawierających aplikację i potrzebne jej zależności. Kontener powstaje z obrazu — gotowego pakietu określającego, co ma zostać uruchomione. Compose nie zastępuje Dockera: korzysta z niego, aby zarządzać zestawem powiązanych kontenerów.

Bez Compose możesz uruchamiać każdy kontener osobnym poleceniem docker run, ręcznie podając porty, zmienne środowiskowe i sieć. Compose pozwala zapisać te ustawienia w pliku compose.yaml. Dzięki temu konfigurację można przechowywać razem z kodem projektu i odtworzyć na innym komputerze.

Podstawowym pojęciem jest usługa, czyli definicja konkretnego elementu środowiska, na przykład bazy danych. Compose tworzy kontenery na podstawie tych definicji. Domyślnie zakłada też sieć projektu, w której usługi mogą odnajdywać się po swoich nazwach.

Co znajduje się w pliku compose.yaml

Konfigurację zapisuje się w YAML, formacie tekstowym wykorzystującym wcięcia do określania struktury. Wcięcia muszą być spójne; do ich tworzenia używaj spacji, nie tabulatorów.

Najczęściej spotkasz następujące elementy:

Samo uruchomienie kontenerów nie oznacza jeszcze, że aplikacja działa poprawnie. Baza może potrzebować czasu na inicjalizację, a aplikacja powinna umieć ponowić połączenie. depends_on może określać kolejność uruchamiania, ale w podstawowej postaci nie gwarantuje gotowości usługi; do tego potrzebna jest odpowiednia konfiguracja kontroli stanu, czyli healthcheck, i warunku zależności.

Przykład: PostgreSQL i panel do obsługi bazy

Załóżmy, że chcesz lokalnie przetestować PostgreSQL bez instalowania bazy bezpośrednio w systemie. Do tego potrzebujesz panelu Adminer, pozwalającego przeglądać dane przez przeglądarkę. Utwórz katalog projektu i zapisz w nim plik compose.yaml:

services:
  db:
    image: postgres:17
    environment:
      POSTGRES_USER: demo
      POSTGRES_PASSWORD: lokalne_haslo_demo
      POSTGRES_DB: demo
    volumes:
      - db_data:/var/lib/postgresql/data

  adminer:
    image: adminer:5
    ports:
      - "127.0.0.1:8080:8080"

volumes:
  db_data:

Uruchom środowisko w tym katalogu:

docker compose up -d

Opcja -d uruchamia kontenery w tle. Przy pierwszym uruchomieniu Docker pobierze obrazy, jeśli nie ma ich lokalnie.

Otwórz w przeglądarce adres http://localhost:8080. W panelu wybierz PostgreSQL, podaj serwer db, użytkownika demo, hasło lokalne_haslo_demo i bazę demo. Jeśli baza jeszcze się inicjalizuje, odczekaj chwilę i ponów logowanie.

Nazwa db działa wewnątrz sieci Compose. Nie używaj tam localhost: z perspektywy kontenera Adminera oznaczałoby to sam kontener Adminera, a nie bazę. PostgreSQL nie ma w tym przykładzie portu udostępnionego na komputerze, natomiast panel jest dostępny tylko przez lokalny interfejs komputera.

To konfiguracja do nauki, nie gotowy zestaw produkcyjny. Nie używaj przykładowego hasła do rzeczywistych danych ani nie zapisuj prawdziwych sekretów w repozytorium.

Polecenia potrzebne w codziennej pracy

Współczesne polecenie ma postać docker compose, ze spacją. Zapis docker-compose, spotykany w starszych poradnikach, dotyczy starszego sposobu instalacji narzędzia. Dostępność Compose sprawdzisz przez docker compose version; jeśli polecenie nie działa, potwierdź sposób instalacji dla swojego systemu w oficjalnej dokumentacji Dockera.

PolecenieZastosowanie
docker compose psPokazuje kontenery projektu i ich stan.
docker compose logs -fWyświetla logi i śledzi kolejne komunikaty.
docker compose stopZatrzymuje kontenery bez ich usuwania.
docker compose downUsuwa kontenery i sieć projektu, ale domyślnie zachowuje nazwane wolumeny.
docker compose configSprawdza i pokazuje wynikową konfigurację.

Uważaj na docker compose down -v: opcja -v usuwa również wolumeny zarządzane przez projekt, więc w tym przykładzie skasuje dane bazy. Wolumen zapewnia trwałość danych po usunięciu kontenera, ale nie zastępuje kopii zapasowej.

Kiedy Compose wystarcza, a kiedy nie

Compose dobrze pasuje do lokalnego tworzenia aplikacji, testowania integracji i prostych wdrożeń na jednym serwerze. Jest szczególnie użyteczny, gdy kilka osób ma uruchamiać ten sam zestaw usług bez ręcznego odtwarzania ustawień.

Nie zapewnia sam z siebie zarządzania klastrem wielu serwerów ani wysokiej dostępności. Wdrożenie produkcyjne wymaga osobnego zaplanowania zabezpieczeń, kopii zapasowych, monitorowania i aktualizacji obrazów. Tag obrazu, taki jak postgres:17, może wskazywać kolejne wydania w tej samej linii; gdy potrzebujesz ścisłej powtarzalności, rozważ przypięcie obrazu do konkretnego digestu, czyli identyfikatora jego zawartości.

Na początek uruchom przykład, sprawdź logi i wykonaj docker compose down, a potem ponownie docker compose up -d. Tak sprawdzisz w praktyce różnicę między odtwarzanym kontenerem a zachowanymi danymi.

Zobacz też: Co to jest ETF?

Przeczytaj także

Dowiedz się, jak PHP-FPM obsługuje żądania PHP, czym różni się od serwera WWW i jak dobrać ustawienia procesów do ruchu oraz zasobów hostingu.
Poznaj BIND, otwarte oprogramowanie serwera DNS: sprawdź, jak obsługuje domeny, czym różnią się jego role i kiedy warto samodzielnie go wdrożyć.
Poznaj najważniejsze Security Headers, ich rolę w ochronie strony oraz sposób sprawdzania i wdrażania nagłówków bez blokowania potrzebnych funkcji.