docker_compose – Управление многоконтейнерными Docker-приложениями с Docker Compose
Новое в версии 2.1.
Описание
- Использует Docker Compose для запуска, остановки и масштабирования служб.
- Работает с версиями compose 1 и 2.
- Конфигурация может быть прочитана из файла
docker-compose.ymlилиdocker-compose.yamlили встроена с помощью параметра definition. - См. примеры для получения более подробной информации.
- Поддерживает режим проверки.
- Этот модуль назывался
docker_serviceдо Ansible 2.8. Способ использования не изменился.
Псевдонимы: docker_service
Требования
Ниже приведены требования, необходимые на хосте, на котором выполняется этот модуль.
- Docker API >= 1.20
- Docker SDK для Python: Обратите внимание, что модуль Python docker-py был заменен на docker (см. здесь для получения подробностей). Для Python 2.6 необходимо использовать
docker-py. В противном случае рекомендуется установить модуль Pythondocker. Обратите внимание, что оба модуля не должны устанавливаться одновременно. Также обратите внимание, что при установке и последующем удалении одного из этих модулей другой может перестать работать, и потребуется его повторная установка. - Docker SDK для Python >= 1.8.0 (используйте docker-py для Python 2.6)
- PyYAML >= 3.11
- docker-compose >= 1.7.0
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии |
|---|---|---|
| api_version строка | Значение по умолчанию: "auto" | Версия Docker API, работающая на Docker Host. По умолчанию используется последняя версия API, поддерживаемая Docker SDK для Python и демоном docker. Если значение не указано в задаче, вместо него используется значение переменной окружения DOCKER_API_VERSION. Если переменная окружения не задана, используется значение по умолчанию.Псевдонимы: docker_api_version |
| build логическое значение |
| Используется с параметром state present для всегда сборки изображений перед запуском приложения.Аналогично выполнению docker-compose build с опцией pull.Изображения будут перестроены только если Docker обнаружит изменения в файле Dockerfile или содержимом каталога сборки. Используйте опцию nocache, чтобы проигнорировать кэш изображений при выполнении сборки. Если существующее изображение заменено, службы, использующие это изображение, будут пересозданы, если не указано recreate never. |
| ca_cert путь | Используйте сертификат CA при проверке сервера, предоставив путь к файлу сертификата CA. Если значение не указано в задаче, и переменная окружения DOCKER_CERT_PATH задана, используется файл ca.pem из каталога, указанного в переменной окружения DOCKER_CERT_PATH.Псевдонимы: tls_ca_cert, cacert_path | |
| client_cert путь | Путь к файлу сертификата TLS клиента. Если значение не указано в задаче, и переменная окружения DOCKER_CERT_PATH задана, используется файл cert.pem из каталога, указанного в переменной окружения DOCKER_CERT_PATH.Псевдонимы: tls_client_cert, cert_path | |
| client_key путь | Путь к файлу ключа TLS клиента. Если значение не указано в задаче, и переменная окружения DOCKER_CERT_PATH задана, используется файл key.pem из каталога, указанного в переменной окружения DOCKER_CERT_PATH.Псевдонимы: tls_client_key, key_path | |
| debug логическое значение |
| Режим отладки |
| definition словарь | Файл Compose, описывающий одну или несколько служб, сетей и томов. Взаимоисключительно с параметрами project_src и files. | |
| dependencies логическое значение |
| При state present указывает, включать или нет связанные службы. |
| docker_host строка | Значение по умолчанию: "unix://var/run/docker.sock" | URL или путь к Unix-сокету, используемый для подключения к Docker API. Для подключения к удалённому хосту, укажите строку TCP-соединения. Например, tcp://192.0.2.23:2376. Если для шифрования соединения используется TLS, модуль автоматически заменит tcp в URL подключения на https.Если значение не указано в задаче, вместо него используется значение переменной окружения DOCKER_HOST. Если переменная окружения не задана, используется значение по умолчанию.Псевдонимы: docker_url |
| files список | Список имён файлов Compose, относящихся к project_src. Переопределяет docker-compose.yml или docker-compose.yaml.Файлы загружаются и объединяются в указанном порядке. | |
| hostname_check логическое значение |
| Указывает, следует ли проверять имя хоста демона Docker на соответствие имени, указанному в сертификате клиента. |
| nocache логическое значение добавлен в 2.2 |
| Используется с опцией build, чтобы пропустить кэш во время процесса сборки изображения. |
| project_name строка | Укажите имя проекта. Если не указано, имя проекта берётся из имени базового каталога project_src. Требуется, когда указан параметр definition. | |
| project_src путь | Путь к каталогу, содержащему файл docker-compose.yml или docker-compose.yaml.Взаимоисключительно с параметром definition. Требуется, когда не указан параметр definition. | |
| pull логическое значение добавлен в 2.2 |
| Используется с параметром state present для всегда скачивания изображений перед запуском приложения.Аналогично выполнению docker-compose pull.Когда скачивается новое изображение, службы, использующие это изображение, будут пересозданы, если не указано recreate never. |
| recreate строка |
| По умолчанию контейнеры будут пересозданы, если их конфигурация отличается от определения службы. Установка на never игнорирует различия в конфигурации и оставляет существующие контейнеры неизменными.Установка на always принудительно пересоздаёт все существующие контейнеры. |
| remove_images строка |
| Используйте с state absent для удаления всех изображений или только локальных изображений. |
| remove_orphans логическое значение |
| Удалить контейнеры для служб, не определённых в файле Compose. |
| remove_volumes логическое значение |
| Используйте с параметром state absent для удаления томов данных. |
| restarted логическое значение |
| Используйте с параметром state present для перезапуска всех контейнеров, определённых в файле Compose.Если задан параметр services, будут перезапущены только указанные там контейнеры. |
| scale словарь | При state present масштабировать службы. Укажите словарь пар «ключ-значение», где ключ — имя службы, а значение — целое число, обозначающее количество контейнеров. | |
| services список | При state present выполнить docker-compose up соответственно docker-compose stop (с stopped) соответственно docker-compose restart (с restarted) на подмножестве служб.Если пусто, что является значением по умолчанию, операция будет выполнена для всех служб, определённых в файле Compose (или в строке definition). | |
| ssl_version строка | Укажите допустимое значение версии SSL. Значение по умолчанию определяется модулем ssl.py. Если значение не указано в задаче, вместо него используется значение переменной окружения DOCKER_SSL_VERSION. | |
| state строка |
| Желаемое состояние проекта. Указание present эквивалентно запуску docker-compose up соответственно docker-compose stop (с stopped) соответственно docker-compose restart (с restarted).Указание absent эквивалентно запуску docker-compose down. |
| остановлен boolean |
| Используйте с состоянием present для остановки всех контейнеров, определённых в файле Compose.Если определён параметр services, будут остановлены только перечисленные там контейнеры. |
| timeout integer | Значение по умолчанию: 10 | Время ожидания в секундах для завершения контейнера при подключении или когда контейнеры уже запущены. |
| tls boolean |
| Защитите соединение с API, используя TLS без проверки подлинности сервера Docker-хоста. Обратите внимание, что если validate_certs также установлено в yes, оно будет иметь приоритет.Если значение не указано в задаче, будет использовано значение переменной окружения DOCKER_TLS. Если переменная окружения не задана, будет использовано значение по умолчанию. |
| tls_hostname string | Значение по умолчанию: "localhost" | При проверке подлинности сервера Docker-хоста укажите ожидаемое имя сервера. Если значение не указано в задаче, будет использовано значение переменной окружения DOCKER_TLS_HOSTNAME. Если переменная окружения не задана, будет использовано значение по умолчанию. |
| validate_certs boolean |
| Защитите соединение с API, используя TLS и проверяя подлинность сервера Docker-хоста. Если значение не указано в задаче, будет использовано значение переменной окружения DOCKER_TLS_VERIFY. Если переменная окружения не задана, будет использовано значение по умолчанию.псевдонимы: tls_verify |
Примечания
Примечание
- Подключайтесь к демону Docker, предоставляя параметры с каждой задачей или определяя переменные окружения. Вы можете определить
DOCKER_HOST,DOCKER_TLS_HOSTNAME,DOCKER_API_VERSION,DOCKER_CERT_PATH,DOCKER_SSL_VERSION,DOCKER_TLS,DOCKER_TLS_VERIFYиDOCKER_TIMEOUT. Если вы используете docker machine, запустите предоставленный с продуктом скрипт для настройки среды. Он установит эти переменные за вас. Подробнее см. https://docker-py.readthedocs.io/en/stable/machine/. - При подключении к демону Docker с TLS, возможно, потребуется установить дополнительные пакеты Python. Для Docker SDK для Python версии 2.4 или выше это можно сделать, установив
docker[tls]с помощью pip. - Обратите внимание, что Docker SDK для Python позволяет указать путь к конфигурации Docker только для очень немногих функций. В общем случае, он будет использовать
$HOME/.docker/config.json, если переменная окруженияDOCKER_CONFIGне указана, и использовать$DOCKER_CONFIG/config.jsonв противном случае.
Примеры
# Examples use the django example at https://docs.docker.com/compose/django. Follow it to create the
# flask directory
- name: Run using a project directory
hosts: localhost
gather_facts: no
tasks:
- name: Tear down existing services
docker_compose:
project_src: flask
state: absent
- name: Create and start services
docker_compose:
project_src: flask
register: output
- debug:
var: output
- name: Run `docker-compose up` again
docker_compose:
project_src: flask
build: no
register: output
- debug:
var: output
- assert:
that: "not output.changed "
- name: Stop all services
docker_compose:
project_src: flask
build: no
stopped: yes
register: output
- debug:
var: output
- assert:
that:
- "not web.flask_web_1.state.running"
- "not db.flask_db_1.state.running"
- name: Restart services
docker_compose:
project_src: flask
build: no
restarted: yes
register: output
- debug:
var: output
- assert:
that:
- "web.flask_web_1.state.running"
- "db.flask_db_1.state.running"
- name: Scale the web service to 2
hosts: localhost
gather_facts: no
tasks:
- docker_compose:
project_src: flask
scale:
web: 2
register: output
- debug:
var: output
- name: Run with inline v2 compose
hosts: localhost
gather_facts: no
tasks:
- docker_compose:
project_src: flask
state: absent
- docker_compose:
project_name: flask
definition:
version: '2'
services:
db:
image: postgres
web:
build: "{{ playbook_dir }}/flask"
command: "python manage.py runserver 0.0.0.0:8000"
volumes:
- "{{ playbook_dir }}/flask:/code"
ports:
- "8000:8000"
depends_on:
- db
register: output
- debug:
var: output
- assert:
that:
- "web.flask_web_1.state.running"
- "db.flask_db_1.state.running"
- name: Run with inline v1 compose
hosts: localhost
gather_facts: no
tasks:
- docker_compose:
project_src: flask
state: absent
- docker_compose:
project_name: flask
definition:
db:
image: postgres
web:
build: "{{ playbook_dir }}/flask"
command: "python manage.py runserver 0.0.0.0:8000"
volumes:
- "{{ playbook_dir }}/flask:/code"
ports:
- "8000:8000"
links:
- db
register: output
- debug:
var: output
- assert:
that:
- "web.flask_web_1.state.running"
- "db.flask_db_1.state.running"
Значения возврата
Общие значения возврата описаны здесь, следующие — поля, уникальные для данного модуля:
| Ключ | Возвращаемое значение | Описание | |||
|---|---|---|---|---|---|
| действия сложный | при режиме проверки или отладка yes
| Предоставляет действия, которые должны быть выполнены для каждого сервиса, как определено в compose. | |||
| имя_сервиса сложный | всегда | Имя сервиса. | |||
| действие список | всегда | Описание действия, которое должно быть выполнено над контейнерами сервиса. | |||
| id строка | всегда | Длинный идентификатор контейнера | |||
| имя строка | всегда | Имя контейнера | |||
| корот_id строка | всегда | Короткий идентификатор контейнера | |||
| сформированный_образ сложный | при создании образа | Предоставляет детали изображения, когда для сервиса создается новый образ. | |||
| id строка | всегда | Хэш изображения | |||
| имя строка | всегда | Имя изображения | |||
| скачанный_образ сложный | при скачивании образа | Предоставляет детали изображения, когда для сервиса скачивается новый образ. | |||
| id строка | всегда | Хэш изображения | |||
| имя строка | всегда | Имя изображения | |||
| сервисы сложный | успешно | Словарь, сопоставляющий имя сервиса со словарем контейнеров. Обратите внимание, что факты являются частью зарегистрированных переменных с Ansible 2.8. По соображениям совместимости факты также доступны напрямую. Имя сервиса - это переменная, с помощью которой можно получить доступ к словарю контейнеров. Обратите внимание, что возвращаемые факты будут удалены в Ansible 2.12. | |||
| имя_контейнера сложный | успешно | Имя контейнера. Формат project_service_#. | |||
| cmd список | успешно | Одна или несколько команд для выполнения в контейнере. | |||
| образ строка | успешно | Имя образа, из которого был создан контейнер. | |||
| метки сложный | успешно | Метаданные, назначенные контейнеру. | |||
| сети сложный | успешно | Содержит словарь для каждой сети, членом которой является контейнер. | |||
| псевдонимы список | успешно | Псевдонимы, назначенные контейнеру сетью. | |||
| globalIPv6 строка | успешно | Адрес IPv6, назначенный контейнеру. | |||
| globalIPv6PrefixLen целое число | успешно | Длина подсети IPv6. | |||
| IPAddress строка | успешно | Адрес IP, назначенный контейнеру. | |||
| IPPrefixLen целое число | успешно | Количество битов, используемых подсетью. | |||
| связи список | успешно | Список имен контейнеров, с которыми связан этот контейнер. | |||
| macAddress строка | успешно | MAC-адрес, назначенный виртуальной сетевой карте. | |||
| состояние сложный | успешно | Информация о текущем состоянии контейнера. | |||
| работает логическое значение | успешно | Работает ли контейнер с запущенным процессом. | |||
| статус строка | успешно | Описание состояния запуска. | |||
Статус
- Этот модуль не гарантирует обратной совместимости интерфейса. [превью]
- Этот модуль поддерживается сообществом Ansible. [community]
Авторы
- Chris Houseknecht (@chouseknecht)
Подсказка
Если вы обнаружите какие-либо проблемы в этом документе, вы можете отредактировать этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.8/modules/docker_compose_module.html