Версия 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, перейдите по этому URL
http://localhost:8080/swagger-ui/