Как запустить docker compose
Перейти к содержимому

Как запустить docker compose

  • автор:

Docker Compose — Docker: Основы

Docker Compose позволяет управлять набором контейнеров, каждый из которых представляет собой один сервис проекта. Управление включает в себя сборку, запуск с учетом зависимостей и конфигурацию. Конфигурация Docker Compose описывается в файле docker-compose.yml, лежащем в корне проекта.

Пример файла docker-compose.yml

# Версия схемы, которую мы используем. # Зависит от установленной версии docker # https://docs.docker.com/compose/compose-file/ version: "3" # Определяем список сервисов — services # Эти сервисы будут частью нашего приложения services: app: # Имя сервиса build: # Контекст для сборки образа, # в данном случае, текущая директория context: . # Имя Docker-файла из которого будет собран образ dockerfile: Dockerfile # Команда, которая будет выполнена после старта сервиса command: make start ports: # Проброс портов - "3000:8000" # Перечисляем тома (volumes) # Они будут подключены к файловой системе сервиса # Например, все что находится в . мы увидим в директории /app volumes: # Текущая директория пробрасывается в директорию /app внутри контейнера # Путь внутри контейнера (после двоеточия) обязательно должен быть абсолютным - ".:/app" - "/tmp:/tmp" # Сервис будет запущен, только после старта db depends_on: - db db: # Имя образа. Здесь мы используем базу данных Postgres image: postgres:latest environment: # А так задаются переменные окружения POSTGRES_PASSWORD: password volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata: 

Команды для работы с Docker Compose

# Собирает сервисы, описанные в конфигурационных файлах docker compose build # Запускает собранные сервисы docker compose up # Запуск контейнеров на фоне с флагом -d docker compose up -d # Если какой-то из сервисов завершит работу, # то остальные будут остановлены автоматически docker compose up --abort-on-container-exit # Запустит сервис application и выполнит внутри команду make install docker compose run application make install # А так мы можем запустить сервис и подключиться к нему с помощью bash docker compose run application bash # С флагом --rm запускаемые контейнеры будут автоматически удаляться docker compose run --rm application bash # Останавливает и удаляет все сервисы, # которые были запущены с помощью up docker compose down # Останавливает, но не удаляет сервисы, запущенные с помощью up # Их можно запустить снова с помощью docker-compose start docker compose stop 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Как запустить docker-compose.yml

Всем привет. Есть vagrant, в котором установлен docker и docker-composer. Есть файл docker-compose.yml Как его запустить?

Отслеживать
задан 9 фев 2017 в 14:47
599 1 1 золотой знак 3 3 серебряных знака 18 18 бронзовых знаков
зайти в папку с docker-compose.yml и написать docker-compose up . А что делать с vagrant — не знаю
9 фев 2017 в 14:50
docker-compose.yml находится внутри vagrant box или во вне?
9 фев 2017 в 16:39

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Нужно набрать команду docker-compose up

Отслеживать
ответ дан 9 фев 2017 в 14:55
599 1 1 золотой знак 3 3 серебряных знака 18 18 бронзовых знаков

зачем используете вагрант? в линуксе всё нативно работает, а для винды и мака есть Kitematic (работает через виртуалбокс) и офф сборка через Hyper-V виртуализацию https://www.docker.com/community-edition

в хостовой машине можно будет всё запускать не заморачиваясь

# запускаем все контейнеры, видим stdout всех контейнеров, а для остановки используем Ctrl+C docker-compose up # запуск в режиме демона docker-compose up -d # для остановки используем docker-compose stop # для остановки с удалением контейнеров docker-compose down 

Руководство по Docker Compose для начинающих

Автор статьи, перевод которой мы сегодня публикуем, говорит, что она предназначена для тех разработчиков, которые хотят изучить Docker Compose и идут к тому, чтобы создать своё первое клиент-серверное приложение с использованием Docker. Предполагается, что читатель этого материала знаком с основами Docker. Если это не так — можете взглянуть на эту серию материалов, на эту публикацию, где основы Docker рассмотрены вместе с основами Kubernetes, и на эту статью для начинающих.

image

Что такое Docker Compose?

Docker Compose — это инструментальное средство, входящее в состав Docker. Оно предназначено для решения задач, связанных с развёртыванием проектов.

