w ,

FajneFajne Dobre!Dobre!

Docker Compose – automatyzacja w zarządzaniu kontenerami

docker
docker

Docker Compose automatyzuje tworzenie i uruchamianie wielu kontenerów. Znacznie upraszcza on pracę i eliminuje błąd ludzki zwłaszcza jeśli musimy uruchomić wiele kontenerów zależnych od siebie.

Pozwala na wykonanie czynności w warunkach, kolejności i kolejności i czasie. Dlatego często mówi się Docker Orchestration, czy też jak to jest w nazwie Compose (ang. kompozycja) – jako określenie zasad współpracy kontenerów.

Całość orkiestry definiujemy w postaci pliku, który zawiera wszystkie występujące po sobie czynności. W tym artykule przedstawię Ci praktyczny przykład jego budowy oraz wykorzystywania w praktyce.

Przykładowy scenariusz wykorzystania

Załóżmy, że mamy dwie aplikacje. Pierwsza aplikacja to API które udostępnia i zapisuje informacje w bazie danych. Druga aplikacja to klient, która komunikuje się z tym API i dokonuje określonych działań.

W przypadku klasycznego zarządzania kontenerami musimy pobrać obraz bazy danych, który jest niezbędny działania aplikacji z API. Następnie zbudować obrazy – osobny dla aplikacji z API oraz osobny dla klienta. Co w rezultacie sprawia, że musimy zarządzać trzeba obrazami.

Problematyczne staje się uruchamianie każdego obrazu osobno, pamiętając o prawidłowej kolejności i warunkach uruchomienia. Jednakże trzy obrazy są do ogarnięcia, a co jeśli tych obrazów mamy znacznie więcej? Tu z pomocą przychodzi Docker Compose który umożliwia zautomatyzowanie całego procesu.

Docker Compose – definiowanie zależności

W pierwszej kolejności tworzymy Dockerfile dla aplikacji API:

FROM openjdk:8u201-jdk-alpine3.9
ADD target/springboot-api-docker-0.0.1-SNAPSHOT.jar .
EXPOSE 12121
CMD java -jar springboot-api-docker-0.0.1-SNAPSHOT.jar

A następnie dla aplikacji klienckiej:

FROM openjdk:8u201-jdk-alpine3.9
ADD target/springboot-client-docker-0.0.1-SNAPSHOT.jar .
EXPOSE 12121
CMD java -jar springboot-client-docker-0.0.1-SNAPSHOT.jar

Ostatnim krokiem jest utworzenie pliku docker-compose.yml. Plik ten zawiera informacje dotyczące kontenerów, które przez niego mają zostać uruchomione:

version: '3'                          # wersja docker compose
 services:                             # serwisy jakie sa zarządzane przez bierzący docker compose
   api:                                # nazwa serwisu (dowolna, unikalna)
     build: ./springboot-api-docker    # sciezka do pliku Dockerfile dla tego kontenera
     ports:
     - "10101:10101"                   # ustawienie mapowania portu
     depends_on:                       # zaleznosc - do uruchomienia tego serwisu wymagane wczesniejsze uruchomienie serwisu databases
     - databases
   client:
     build: ./springboot-client-docker
     ports:
     - "12121:12121"
     depends_on:
     - api
   databases:
     container_name: 'databases'       # nazwa dla kontenera
     image: mysql                      # obraz bazy danych
       MYSQL_PASSWORD: password
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: animaldb
       MYSQL_USER: user
     ports:
     - "3306:3306"

Zwróć uwagę, że został uwzględniony w tym przypadku obraz dla bazy danych. Jego sposób sposób konfiguracji i definiowania zmiennych środowiskowych jest opisany na mysql – Docker Hub.

Natomiast wykorzystując polecenie depends_on zyskujemy możliwość sterowania kolejności uruchomienia.

Uruchomienie Docker Compose

Aby uruchomić wszystkie trzy obrazy należy przejść do katalogu, w którym znajduje się plik docker-compose.yml, a następnie wykonać w CLI komendę:

docker-compose up

Przewodnik wideo

Wideo, w trakcie którym pokazuje jak krok po kroku zrealizować opisane czynności przedstawiam we Wideo na moim kanale YouTube. Materiał tym bardziej ciekawy, gdyż przedstawia jak wiele błędów można popełnić w pozornie prostych czynnościach 😉

Napisane przez Przemysław Bykowski

Aktywny programista i energiczny trener. Specjalizuje się w Spring Boot i uczę go w ramach AkademiaSpring.pl. Po godzinach udzielam się na YouTubach. Więcej o mnie.

Dodaj komentarz

Spring Boot

Spring Boot #17 – Programowanie zorientowane aspektowo (AOP)

Spring Boot

Spring Boot #18 – Java Message Service i RabbitMQ