
Docker Compose jest kolejnym krokiem w pracy z kontenerami. Służy do uruchamiania i definiowania aplikacji składającej się z wielu kontenerów. Definiując pojedynczy plik Dockerfile nie mamy problemu z uruchomieniem go, jeśli natomiast mamy wiele takich plików pojawia się bardzo duża złożoność. Rozwiązaniem problemu jest Docker Compose.
Uwaga! Aby korzystać z Docker Compose wymagana jest instalacja Dockera.
Na początek zacznijmy od stworzenia dwóch plików Dockerfile dla naszych aplikacji. Pierwszy, który będzie producentem wiadomości na kolejkę:
FROM openjdk:8-jre-alpine
ADD target/producer-docker.jar producer-docker.jar
EXPOSE 8081
EXPOSE 8001
ENTRYPOINT [“java”, “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8001”, “-jar”, “producer-docker.jar”]
Natomiast plik Dockerfile dla consumera naszych wiadomości będzie wyglądał następująco:
FROM openjdk:8-jre-alpine
ADD target/consumer-docker.jar consumer-docker.jar
EXPOSE 8082
EXPOSE 8002
ENTRYPOINT [“java”, “-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8002”, “-jar”, “consumer-docker.jar”]
Gdy stworzyliśmy pliki Dockerfile możemy przystąpić do utworzenia pliku docker-compose.yml.
version: ‘3’
services:
rabbitmq:
image: rabbitmq:3.6-management-alpine
ports:
- “5672:5672”
- “15672:15672”
producer:
build: ./producer
ports:
- “8081:8081”
- “8001:8001”
links:
- rabbitmq
environment:
RABBIT_HOST: rabbitmq
consumer:
build: ./consumer
ports:
- “8082:8082”
- “8002:8002”
links:
- rabbitmq
environment:
RABBIT_HOST: rabbitmq
gdzie:
version- oznacza wersję Docker Compose (aktualna wersja to 3.3)services- sekcja, w której definiujemy serwisyrabbitmq/producer/consumer- nazwa własna usługiimage- wskazujemy z jakiego obrazu ma być zbudowany kontenerbuild- wskazujemy ścieżkę do pliku Dockerfile naszego serwisuports- definiujemy porty, które będą mapowane z kontenerulinks- zależność pomiędzy kontenerami,producerorazconsumer“widzą się” zrabbitmq, czyli mogą korzystać z jego usługenvironment- zmienna środowiskowa dla danego kontenera
Aby uruchomić Docker Compose w naszym terminalu Dockerowym używamy polecenia (tam gdzie mamy plik docker-compose.yml):
docker-compose up
Aby sprawdzić czy nasze kontenery pracują:
docker-compose ps
Teraz wystarczy udać się pod wybrany przez nas adres. Jeśli zakończyliśmy pracę z naszymi kontenerami wydajemy polecenie (tam gdzie mamy plik docker-compose.yml), które stopuje kontenery:
docker-compose stop
Usunięcie kontenerów osiągniemy dzięki (polecenie uruchamiamy tam gdzie mamy plik docker-compose.yml):
docker-compose rm
Github
Całość jak zawsze na GitHub.