Изучая основы Docker, вы могли столкнуться с созданием простейших приложений, работающих автономно, не зависящих, например, от внешних источников данных или от неких сервисов. На практике же подобные приложения — редкость. Реальные проекты обычно включают в себя целый набор совместно работающих приложений.

Как узнать, нужно ли вам, при развёртывании некоего проекта, воспользоваться Docker Compose? На самом деле — очень просто. Если для обеспечения функционирования этого проекта используется несколько сервисов, то Docker Compose может вам пригодиться. Например, в ситуации, когда создают веб-сайт, которому, для выполнения аутентификации пользователей, нужно подключиться к базе данных. Подобный проект может состоять из двух сервисов — того, что обеспечивает работу сайта, и того, который отвечает за поддержку базы данных.

Технология Docker Compose, если описывать её упрощённо, позволяет, с помощью одной команды, запускать множество сервисов.

Разница между Docker и Docker Compose

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

Docker Compose используется для одновременного управления несколькими контейнерами, входящими в состав приложения. Этот инструмент предлагает те же возможности, что и Docker, но позволяет работать с более сложными приложениями.

Docker (отдельный контейнер) и Docker Compose (несколько контейнеров)

Типичный сценарий использования Docker Compose

Docker Compose — это, в умелых руках, весьма мощный инструмент, позволяющий очень быстро развёртывать приложения, отличающиеся сложной архитектурой. Сейчас мы рассмотрим пример практического использования Docker Compose, разбор которого позволит вам оценить те преимущества, которые даст вам использование Docker Compose.

Представьте себе, что вы являетесь разработчиком некоего веб-проекта. В этот проект входит два веб-сайта. Первый позволяет людям, занимающимся бизнесом, создавать, всего в несколько щелчков мышью, интернет-магазины. Второй нацелен на поддержку клиентов. Эти два сайта взаимодействуют с одной и той же базой данных.

Ваш проект становится всё популярнее, и оказывается, что мощности сервера, на котором он работает, уже недостаточно. В результате вы решаете перевести весь проект на другую машину.

К сожалению, нечто вроде Docker Compose вы не использовали. Поэтому вам придётся переносить и перенастраивать сервисы по одному, надеясь на то, что вы, в процессе этой работы, ничего не забудете.

Если же вы используете Docker Compose, то перенос вашего проекта на новый сервер — это вопрос, который решается выполнением нескольких команд. Для того чтобы завершить перенос проекта на новое место, вам нужно лишь выполнить кое-какие настройки и загрузить на новый сервер резервную копию базы данных.

Разработка клиент-серверного приложения с использованием Docker Compose

Теперь, когда вы знаете о том, для чего мы собираемся использовать Docker Compose, пришло время создать ваше первое клиент-серверное приложение с использованием этого инструмента. А именно, речь идёт о разработке небольшого веб-сайта (сервера) на Python, который умеет выдавать файл с фрагментом текста. Этот файл у сервера запрашивает программа (клиент), тоже написанная на Python. После получения файла с сервера программа выводит текст, хранящийся в нём, на экран.

Обратите внимание на то, что мы рассчитываем на то, что вы владеете основами Docker, и на то, что у вас уже установлена платформа Docker.

Приступим к работе над проектом.

▍1. Создание проекта

Для того чтобы построить ваше первое клиент-серверное приложение, предлагаю начать с создания папки проекта. Она должна содержать следующие файлы и папки:

  • Файл docker-compose.yml . Это файл Docker Compose, который будет содержать инструкции, необходимые для запуска и настройки сервисов.
  • Папка server . Она будет содержать файлы, необходимые для обеспечения работы сервера.
  • Папка client . Здесь будут находиться файлы клиентского приложения.
. ├── client/ ├── docker-compose.yml └── server/ 2 directories, 1 file

▍2. Создание сервера

Тут мы, в процессе создания сервера, затронем некоторые базовые вещи, касающиеся Docker.

2a. Создание файлов

Перейдите в папку server и создайте в ней следующие файлы:

  • Файл server.py . В нём будет находиться код сервера.
  • Файл index.html . В этом файле будет находиться фрагмент текста, который должно вывести клиентское приложение.
  • Файл Dockerfile . Это — файл Docker, который будет содержать инструкции, необходимые для создания окружения сервера.
. ├── Dockerfile ├── index.html └── server.py 0 directories, 3 files
2b. Редактирование Python-файла.

