Docker Compose to narzędzie używane do definiowania i uruchamiania aplikacji w Dockerze.
Najczęściej jest kojarzony z aplikacjami wielokontenerowymi, chociaż równie
efektywnie może być używany także w przypadku pojedynczego obrazu i kontenera.
Docker Compose pozwala zdefiniować konfigurację kontenera w czytelny, deklaratywny sposób za pomocą pliku YAML. To
sprawia, że zarządzanie nawet pojedynczym kontenerem staje się prostsze, zwłaszcza gdy konfiguracja jest złożona
(np. wymaga specjalnych ustawień sieci, volumenów, zmiennych środowiskowych itp.).
Poza ułatwieniem konfiguracji Docker Compose posiada szereg innych zalet:
-
Skalowalność i rozszerzalność — Nawet jeśli zaczynasz od jednego
kontenera, Docker Compose sprawia, że dodanie więcej kontenerów później (np. serwera baz danych,
kolejki, cache, itp.) jest proste i nie wymaga znaczących zmian w sposobie, w jaki zarządzasz swoją
aplikacją.
-
Automatyzacja — Docker Compose ułatwia automatyzację procesów deweloperskich i
wdrożeniowych, na przykład w ciągłej integracji i ciągłym wdrażaniu (CI/CD).
-
Wygodna konfiguracja — W środowiskach deweloperskich, gdzie deweloperzy mogą potrzebować uruchamiać
aplikację z różnymi ustawieniami lub zależnościami, Docker Compose ułatwia zarządzanie i przełączanie
między różnymi konfiguracjami.
-
Ustandaryzowanie Używając Docker Compose, możesz ustandaryzować sposób, w jaki aplikacja jest
uruchamiana, co jest przydatne zarówno w produkcji, jak i w fazie dewelopmentu. Wszyscy członkowie zespołu
mogą używać tej samej konfiguracji, co minimalizuje wystąpienie syndromu "u mnie działa".
-
Testowanie — W przypadku testowania aplikacji, Docker Compose pozwala szybko uruchamiać
środowisko testowe, które może obejmować zależności takie jak bazy danych czy serwisy pomocnicze, nawet
jeśli sama testowana aplikacja działa w pojedynczym kontenerze.
Konfiguracja Docker Compose
W celu skonfigurowania Docker Compose dla aplikacji w
obrazie Docker o nazwie
sporting-events, definiujesz plik
docker-compose.yml,
który umieszczasz w katalogu głównym projektu aplikacji.
Dla uproszczenia zakładamy, że chcesz uruchomić tylko tę aplikację Spring Boot bez
żadnych dodatkowych zależności, jak bazy danych czy innych usługi:
Oto co znajduje się w Twoim pliku
docker-compose.yml:
-
version: '3' — Określa wersję składni Docker Compose, którą ten plik
używa. Wersja 3 to popularna i nowoczesna wersja składni, która wspiera większość funkcji Docker
Compose.
-
services — Sekcja definiuje usługi (kontenery), które mają być uruchomione.
-
image — Wskazuje, że usługa sporting-events-service
będzie używać obrazu Docker o nazwie sporting-events.
Docker Compose będzie szukał tego obrazu lokalnie, a jeśli go nie
znajdzie, spróbuje pobrać go z publicznego repozytorium obrazów (np. Docker Hub).
-
ports — Sekcja definiuje mapowanie portów między kontenerem a maszyną hosta.
Innymi słowy, mapowanie 8080:8080 oznacza, że port 8080
w kontenerze (druga liczba) jest mapowany na port 8080 na hoście (pierwsza liczba).
To umożliwia dostęp do aplikacji z zewnątrz kontenera.
-
environment — W tej sekcji możesz określić zmienne środowiskowe, które będą dostępne w kontenerze.
-
networks — Tutaj kontener zostanie podłączony do sieci o nazwie net zdefiniowanej nieco później - na końcu pliku.
Pozwala to na komunikację między różnymi usługami zdefiniowanymi w docker-compose.yml,
które są również częścią tej samej sieci.
-
networks —
Sekcja na dole pliku definiuje sieci, które Docker Compose ma utworzyć.
Definicja net to definicja sieci o nazwie net, którą możemy używać do łączenia kontenerów.
Appa Notka.
Nazwa sieci net w pliku docker-compose.yml jest nazwą zdefiniowaną przez użytkownika.
Możesz użyć dowolnej nazwy dla sieci w konfiguracji Docker Compose. Sieć została zdefiniowana w dwóch miejscach. Na samym dole w sekcji networks
określasz nazwę sieci, w której ma działać kontener. W sekcji servicesużywasz nazwy sieci
zdefiniowanej w sekcji networks.
Uruchomienie kontenera
Po zdefiniowaniu pliku
docker-compose.yml przechodzisz w terminalu do katalogu, w którym znajduje się ten plik i
uruchamiasz komendę
docker-compose up.
Docker Compose uruchamia kontenery zgodnie z konfiguracją określoną w pliku. Procesy wewnątrz
kontenerów, takie jak Twoja aplikacja Spring Boot, są uruchamiane w kontenerach, a nie lokalnie na Twoim komputerze.
Jednakże, standardowe wyjście (stdout) i błędy (stderr) z tych procesów są przekierowywane do Twojej konsoli, gdzie
uruchomiłeś
docker-compose up.
Ponieważ Docker Compose przekierowuje wyjście do Twojej konsoli i uruchamia kontenery w trybie pierwszoplanowym,
Twoja konsola pozostaje "zablokowana" do momentu, aż kontenery będą uruchomione!
Aby uniknąć tego problemu, możesz uruchomić Docker Compose w tle, używając
docker-compose up -d.
Wtedy kontenery będą działać w tle, a konsola będzie natychmiast dostępna do dalszych poleceń:
W celu obejrzenia logów możesz uruchomić komendę
docker-compose logs:
Kod projektu
spring-boot-3-web znajdziesz na naszym GitHubie —
javappa-coding/coding-lab
Appa Notka.
Analizujemy kolejne kursy na Udemy, wykorzystując nasze doświadczenie zawodowe do oceny ich efektywności i
popularności wśród uczestników. Z dużym zaangażowaniem selekcjonujemy te, które naszym zdaniem są najbardziej
efektywne i jednocześnie cieszą się uznaniem uczestników.
Kurs
Docker & Kubernetes: The Practical Guide [2023 Edition] jest efektem tej
głębokiej analizy i prezentuje idealne połączenie wysokiej jakości edukacyjnej z aktualnymi trendami i
wymaganiami rynkowymi.
Autor: Jarek Klimas
Data: 10 stycznia 2024
Labele: Backend, Poziom średniozaawansowany, Java
Czy informacje, które otrzymałeś, były pomocne?
Jeśli tak, zapraszam Cię do podarowania mi kawy.
Dołącz do grupy, w której znajdziesz ciekawe posty oraz poznasz odpowiedzi na swoje pytania!
-
Regularnie publikowane posty dotyczące, Springa i Hibernate'a oraz samej Javy.
-
Możliwość zadawania pytań osobom tworzącym społeczność budowaną
wokół tych samych zainteresowań
-
Bezpośredni kontakt z autorem portalu i kursów Javappa!
-
Wymiana doświadczeń między członkami grupy
-
Przyjazna atmosfera w zamkniętej grupie