docker
Ansible Роль: docker
Эта роль полностью настраивает и устанавливает dockerd.
Я перенес эту роль в собственную коллекцию.
В будущем я не буду принимать или обрабатывать дальнейшие запросы или проблемы здесь.Пожалуйста, используйте указанную коллекцию с этого момента!
Требования и зависимости
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
написана:- George Bolo | linuxctl.com
модифицировал:
- Bodo Schulz
Лицензия
MIT
БЕСПЛАТНОЕ ПО, УРА!
ansible-galaxy install bodsch/ansible-role-docker