Добавим в файл server.py следующий код:

#!/usr/bin/env python3 # Импорт системных библиотек python. # Эти библиотеки будут использоваться для создания веб-сервера. # Вам не нужно устанавливать что-то особенное, эти библиотеки устанавливаются вместе с Python. import http.server import socketserver # Эта переменная нужна для обработки запросов клиента к серверу. handler = http.server.SimpleHTTPRequestHandler # Тут мы указываем, что сервер мы хотим запустить на порте 1234. # Постарайтесь запомнить эти сведения, так как они нам очень пригодятся в дальнейшем, при работе с docker-compose. with socketserver.TCPServer(("", 1234), handler) as httpd: # Благодаря этой команде сервер будет выполняться постоянно, ожидая запросов от клиента. httpd.serve_forever()

Этот код позволяет создать простой веб-сервер. Он будет отдавать клиентам файл index.html , содержимое которого позже будет выводиться на веб-странице.

2c. Редактирование HTML-файла

В файл index.html добавим следующий текст:

Docker-Compose is magic!

Этот текст будет передаваться клиенту.

2d. Редактирование файла Dockerfile

Сейчас мы создадим простой файл Dockerfile , который будет отвечать за организацию среды выполнения для Python-сервера. В качестве основы создаваемого образа воспользуемся официальным образом, предназначенным для выполнения программ, написанных на Python. Вот содержимое Dockerfile:

# На всякий случай напоминаю, что Dockerfile всегда должен начинаться с импорта базового образа. # Для этого используется ключевое слово 'FROM'. # Здесь нам нужно импортировать образ python (с DockerHub). # В результате мы, в качестве имени образа, указываем 'python', а в качестве версии - 'latest'. FROM python:latest # Для того чтобы запустить в контейнере код, написанный на Python, нам нужно импортировать файлы 'server.py' и 'index.html'. # Для того чтобы это сделать, мы используем ключевое слово 'ADD'. # Первый параметр, 'server.py', представляет собой имя файла, хранящегося на компьютере. # Второй параметр, '/server/', это путь, по которому нужно разместить указанный файл в образе. # Здесь мы помещаем файл в папку образа '/server/'. ADD server.py /server/ ADD index.html /server/ # Здесь мы воспользуемся командой 'WORKDIR', возможно, новой для вас. # Она позволяет изменить рабочую директорию образа. # В качестве такой директории, в которой будут выполняться все команды, мы устанавливаем '/server/'. WORKDIR /server/

Теперь займёмся работой над клиентом.

▍3. Создание клиента

Создавая клиентскую часть нашего проекта, мы попутно вспомним некоторые основы Docker.

3a. Создание файлов

Перейдите в папку вашего проекта client и создайте в ней следующие файлы:

  • Файл client.py . Тут будет находиться код клиента.
  • Файл Dockerfile . Этот файл играет ту же роль, что и аналогичный файл в папке сервера. А именно, он содержит инструкцию, описывающую создание среды для выполнения клиентского кода.
. ├── client.py └── Dockerfile 0 directories, 2 files
3b. Редактирование Python-файла

Добавим в файл client.py следующий код:

#!/usr/bin/env python3 # Импортируем системную библиотеку Python. # Она используется для загрузки файла 'index.html' с сервера. # Ничего особенного устанавливать не нужно, эта библиотека устанавливается вместе с Python. import urllib.request # Эта переменная содержит запрос к 'http://localhost:1234/'. # Возможно, сейчас вы задаётесь вопросом о том, что такое 'http://localhost:1234'. # localhost указывает на то, что программа работает с локальным сервером. # 1234 - это номер порта, который вам предлагалось запомнить при настройке серверного кода. fp = urllib.request.urlopen("http://localhost:1234/") # 'encodedContent' соответствует закодированному ответу сервера ('index.html'). # 'decodedContent' соответствует раскодированному ответу сервера (тут будет то, что мы хотим вывести на экран). encodedContent = fp.read() decodedContent = encodedContent.decode("utf8") # Выводим содержимое файла, полученного с сервера ('index.html'). print(decodedContent) # Закрываем соединение с сервером. fp.close()

Благодаря этому коду клиентское приложение может загрузить данные с сервера и вывести их на экран.

3c. Редактирование файла Dockerfile

