Версия Docker: 20.10.20
Версия Docker Compose 2.12.0
Я уверен, что вы слышали о докере при развертывании некоторых приложений
Это дает нам несколько преимуществ при развертывании нашего приложения.
- Гарантированная независимая среда разработки
- Интеграция среды разработки/операции
- Скорость развертывания и эффективность аппаратного обеспечения
Конечно, есть и несколько недостатков
В этой статье я попытаюсь объяснить Docker Compose и как его использовать простым способом.
Обзор
Это базовый процесс docker
Однако при запуске образа нам нужно проделать дополнительную работу
, а именно установить конфигурацию (переадресация порта, монтирование тома)
В этом случае вы можете использовать Docker Compose для совместного управления и запуска образов и настроек.
Если вы используете Docker-compose, вы можете записать информацию об образе Docker и информацию о конфигурации в файл docker-compose.yml
и запустить его с помощью простой команды. также может запускать несколько контейнеров с одним файлом docker-compose.yml
Плюсы
- Может заменить сложные команды докера
- Удобное соединение контейнера с контейнером
- Настройка сети для совместного использования только определенных контейнеров
Перед примером я расскажу о простой команде docker compose и о том, как написать docker-compose.yml
файл
Обратитесь к github за образцом кода
В примере давайте, наконец, создадим Dcoker Compose, который вместе запускает приложение MongoDB и Spring.
Как написать Docker-compose.yml
- версия
Спецификация версии вdocker-compose.yml
файле
В зависимости от версии поддерживаемая версия Docker Engine также различается.
version : "3"
- services
Определите контейнер для запуска
это похоже наdocker run --name mongodb
,docker run --name postgres
version : "3" services: mongodb: ...
- изображение в службах
может определять имена изображений и теги, которые будут использоваться контейнерами
Если тег опущен, используется последний,
Автоматически извлекает изображения, если они не существовать
version : "3" services: mongodb: image : mongo
- встроенные сервисы
Использовать сборку при использовании образа после самостоятельной сборки
Приложения Spring подпадают под этот случай
Устанавливает путь к файлу Docker, который будет использоваться при создание весеннего приложения
### Dockerfile FROM openjdk:11-jdk ARG JAR_FILE=./build/libs/*.jar COPY ${JAR_FILE} ./app.jar ENTRYPOINT ["java", "-jar", "./app.jar", "--spring.profiles.active=prod"] version : "3" services: spring-sample-service: restart: always container_name: spring-sample-service build: context: . dockerfile: ./Dockerfile mongodb: image : mongo
- ports
Установите порт для подключения к контейнеру
так же, как этоdocker run -p 8080:8080 ~
version : "3" services: spring-sample-service: restart: always container_name: spring-sample-service build: context: . dockerfile: ./Dockerfile ports: - "8080:8080" mongodb: image : mongo ports: - "27017:27017"
- environment
Определить переменные среды, которые будут использоваться контейнером
пример) {имя переменной среды} : {value}
Если переменная объявлена вDockerfile
, будет перезаписана
version : "3" services: spring-sample-service: restart: always container_name: spring-sample-service build: context: . dockerfile: ./Dockerfile environment: - ME_CONFIG_MONGODB_SERVER=mongodb - ME_CONFIG_MONGODB_PORT=27017 ports: - "8080:8080" mongodb: image : mongo ports: - "27017:27017" environment: - MONGO_INITDB_DATABASE=sample
- depends_on
Добавить зависимости между контейнерами
Приложение Spring должно запускаться после запуска MongoDB
может определять порядок выполнения контейнера
version : "3" services: spring-sample-service: restart: always container_name: spring-sample-service build: context: . dockerfile: ./Dockerfile environment: - ME_CONFIG_MONGODB_SERVER=mongodb - ME_CONFIG_MONGODB_PORT=27017 ports: - "8080:8080" depends_on: - mongodb mongodb: image : mongo ports: - "27017:27017" environment: - MONGO_INITDB_DATABASE=sample
- перезапуск
Наконец, давайте посмотрим на вариант перезапуска
есть несколько вариантов (всегда, при сбое, нет)
всегда вариант всегда перезапускается при сбое,
параметр при сбое перезапускается, когда внутри контейнера происходит сбой
### docker-compose.yml version: "3" services: spring-sample-service: restart: always container_name: spring-sample-service build: context: . dockerfile: ./Dockerfile environment: - ME_CONFIG_MONGODB_SERVER=mongodb - ME_CONFIG_MONGODB_PORT=27017 ports: - "8080:8080" depends_on: - mongodb links: - mongodb mongodb: image: mongo container_name: mongodb-container restart: on-failure ports: - "27017:27017" environment: - MONGO_INITDB_DATABASE=sample
Теперь давайте посмотрим на команду docker compose, которая может использовать созданный файл docker-compose.
Команда Docker Compose
- docker compose pull [service]
Загрузите изображения, необходимые службе - docker compose build [service]
Создайте образы, необходимые службе - docker compose up [service]
запустите службу. Если служба и сеть не существуют, создайте их--build
: Принудительное восстановление образа - docker compose ps
Показывает список запущенных служб. - docker compose остановить [службу]
остановить службу - docker compose start [service]
start service
Теперь давайте соберем и запустим в корневой папке проекта.
$ docker compose up --build
можно увидеть, как он строится и работает вместе
Если вы используете мой проект github, перейдите по этому URLhttp://localhost:8080/swagger-ui/