docker

Ansible Роль: docker

Эта роль полностью настраивает и устанавливает dockerd.


Я перенес эту роль в собственную коллекцию.
В будущем я не буду принимать или обрабатывать дальнейшие запросы или проблемы здесь.

Пожалуйста, используйте указанную коллекцию с этого момента!


GitHub Workflow Status GitHub issues GitHub release (latest by date) Ansible Quality Score

Требования и зависимости

Ansible Collections

ansible-galaxy collection install bodsch.core

или

ansible-galaxy collection install --requirements-file collections.yml
  • Подключение к репозиторию пакета docker-ce repository

Операционные системы

Проверено на

  • ArchLinux
  • ArtixLinux
  • На базе Debian
    • Debian 10 / 11
    • Ubuntu 20.04 / 22.04

Системы на базе RedHat больше не поддерживаются официально! Могут работать, но это не гарантировано.

Переменные роли

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

## выбрать статус канала репозитория centos
docker_repo:
  channel:
    stable_enabled: true
    test_enabled: false
    nightly_enabled: false

## состояние пакета (present, absent и т.д.)
docker_state: present

## должен ли демон docker запускаться при загрузке?
docker_service:
  enable: true
  ## имя сервиса docker
  name: docker

## установить версию docker-compose
docker_compose: {}
# как пример:
# docker_compose:
#   install: true
#   version: 1.29.2

docker_users: []

docker_plugins: []

docker_client_config: []

docker_config: {}

docker_config_diff: true

docker_python_packages: []

Связанные с прокси

должен ли демон docker использовать прокси для исходящих соединений?

docker_proxy:
  enabled: false
  ## список переменных окружения, которые мы должны установить (закомментируйте те, которые не нужны)
  env:
    - "HTTP_PROXY=http://proxy.example.com:80/"
    - "HTTP_PROXY=https://proxy.example.com:443/"
    - "NO_PROXY=localhost,127.0.0.1,internalhub.example.com"

Конфигурация клиента docker

Включите аутентификацию для Docker Registry.
Здесь можно создать конфигурацию для разных пользователей.
Пароль, хранящийся здесь, закодирован в base64 и не зашифрован!
Создание соответствующей строки можно сделать следующим образом:

echo "jenkins$robot:rubbel-die-katz-du-dummschwätzer1" | base64
amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
docker_client_config:
  ## место, где мы должны сохранить конфигурацию клиента
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==

Или вы также можете ввести свое имя пользователя и пароль.
Модуль Ansible создаст действительную строку, закодированную в Base64.

docker_client_config:
    ## место, где мы должны сохранить конфигурацию клиента
  - location: "/var/tmp/foo/config.json"
    enabled: false
    auths:
      "test.tld":
        username: "FOO-was-sonst"
        password: "ja-toll-schon-wieder-alles-scheisse!"

С версии 3.1.0 теперь также возможно настроить формат вывода docker ps или docker image. Здесь нужно определить передаваемые параметры как список:

docker_client_config:
  ## место, где мы должны сохранить конфигурацию клиента
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
    formats:
      ps:
        - ".ID"
        - ".Names"
        - ".Status"
        - ".Labels"
        - ".RunningFor"
        - ".Ports"
      images:
        - ".ID"
        - ".Size"
        - ".Repository"
        - ".Tag"
        - ".CreatedAt"

настройки по умолчанию для dockerd

ссылка на конфигурацию

в настоящее время поддерживаемые параметры:

параметры тип по умолчанию описание
authorization_plugins список []
bip строка - Укажите IP адрес сетевого моста
bridge строка - Подключить контейнеры к сетевому мосту
data_root строка /var/lib/docker Корневая директория для постоянного состояния Docker
debug лог.знач false Включить режим отладки
default_gateway строка - Шлюз по умолчанию для контейнеров IPv4
default_gateway_v6 строка - Шлюз по умолчанию для контейнеров IPv6
default_shm_size строка - Размер общего раздела по умолчанию для контейнеров (по умолчанию 64MiB)
default_ulimits словарь {} Значения по умолчанию для ограничений контейнеров (по умолчанию [])
dns список [] DNS сервер для использования
dns_opts список [] Параметры DNS для использования
dns_search список [] Поисковые домены DNS для использования
experimental лог.знач false Включить экспериментальные функции
fixed_cidr строка - IPv4 подсеть для фиксированных IP
fixed_cidr_v6 строка - IPv6 подсеть для фиксированных IP
group группа docker Группа для unix-сокета
hosts список [] Сокет(и) демона для подключения
insecure_registries список [] Включить общение с небезопасными реестрами
ip строка 0.0.0.0 IP по умолчанию при привязке портов контейнера
ip_forward лог.знач true Включить net.ipv4.ip_forward (по умолчанию true)
ip_masq лог.знач true Включить маскарадинг IP (по умолчанию true)
iptables лог.знач true Включить добавление правил iptables (по умолчанию true)
ip6tables лог.знач false Включить добавление правил ip6tables (по умолчанию false)
ipv6 лог.знач false Включить IPv6 сетевое взаимодействие
labels список [] Установить метки ключ=значение для демона
log_driver строка json-file Драйвер по умолчанию для логов контейнеров
log_level строка info Установить уровень логирования (debug, info, warn, error, fatal)
log_opts словарь {} Параметры драйвера логирования по умолчанию для контейнеров
max_concurrent_downloads int 3 Установить максимальное количество загрузок одновременно для каждой выборки
max_concurrent_uploads int 5 Установить максимальное количество загрузок одновременно для каждого изменения
max_download_attempts int 5 Установить максимальное количество попыток загрузки для каждой выборки
metrics_addr строка - Установить адрес и порт для предоставления API метрик
oom_score_adjust int -500 Установить oom_score_adj для демона (по умолчанию -500)
pidfile строка /var/run/docker.pid Путь для файла PID демона (по умолчанию "/var/run/docker.pid")
raw_logs лог.знач false Полные временные метки без цветового оформления ANSI
registry_mirrors список [] Предпочитаемый зеркало реестра Docker
seccomp_profile строка - Путь к профилю seccomp
selinux_enabled лог.знач false Включить поддержку selinux
shutdown_timeout int 15 Установить таймаут завершения по умолчанию
storage_driver строка overlay2 Драйвер хранения для использования (aufs, devicemapper, btrfs, zfs, overlay, overlay2, fuse-overlayfs)
storage_opts список [] Параметры драйвера хранения
tls.verify лог.знач false Использовать TLS и проверять удалённый узел
tls.ca_cert строка ~/.docker/ca.pem Давать доверие только сертификатам, подписанным этим CA (по умолчанию "~/.docker/ca.pem")
tls.cert строка ~/.docker/cert.pem Путь к файлу TLS сертификата (по умолчанию "~/.docker/cert.pem")
tls.key строка ~/.docker/key.pem Путь к файлу ключа TLS (по умолчанию "~/.docker/key.pem")