Как и в случае с сервером, мы создаём для клиента простой Dockerfile , ответственный за формирование среды, в которой будет работать клиентское Python-приложение. Вот код клиентского Dockerfile :

# То же самое, что и в серверном Dockerfile. FROM python:latest # Импортируем 'client.py' в папку '/client/'. ADD client.py /client/ # Устанавливаем в качестве рабочей директории '/client/'. WORKDIR /client/

▍4. Docker Compose

Как вы могли заметить, мы создали два разных проекта: сервер и клиент. У каждого из них имеется собственный файл Dockerfile . До сих пор всё происходящее не выходит за рамки основ работы с Docker. Теперь же мы приступаем к работе с Docker Compose. Для этого обратимся к файлу docker-compose.yml , расположенному в корневой папке проекта.

Обратите внимание на то, что тут мы не стремимся рассмотреть абсолютно все команды, которые можно использовать в docker-compose.yml . Наша главная цель — разобрать практический пример, дающий вам базовые знания по Docker Compose.

Вот код, который нужно поместить в файл docker-compose.yml :

# Файл 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

▍5. Сборка проекта

После того, как в docker-compose.yml внесены все необходимые инструкции, проект нужно собрать. Этот шаг нашей работы напоминает использование команды docker build , но соответствующая команда имеет отношение к нескольким сервисам:

$ docker-compose build

▍6. Запуск проекта

Теперь, когда проект собран, пришло время его запустить. Этот шаг нашей работы соответствует шагу, на котором, при работе с отдельными контейнерами, выполняется команда docker run :

$ docker-compose up

После выполнения этой команды в терминале должен появиться текст, загруженный клиентом с сервера: Docker-Compose is magic! .

Как уже было сказано, сервер использует порт компьютера 1234 для обслуживания запросов клиента. Поэтому, если перейти в браузере по адресу http://localhost:1234/, в нём будет отображена страница с текстом Docker-Compose is magic! .

Полезные команды

Рассмотрим некоторые команды, которые могут вам пригодиться при работе с Docker Compose.

Эта команда позволяет останавливать и удалять контейнеры и другие ресурсы, созданные командой docker-compose up :

$ docker-compose down

Эта команда выводит журналы сервисов:

$ docker-compose logs -f [service name]

Например, в нашем проекте её можно использовать в таком виде: $ docker-compose logs -f [service name] .

С помощью такой команды можно вывести список контейнеров:

$ docker-compose ps

Данная команда позволяет выполнить команду в выполняющемся контейнере:

$ docker-compose exec [service name] [command]

Например, она может выглядеть так: docker-compose exec server ls .

Такая команда позволяет вывести список образов:

$ docker-compose images

Итоги

Мы рассмотрели основы работы с технологией Docker Compose, знание которых позволит вам пользоваться этой технологией и, при желании, приступить к её более глубокому изучению. Вот репозиторий с кодом проекта, который мы здесь рассматривали.

Уважаемые читатели! Пользуетесь ли вы Docker Compose в своих проектах?

  • Блог компании RUVDS.com
  • Веб-разработка
  • Виртуализация

Шпаргалка по работе с docker-compose

Обновлено

Обновлено: 22.10.2023 Опубликовано: 27.04.2022

В данной инструкции мы приведем различные примеры по работе с docker-compose без подробного описания принципа работы. Данный материал можно использовать в качестве шпаргалки.

Базовый шаблон

В первую очередь, предлагаю заготовку для docker-compose файла, на основе которой можно начинать писать свой сценарий для docker. Создаем файл для работы с контейнерами:

vi docker-compose.yml

:
image:
container_name:
hostname:
restart: unless-stopped
environment:
TZ: «Europe/Moscow»
networks:
— default

