Co to jest docker compose?
Autor: Redakcja Domeny.ForSale 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:
services— lista usług tworzących środowisko.image— obraz, z którego zostanie uruchomiony kontener; alternatywą jestbuild, wskazujące sposób budowania własnego obrazu.ports— mapowanie portu komputera na port kontenera, umożliwiające dostęp do usługi spoza sieci kontenerów.environment— zmienne środowiskowe konfigurujące program.volumes— podłączenie katalogów lub wolumenów, czyli miejsc przechowywania danych niezależnych od życia kontenera.
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.
| Polecenie | Zastosowanie |
|---|---|
docker compose ps | Pokazuje kontenery projektu i ich stan. |
docker compose logs -f | Wyświetla logi i śledzi kolejne komunikaty. |
docker compose stop | Zatrzymuje kontenery bez ich usuwania. |
docker compose down | Usuwa kontenery i sieć projektu, ale domyślnie zachowuje nazwane wolumeny. |
docker compose config | Sprawdza 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?
