Начало работы с Docker
Ansible предлагает следующие модули для управления контейнерами Docker:
- docker_service
- Используйте ваши существующие файлы Docker compose для управления контейнерами на одном Docker демоне или в Swarm. Поддерживает версии compose 1 и 2.
- docker_container
- Управляет жизненным циклом контейнера, предоставляя возможность создавать, обновлять, останавливать, запускать и удалять контейнер.
- docker_image
- Предоставляет полный контроль над образами, включая: сборку, загрузку, отправку, тегирование и удаление.
- docker_image_facts
- Проверяет один или несколько образов в кэше образов хоста Docker, предоставляя информацию в качестве фактов для принятия решений или утверждений в книге сценариев.
- docker_login
- Авторизуется на Docker Hub или любом Docker реестре и обновляет конфигурационный файл Docker Engine, что, в свою очередь, обеспечивает отправку и загрузку образов в и из реестра без пароля.
- docker (динамический инвентарь)
- Динамически создает инвентарь всех доступных контейнеров из набора одного или нескольких хостов Docker.
Ansible 2.1.0 включает основные обновления модулей Docker, отмечая начало проекта по созданию полного и интегрированного набора инструментов для управления контейнерами. Помимо вышеперечисленных модулей, мы также работаем над следующим:
Продолжаете использовать Dockerfile для сборки образов? Обратите внимание на ansible-container, и начните сборку образов из ваших playbooks Ansible.
Используйте команду shipit в ansible-container для запуска вашего файла docker-compose на OpenShift. Перейдите от приложения на вашем ноутбуке к полностью масштабируемому приложению в облаке всего за несколько мгновений.
Планируется больше. Ознакомьтесь с последними идеями и концепциями в репозитории предложений Ansible.
Требования
Для использования модулей 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 обращается сценарий, можно определить с помощью переменных окружения или файла конфигурации.
Группы
Сценарий создаст следующие группы хостов:
- идентификатор контейнера
- имя контейнера
- краткий идентификатор контейнера
- имя_изображения (имя_изображения)
- docker_host
- запущенные
- остановленные
Примеры
Вы можете запустить сценарий интерактивно из командной строки или передать его в качестве инвентаризации 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, затем переменные окружения.
Переменные окружения
Для подключения к одному Docker API можно определить следующие переменные окружения для управления параметрами подключения. Это те же переменные окружения, которые используются модулями 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
- Если вы хотите получить инвентарь с нескольких хостов Docker, определите список хостов.
Для хоста по умолчанию и каждого хоста в списке хостов определите следующие атрибуты:
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.4/guide_docker.html