networks:
default:
ipam:
driver: default
config:
— subnet: 172.28.0.0/16

  • services — основной раздел, где мы будем создавать и описывать наши сервисы (контейнеры docker). В данном примере сервис один. Для добавления еще одного добавляем еще строчки .
    • название для нашего сервиса, на основе которого будет создан контейнер.
    • image — имя образа, который будет использоваться для создания контейнера.
    • container_name — имя, которое получен созданный контейнер.
    • hostname — имя хоста внутри контейнера.
    • restart — поведения контейнера при падении. В нашем примере мы указываем на необходимость автоматической перезагрузки, за исключением случаев, когда мы его сами остановили командой stop.
    • environment — задаем переменные окружения. В нашем примере только одна, которая указывает на часовой пояс (московское время).
    • networks — привязываем наш контейнер к сети. Опционально, но лучше определять самому подсеть. Это упрощает настройку некоторых сервисов, например, мы можем ограничить доступ для определенных подсетей и не желательно, чтобы подсети задавалась случайным образом.

    Сервисы

    В данном разделе рассмотрим примеры настроек сервисов (контейнеров). Синтаксис:

    1. Создание контейнера из готового образа. Образ указывается с помощью директивы image:

    * в данном примере будет взят образ nginx для поднятия контейнера.

    2. Сборка контейнера из Dockerfile. Для этого используем опцию build:

    build:
    context: ./web-server/
    args:
    buildno: 22042001

    • build — указание на необходимость сборки из Dockerfile. Пример создания последнего читайте в инструкции Создание собственного образа Docker.
    • context — путь, где нужно искать Dockerfile относительно места, где находится docker-compose файл.
    • buildno — номер для сборки.

    3. Проброс папок (volumes). Настраивается с помощью опции volumes:

    * в нашем примере мы смонтируем локальный каталог /data/mysql на хосте внутрь контейнера в качестве каталога /var/lib/mysql.

    Также мы можем смонтировать папку только на чтение, например:

    4. Работа с портами. Рассмотрим несколько вариантов работы с портами.

    а) Ports (внешняя публикация). С помощью данной опции мы можем указывать, на каких портах должен слушать контейнер и на какие порты должны пробрасываться запросы:

    * в данном примере наш контейнер будет слушать запросы на порту 8080 и передавать их внутрь контейнера на порт 80.

    Или можно прописать так:

    * в этом примере будет настроен проброс на порт 80. Внешний порт будет выбран docker автоматически.

    При необходимости прикрепить проброс с конкретному IP-адресу хостовой машины, используем нотацию:

    * хост docker будет слушать на порту 80 на адресе 192.168.15.15.

    б) Expose (внутрення публикация). Данная опция задает порт, на котором должно слушать приложение внутри контейнера, но проброса с внешнего адреса не будет — отправить запрос по сети на данный порт можно с другого контейнера:

    5. Переменные окружения. В нашей универсальной заготовке мы уже использовали одну системную переменную:

    environment:
    TZ: «Europe/Moscow»

    Чтобы передать несколько переменных, просто их перечисляем:

    environment:
    TZ: «Europe/Moscow»
    MYSQL_ROOT_PASSWORD=password

    Для каждого приложения есть свой набор системных переменных, которые оно понимает и интерпретирует. Например, MYSQL_ROOT_PASSWORD поймет СУБД и установит значение в качестве пароля для пользователя root.

    Также системные переменные можно передать не в сценарии docker-compose, а в файле .env — просто создадим этот файл в одной директории с файлом docker-compose.yml:

    6. Зависимости для контейнеров. Мы можем указать с помощью опции depends_on, от какого контейнера зависит сервис:

    * в конкретном примере, контейнер не запустится, пока не поднимется db.

    7. Переопределить команду. С помощью директивы command мы можем переопределить команду для запуска, например:

    command: [ «redis-server», «/usr/local/etc/redis/redis.conf» ]

    * в данном примере мы запустим redis-server с альтернативным конфигурационным файлом.

    Или можно написать так:

    command:
    — redis-server
    — /usr/local/etc/redis/redis.conf

    Но если нам понадобиться запустить несколько последовательных команд, рабочий вариант с использованием bash:

    command: bash -c «yarn install && yarn start»

    или если в контейнере нет bash:

    command: sh -c «yarn install && yarn start»

    8. Метки. С помощью опции labels мы можем указывать дополнительную информацию для ориентирования или фильтров при поиске контейнеров:

    * данные могут быть произвольные. Обратите внимание, что в качестве значений мы указали переменные, которые можно просто передать из системного окружения.

    9. Пользователь. Директива user позволяет задать конкретного пользователя, от которого будет запускаться и работать контейнер:

    10. Домашняя директория. Определяет положение по умолчанию, откуда будут выполняться команды.

    Healthcheck

    Данная директива, хоть и является частью сервиса, мы рассмотрим ее в отдельном разделе. Синтаксис:

    • test — наш скрипт, который должен вернуть 0, если все хорошо, или 1 — если все плохо.
    • interval — как часто запускать проверку.
    • timeout — как долго нужно ждать ответа.
    • retries — сколько раз тест должен вернуть отрицательный результат, чтобы контейнер перешел в состояние «unhealthy».

    1. Проверка работы веб-портала. Рассмотрим пример, когда сайт при правильной работы должен возвращать слово works:

    healthcheck:
    test: curl -s http://127.0.0.1 | grep works
    interval: 30s
    timeout: 2s
    retries: 10

    * в данном примере мы запросим у нашего сервера страницу по http и выведем строку, в которой есть слово works. Если такой строки не найдется, команда вернет код 1.

    2. Проверка СУБД mysql. Проверку можно выполнить с помощью запроса SELECT 1. В композ-файле это выглядит так:

    healthcheck:
    test: [«CMD», «mysql» ,»-h», «mysql», «-P», «3306», «-u», «root», «-e», «SELECT 1», «cache»]
    interval: 30s
    timeout: 2s
    retries: 10

    Networks

    Отдельно рассмотрим варианты сетевых настроек.

    Список сетей, созданных для docker можно увидеть командой:

    docker network ls

    Получить подробную информацию по сети можно командой:

    docker network inspect

    1. Указать определенную подсеть. Задается с помощью опции subnet в отдельной секции networks. В последней мы создаем конфигурацию для определенной сети (в данном примере, default). Для конкретного сервиса мы также задаем привязку к созданной сети default в подразделе networks:

    networks:
    default:
    ipam:
    driver: default
    config:
    — subnet: 172.28.0.0/16

    * где 172.28.0.0/16 — подсеть, в которой будут работать все контейнеры, которые привязаны к созданной сети default.

    2. Алиасы. Данная настройка позволит видеть контейнеры по альтернативным именам (по умолчанию, они обнаруживаются по имени контейнера). Настройка указывается в подразделе networks сервиса:

    * в данном примере наш контейнер будет также резолвиться по имени .

    3. Внешняя сеть. Если необходимо, чтобы наши контейнеры могли видеть по сети другие контейнеры, создаем сеть external:

    networks:
    dnet:
    external:
    name: dnet

    4. Статические IP-адреса. По docker идеологии все контейнеры должны получать IP-адреса автоматически. Но все же, метод для указания контейнерам статических адресов предусмотрен. Рассмотрим на примере:

    networks:
    vpcbr:
    driver: bridge
    ipam:
    config:
    — subnet: 172.28.0.0/24
    gateway: 172.28.0.1

    * в нашем примере будет создана подсеть 172.28.0.0/24, а контейнеру будет присвоен адрес 172.28.0.2.

    5. Добавить сопоставление имя — IP-адрес (на подобие локального файла hosts). С помощью данной настройки мы можем указать отдельно для контейнеров, в какой IP-адрес должен разрешаться определенный хост. Задается с помощью директивы extra_hosts:

    * в данном примере имени foo будет соответствовать адрес 1.2.3.4, а bar — 5.6.7.8.

    Запуск docker-compose

    Рассмотрим различные примеры выполнения команды docker-compose.

    1. Посмотреть версию:

    2. Создание и запуск контейнеров:

    docker-compose up -d

    * напомним, что в текущем каталоге находится созданный файл с названием docker-compose.yml.

    С указанием альтернатнативного файла docker-compose.

    docker-compose -f /foo/bar/other-docker-compose.yml up -d

    3. Перечитать файл docker-compose:

    docker-compose up -d

    * на самом деле, команда такая же, как для запуска. Система если определит, что есть изменения, пересоздаст контейнер.

    Перечитать и пересобрать контейнеры, если есть инструкция build:

    docker-compose up -d —build

    4. Остановить контейнеры.

    Только остановить контейнеры:

    Остановить контейнеры с удаление данных (в volumes):

    docker-compose down —volumes

    Возможные ошибки

    Network _default Error

    При попытке запустить compose получаем ошибку:

    Network _default Error
    failed to create network _default: Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

    Причина: при запуске композа автоматически создается сеть с префиксом _default. Данная ошибка означает, что такую сеть не удалось создать, так как существует лимит на пулы IP-адресов и данный лимит был исчерпан.

    Решение: быстрее всего выполнить чистку docker от неиспользуемых сетей. Для этого выполняем команду:

    docker network prune

    Читайте также

    Другие инструкции, связанные с Docker:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *