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,producer
orazconsumer
“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.