Начало работы с Docker
Ansible предлагает следующие модули для управления контейнерами Docker:
- docker_service
- Используйте ваши существующие файлы Docker compose для управления контейнерами на одном демоне Docker или в Swarm. Поддерживает версии compose 1 и 2.
- docker_container
- Управляет жизненным циклом контейнера, предоставляя возможность создавать, обновлять, останавливать, запускать и уничтожать контейнер.
- docker_image
- Предоставляет полный контроль над образами, включая: сборку, загрузку, отправку, тегирование и удаление.
- docker_image_facts
- Просматривает один или несколько образов в кэше образов хоста Docker, предоставляя информацию в виде фактов для принятия решений или утверждений в playbook.
- docker_login
- Авторизуется на Docker Hub или любом реестре Docker и обновляет конфигурационный файл Docker Engine, что обеспечивает бесключевое отправление и загрузку образов в/из реестра.
- docker (динамический инвентарь)
- Динамически создаёт инвентарь всех доступных контейнеров из набора одного или нескольких хостов Docker.
Ansible 2.1.0 включает значительные обновления модулей Docker, отмечая начало проекта по созданию полной и интегрированной системы инструментов для управления контейнерами. В дополнение к вышеперечисленным модулям мы также работаем над следующими:
Вы всё ещё используете Dockerfile для сборки образов? Ознакомьтесь с ansible-container, чтобы начать сборку образов из ваших Ansible playbooks.
Используйте команду shipit в ansible-container для запуска вашего файла docker-compose в OpenShift. Перейдите от приложения на вашем ноутбуке к полностью масштабируемому приложению в облаке всего за несколько мгновений.
Планируется ещё больше. Смотрите последние идеи и мысли в репозитории предложений Ansible по Ansible proposal repo.
Требования
Использование модулей docker требует наличия docker-py на хосте, на котором работает Ansible. Вам потребуется версия >= 1.7.0.
$ pip install 'docker-py>=1.7.0'
Модуль docker_service также требует docker-compose
$ pip install 'docker-compose>=1.7.0'
Подключение к API Docker
Вы можете подключиться к локальному или удалённому API, используя параметры, переданные каждой задаче, или задавая переменные окружения. Порядок приоритета — параметры командной строки, а затем переменные окружения. Если ни параметр командной строки, ни переменная окружения не найдены, будет использовано значение по умолчанию. Значения по умолчанию указаны в разделе Параметры
Параметры
Управляйте подключением модулей к API Docker, передавая следующие параметры:
- docker_host
- URL или путь к сокету Unix, используемый для подключения к API Docker. По умолчанию
unix://var/run/docker.sock. Для подключения к удалённому хосту укажите строку TCP-соединения. Например:tcp://192.0.2.23:2376. Если для шифрования соединения с API используется TLS, модуль автоматически заменит «tcp» в URL подключения на «https». - api_version
- Версия API Docker, работающая на хосте Docker. По умолчанию — последняя версия API, поддерживаемая docker-py.
- timeout
- Максимальное время ожидания ответа от API в секундах. По умолчанию 60 секунд.
- tls
- Защитите соединение с API с помощью TLS, не проверяя подлинность сервера хоста Docker. По умолчанию False.
- tls_verify
- Защитите соединение с API с помощью TLS и проверьте подлинность сервера хоста Docker. Значение по умолчанию False.
- cacert_path
- Используйте сертификат CA при проверке сервера, указав путь к файлу сертификата CA.
- cert_path
- Путь к файлу TLS-сертификата клиента.
- key_path
- Путь к файлу TLS-ключа клиента.
- tls_hostname
- При проверке подлинности сервера хоста Docker укажите ожидаемое имя сервера. По умолчанию «localhost».
- ssl_version
- Укажите допустимое значение версии SSL. Значение по умолчанию определяется docker-py, на момент написания документации — 1.0.
Переменные окружения
Управляйте подключением модулей к API Docker, задавая следующие переменные в среде хоста, на котором работает Ansible:
- DOCKER_HOST
- URL или путь к сокету Unix, используемый для подключения к API Docker.
- DOCKER_API_VERSION
- Версия API Docker, работающая на хосте Docker. По умолчанию — последняя версия API, поддерживаемая docker-py.
- DOCKER_TIMEOUT
- Максимальное время ожидания ответа от API в секундах.
- DOCKER_CERT_PATH
- Путь к каталогу, содержащему клиентский сертификат, закрытый ключ и сертификат CA.
- DOCKER_SSL_VERSION
- Укажите допустимое значение версии SSL.
- DOCKER_TLS
- Защитите соединение с API с помощью TLS, не проверяя подлинность сервера хоста Docker.
- DOCKER_TLS_VERIFY
- Защитите соединение с API с помощью TLS и проверьте подлинность сервера хоста Docker.
Сценарий динамического инвентаря
Сценарий инвентаря генерирует динамический инвентарь, отправляя запросы к API одному или нескольким Docker API. Он динамический, поскольку инвентарь генерируется во время выполнения, а не считывается из статического файла. Сценарий генерирует инвентарь, подключаясь к одному или нескольким Docker API и анализируя найденные контейнеры на каждом API. К каким API сценарий обращается, можно определить с помощью переменных окружения или файла конфигурации.
Группы
Сценарий создаст следующие группы хостов:
- идентификатор контейнера
- имя контейнера
- короткая форма идентификатора контейнера
- image_name (image_<имя_изображения>)
- docker_host
- running
- stopped
Примеры
Вы можете запустить сценарий интерактивно из командной строки или передать его в качестве инвентаря в playbook. Вот несколько примеров, чтобы начать работу:
# Connect to the Docker API on localhost port 4243 and format the JSON output
DOCKER_HOST=tcp://localhost:4243 ./docker.py --pretty
# Any container's ssh port exposed on 0.0.0.0 will be mapped to
# another IP address (where Ansible will attempt to connect via SSH)
DOCKER_DEFAULT_IP=192.0.2.5 ./docker.py --pretty
# Run as input to a playbook:
ansible-playbook -i ~/projects/ansible/contrib/inventory/docker.py docker_inventory_test.yml
# Simple playbook to invoke with the above example:
- name: Test docker_inventory
hosts: all
connection: local
gather_facts: no
tasks:
- debug: msg="Container - {{ inventory_hostname }}"
Конфигурация
Вы можете контролировать поведение сценария инвентаря, задавая переменные окружения или создавая файл docker.yml (пример предоставлен в ansible/contrib/inventory). Порядок приоритета — файл docker.yml, а затем переменные окружения.
Переменные окружения
Для подключения к одному API Docker можно задать следующие переменные окружения для управления параметрами подключения. Это те же переменные окружения, что и для модулей Docker.
- DOCKER_HOST
- URL или путь к сокету Unix, используемый для подключения к API Docker. По умолчанию unix://var/run/docker.sock.
- DOCKER_API_VERSION:
- Версия API Docker, работающая на хосте Docker. По умолчанию — последняя версия API, поддерживаемая docker-py.
- DOCKER_TIMEOUT:
- Максимальное время ожидания ответа от API в секундах. По умолчанию 60 секунд.
- DOCKER_TLS:
- Защитите соединение с API с помощью TLS, не проверяя подлинность сервера хоста Docker. По умолчанию False.
- DOCKER_TLS_VERIFY:
- Защитите соединение с API с помощью TLS и проверьте подлинность сервера хоста Docker. Значение по умолчанию False
- DOCKER_TLS_HOSTNAME:
- При проверке подлинности сервера хоста Docker укажите ожидаемое имя сервера. По умолчанию localhost.
- DOCKER_CERT_PATH:
- Путь к каталогу, содержащему клиентский сертификат, закрытый ключ и сертификат CA.
- DOCKER_SSL_VERSION:
- Укажите допустимое значение версии SSL. Значение по умолчанию определяется docker-py, на момент написания документации — 1.0
В дополнение к переменным подключения есть несколько переменных, используемых для управления выполнением и выводом сценария:
- DOCKER_CONFIG_FILE
- Путь к файлу конфигурации. По умолчанию ./docker.yml.
- DOCKER_PRIVATE_SSH_PORT:
- Приватный порт (порт контейнера), на котором SSH слушает подключения. По умолчанию 22.
- DOCKER_DEFAULT_IP:
- IP-адрес, назначаемый ansible_host, когда SSH-порт контейнера сопоставлен с интерфейсом «0.0.0.0».
Файл конфигурации
Использование файла конфигурации позволяет определить набор Docker API, из которого строится инвентарь.
Имя файла по умолчанию получено из имени сценария инвентаря. По умолчанию сценарий ищет имя файла со сценарием (например, docker) с расширением «.yml».
Вы также можете переопределить имя сценария по умолчанию, задав DOCKER_CONFIG_FILE в переменных окружения.
Вот что вы можете определить в docker_inventory.yml:
- defaults
- Определяет подключение по умолчанию. Значения по умолчанию берутся отсюда и применяются ко всем значениям, не указанным для хоста, определённого в списке hosts.
- hosts
- Если вы хотите получить инвентарь от более чем одного хоста Docker, определите список hosts.
Для хоста по умолчанию и каждого хоста в списке hosts определите следующие атрибуты:
host:
description: The URL or Unix socket path used to connect to the Docker API.
required: yes
tls:
description: Connect using TLS without verifying the authenticity of the Docker host server.
default: false
required: false
tls_verify:
description: Connect using TLS without verifying the authenticity of the Docker host server.
default: false
required: false
cert_path:
description: Path to the client's TLS certificate file.
default: null
required: false
cacert_path:
description: Use a CA certificate when performing server verification by providing the path to a CA certificate file.
default: null
required: false
key_path:
description: Path to the client's TLS key file.
default: null
required: false
version:
description: The Docker API version.
required: false
default: will be supplied by the docker-py module.
timeout:
description: The amount of time in seconds to wait on an API response.
required: false
default: 60
default_ip:
description: The IP address to assign to ansible_host when the container's SSH port is mapped to interface
'0.0.0.0'.
required: false
default: 127.0.0.1
private_ssh_port:
description: The port containers use for SSH
required: false
default: 22
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.5/scenario_guides/guide_docker.html