Инструменты пользователя

Инструменты сайта


docker:osnovnye_kommandy:docker-compose

Docker-compose

Установка Docker Compose

Расчетное время чтения: 7 минут

Вы можете запустить Compose в macOS, Windows и 64-битной Linux.

Зависимости

Docker Compose использует Docker Engine для любой значимой работы, поэтому убедитесь, что Docker Engine установлен локально или удаленно, в зависимости от ваших настроек

Установка

Программа hello-world

 PS D:\docker> docker-compose up Pulling my-test (hello-world:)… latest: Pulling from library/hello-world 1b930d010525: Pull complete Creating docker_my-test_1 … done Attaching to docker_my-test_1 my-test_1 | my-test_1 | Hello from Docker! my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | my-test_1 | To generate this message, Docker took the following steps: my-test_1 | 1. The Docker client contacted the Docker daemon. my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. my-test_1 | (amd64) my-test_1 | 3. The Docker daemon created a new container from that image which runs the my-test_1 | executable that produces the output you are currently reading. my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it my-test_1 | to your terminal. my-test_1 | my-test_1 | To try something more ambitious, you can run an Ubuntu container with: my-test_1 | $ docker run -it ubuntu bash my-test_1 | my-test_1 | Share images, automate workflows, and more with a free Docker ID: my-test_1 | [[https://hub.docker.com/|https://hub.docker.com/]] my-test_1 | my-test_1 | For more examples and ideas, visit: my-test_1 | [[https://docs.docker.com/get-started/|https://docs.docker.com/get-started/]] my-test_1 | docker_my-test_1 exited with code 0 

Что делает Docker:

  1. Docker-клиент связался с Docker-демоном.
  2. Docker-демон извлек образ «hello-world» из Docker Hub.
  3. Из этого образа Docker-демон создал новый контейнер, который выполняет исполняемый файл, в результате чего получится результат выше
  4. Docker-демон направил этот результат Docker-клиенту, который отправил его на ваш терминал.
  5. Если процесс не закрывается самостоятельно, нажмите CTRL-C.

Этот простой тест демонстрирует одно из главных преимуществ Docker Compose — способность запускать и закрывать всю группу Docker-контейнеров одновременно.

docker-compose.yml
my-test:
  image: hello-world

docker-compose up -d (в фоновом режиме)

 PS D:\docker> docker-compose up -d Starting docker_my-test_1 … done 
..Ответ придет в фоновом режиме


docker-compose ps(показать свою группу Docker-контейнеров)

 PS D:\docker> docker-compose ps<code>
    Name         Command   State    Ports
</code>

——————————————- docker_my-test_1 /hello Exit 0 
Например, это указывает на то, что контейнер helloworld_my-test_1 остановлен:


docker-compose stop (остановить все работающие Docker-контейнеры)

 docker-compose stop 


Пересобрать контейнер

Если вы изменяли настройки в контейнерах которые предварительно нужно собирать, то такие контейнеры нужно пересобрать, команда для пересборки проекта на лету (минуя ввод команд остановки, пересборки и запуска) -

 docker-compose up -d –force-recreate –build 


Формирование docker-compose

version: '3.1'

services:

  db:
    build: ./db
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 2619192
    volumes:
       - ./databases:/var/lib/mysql
  adminer:
    build: ./adminer
    restart: always
    ports:
      - 6080:8080

 $ docker-compose build Building db Step 1/1 : FROM mysql —> 81f094a7e4cc Successfully built 81f094a7e4cc Successfully tagged docker_db:latest Building adminer Step 1/1 : FROM adminer —> e2d2c89239b2 Successfully built e2d2c89239b2 Successfully tagged docker_adminer:latest

$ docker-compose up -d Recreating docker_db_1 … done Recreating docker_adminer_1 … done 


Удалить сервис

 $ docker-compose rm db Going to remove docker_db_1 Are you sure? [yN] y Removing docker_db_1 … done 

Описание комманд

# Файл docker-compose должен начинаться с тега версии.
# Мы используем "3" так как это - самая свежая версия на момент написания этого кода.

version: "3"
 
# Следует учитывать, что docker-composes работает с сервисами.
# 1 сервис = 1 контейнер.
# Сервисом может быть клиент, сервер, сервер баз данных...
# Раздел, в котором будут описаны сервисы, начинается с 'services'.

services:

  # Как уже было сказано, мы собираемся создать клиентское и серверное приложения.
  # Это означает, что нам нужно два сервиса.
  # Первый сервис (контейнер): сервер.
  # Назвать его можно так, как нужно разработчику.
  # Понятное название сервиса помогает определить его роль.
  # Здесь мы, для именования соответствующего сервиса, используем ключевое слово 'server'.

  server:
 
    # Ключевое слово "build" позволяет задать
    # путь к файлу Dockerfile, который нужно использовать для создания образа,
    # который позволит запустить сервис.
    # Здесь 'server/' соответствует пути к папке сервера,
    # которая содержит соответствующий Dockerfile.

    build: server/
 
    # Команда, которую нужно запустить после создания образа.
    # Следующая команда означает запуск "python ./server.py".

    command: python ./server.py
 
    # Вспомните о том, что в качестве порта в 'server/server.py' указан порт 1234.
    # Если мы хотим обратиться к серверу с нашего компьютера (находясь за пределами контейнера),
    # мы должны организовать перенаправление этого порта на порт компьютера.
    # Сделать это нам поможет ключевое слово 'ports'.
    # При его использовании применяется следующая конструкция: [порт компьютера]:[порт контейнера]
    # В нашем случае нужно использовать порт компьютера 1234 и организовать его связь с портом
    # 1234 контейнера (так как именно на этот порт сервер 
    # ожидает поступления запросов).

    ports:
      - 1234:1234
 
  # Второй сервис (контейнер): клиент.
  # Этот сервис назван 'client'.

  client:
    # Здесь 'client/ соответствует пути к папке, которая содержит
    # файл Dockerfile для клиентской части системы.

    build: client/
 
    # Команда, которую нужно запустить после создания образа.
    # Следующая команда означает запуск "python ./client.py".
 
    command: python ./client.py
 
    # Ключевое слово 'network_mode' используется для описания типа сети.
    # Тут мы указываем то, что контейнер может обращаться к 'localhost' компьютера.

    network_mode: host
 
    # Ключевое слово 'depends_on' позволяет указывать, должен ли сервис,
    # прежде чем запуститься, ждать, когда будут готовы к работе другие сервисы.
    # Нам нужно, чтобы сервис 'client' дождался бы готовности к работе сервиса 'server'.
 
    depends_on:
      - server
docker/osnovnye_kommandy/docker-compose.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)