Примеры

docker_config:
  log_driver: ""
  log_opts: {}
  #  env: "os,customer"
  #  "max-file": "5"
  #  "max-size": "10m"
  max_concurrent_downloads: 3
  max_concurrent_uploads: 5
  debug: false
  log_level: ""
  bridge: ""
  bip: "172.16.0.1/24"
  fixed_cidr: "172.16.0.0/24"
  fixed_cidr_v6: ""
  default_gateway: ""
  default_gateway_v6: ""
  selinux_enabled: false
  experimental: false
  ip: "0.0.0.0"
  group: "{{ docker_group }}"
  insecure_registries: []

При создании конфигурации можно дополнительно создать и вывести различия с оригинальной версией.

Для этого переменная docker_config_diff должна быть установлена в true.

Есть еще примеры в тестах молекул:

Опции docker_users

Добавляет существующего пользователя в группу docker.

Кроме того, он пытается установить права доступа к сокету docker с помощью setfacl.

docker_users:
  - jenkins

Опции docker_plugins

Установка и активация пользовательских плагинов.

(В настоящее время протестировано только с Loki!)

docker_plugins:
  - alias: loki
    source: grafana/loki-docker-driver
    version: 2.7.0
    state: present

Поддержка Python

Некоторые модули в этой роли требуют подходящих расширений python.
В последнее время возникло несколько несовместимостей, поэтому этот пункт теперь также настраивается.

Конфигурация по умолчанию выглядит следующим образом:

docker_python_packages:
  - name: docker
  - name: requests
  - name: urllib3

Если установлены другие версии модулей pip, вы можете перезаписать эти значения по умолчанию.
Также возможно указать версии для каждого модуля:

docker_python_packages:
  - name: docker
    version: 6.1.1

Если указана версия, будет предпринята попытка установить именно эту версию.
Тем не менее, также возможен контроль этой логики с помощью compare_direction.

docker_python_packages:
  - name: docker
    compare_direction: ">"
    version: 6.0.0

Или определить соответствующее окно через versions:

docker_python_packages:
  - name: docker
  - name: requests
    versions:
      - ">= 2.27.0"
      - "< 2.29.0"
  - name: urllib3
    versions:
      - ">= 1.26.0"
      - "< 2.0.0"

Примеры

Установите последнюю стабильную версию docker на вашем локальном сервере centos

- hosts: localhost
  roles:
     - role: docker

Установите последнюю версию docker edge на вашем локальном сервере centos

- hosts: localhost
  vars:
    docker_repo:
      channel:
        nightly_enabled: true
  roles:
     - role: docker

Продвинутый плейбук с применением различных переменных

ссылка на конфигурацию

- hosts: localhost
  vars:
    docker_config:
      # сохранить контейнеры/изображения docker в /opt/docker
      data_root: /opt/docker
      # изменить стандартную подсеть моста docker
      bip: 172.16.77.77/24
      # установить драйвер логирования по умолчанию на journald
      log_driver: journald
      # включить экспериментальный режим
      experimental: true
      # выставить API docker через файл сокета и tcp
      hosts:
        - unix:///var/run/docker.sock
        - tcp://0.0.0.0:2376
      # задать стандартные поисковые домены
      dns_search:
        - lab1.linuxctl.com
        - lab2.linuxctl.com
      # настроить параметры логирования
      log_opts:
        "max-size": 10m
        "max-file": "3"
        labels: molecule
        env: "os,customer"

  roles:
    - role: docker

Автор и лицензия

  • оригинальная роль docker написана:

  • модифицировал:

    • Bodo Schulz

Лицензия

MIT

БЕСПЛАТНОЕ ПО, УРА!

О проекте

install and configure docker on various linux systems

Установить
ansible-galaxy install bodsch/ansible-role-docker
Лицензия
mit
Загрузки
11502
Владелец
ex-developer (c, c++, php), ex-system administrator / engineer, keep-it-simple, monitoring, automation, system architect