docker_rootless
Роль Ansible для Docker без прав администратора
Эта роль Ansible предназначена для установки и настройки демона Docker, работающего от имени пользователя без прав администратора.
Не используйте это без предварительного тестирования в нерабочей среде.
Режим без прав администратора позволяет запускать демон Docker и контейнеры от имени пользователя без прав администратора, что уменьшает потенциальные уязвимости в демоне и среде выполнения контейнеров. (docker)
Примечание Подробная информация о SLSA доступна в workflow действия SLSA для проверки.
Требования
---
roles:
- name: konstruktoid.docker_rootless
version: v0.53.0
src: https://github.com/konstruktoid/ansible-role-docker-rootless.git
scm: git
Пример плейбука
---
- hosts: all
any_errors_fatal: true
tasks:
- name: Подключить роль konstruktoid.docker_rootless
ansible.builtin.import_role:
name: konstruktoid.docker_rootless
Переменные роли с значениями по умолчанию
---
docker_add_alias: true
docker_allow_ping: false
docker_allow_privileged_ports: false
docker_compose: false
docker_compose_arch: x86_64
docker_compose_release: v2.29.2
docker_compose_release_shasum: d037bd4937bf18fba67cff4366e084ee125a3e15c25657ee1aeceff8db3672b4
docker_compose_url: https://github.com/docker/compose/releases/download
docker_daemon_json_template: daemon.json.j2
docker_driver_network: slirp4netns
docker_driver_port: builtin
docker_release: 27.1.2
docker_release_rootless_shasum: 5565502b4fab26266327f5a018185f5a98cc1714c975b943dcb7c4365cdcdb25
docker_release_shasum: a7fff574037af22bd0239e7e5601c312d9fe9c55e2b9cf5ddea86d5499a4de88
docker_repository_template: docker.repo.j2
docker_rootful_enabled: false
docker_rootful: false
docker_rootful_opts: false
docker_rootful_service_template: docker_rootful.service.j2
docker_rootless_script_template: docker_rootless.sh.j2
docker_rootless_service_template: docker_rootless.service.j2
docker_service_restart: true
docker_url: https://download.docker.com/linux/static/stable/x86_64
docker_user_bashrc: false
docker_user: dockeruser
Перед использованием этой роли вам нужно решить, хотите ли вы установить Docker
с помощью пакетов, доступных для вашей системы, эта установка называется "rootful", так как
она требует прав root
, или хотите скачать статические бинарники и выполнить установку вручную.
Если вы установите docker_rootful: false
, то будете загружать статические бинарники и
выполните ручную установку, не требуя прав root
.
Если docker_rootful: true
, то переменная docker_rootful_enabled
решит, должен ли
демон быть включён в качестве службы или нет.
docker_service_restart
перезапустит службу без прав администратора после извлечения бинарников Docker. Это может повлиять на все запущенные контейнеры.
Использование docker_rootful: true
и docker_rootful_enabled: true
приведет к стандартной
установке Docker с дополнительным демоном Docker, работающим от имени пользователя без прав администратора.
Обратите внимание, что Debian 10 и более ранние версии требуют установки
docker_rootful: false
из-за отсутствия зависимостей.
Переменные docker_url
, docker_release
, docker_compose_url
и docker_compose_release
определяют, где искать соответствующие бинарники и какую версию использовать при
ручной установке.
Вы определяете имя пользователя Docker с помощью переменной docker_user
. Этот пользователь
будет скачивать и устанавливать бинарники, если docker_rootful: false
, или, в противном
случае, пользователь будет запускать скрипт установки без прав администратора и запускать изолированный демонов.
Обратите внимание, что единственная цель переменной
docker_user
– запускать демон Docker и связанные контейнеры, а не для системного администрирования или использования как обычный пользователь.
Переменные docker_release_shasum
, docker_release_rootless_shasum
и
docker_compose_release_shasum
используются для проверки файлов после их загрузки с
помощью модуля get_url.
docker_release_shasum
используется для файла Docker .tgz
, а
docker_release_rootless_shasum
для пакета docker-ce-rootless-extras
.
docker_rootful_opts
– это опции для применения к демон Docker, если он работает в режиме rootful; если не установлены, будут использованы настройки из
docker_rootful_service_template
.
Если docker_add_alias: true
, тогда псевдоним docker
будет добавлен в файл .bashrc
или .bash_aliases
пользователя Ansible. Если false
, будет создан сценарий с именем
docker_rootless.sh
в домашней директории пользователя Ansible. Это работает как замена
команде docker
, чтобы пользователь Ansible мог выполнить установку Docker без прав администратора от имени docker_user
.
Если docker_compose: true
, то будет установлен плагин compose
Docker или docker-compose
.
docker_compose_arch
используется для определения архитектуры
бинарного файла docker-compose
.
Если docker_user_bashrc: true
, будет размещен файл .bashrc с автозаполнением для команд
docker
и docker compose
в домашней директории docker_user
.
Переменная docker_allow_privileged_ports
настраивает, разрешено ли открытие
привилегированных портов (< 1024).
Переменная docker_allow_ping
настраивает, могут ли непривилегированные пользователи
открывать ICMP echo сокеты.
В некоторых дистрибутивах это не разрешено, и, следовательно, контейнеры не могут
пинговать внешний мир.
Переменные docker_driver_network
и docker_driver_port
настраивают
сетевой драйвер
или драйвер порта
RootlessKit соответственно. Это полезно для
оптимизации производительности сети
и необходимо, если требуется
пропаганда исходного IP-адреса.
По умолчанию драйвер builtin
порта не показывает фактический исходный IP; вместо этого
все подключения выглядят так, как будто они исходят от шлюза Docker (например, 172.19.0.1).
Установите docker_driver_port: slirp4netns
, чтобы включить пропаганду исходного IP.
Переменные с именами *_template
указывают на расположение
шаблонов,
что облегчает их замену на пользовательские.
Самым важным шаблоном, вероятно, является
docker_daemon_json_template: daemon.json.j2
, который указывает на местоположение
шаблона конфигурационного файла Docker daemon.json
.
Управление контейнерами
Отдельный контейнер
Запуск контейнеров не сильно отличается от работы с демоном Docker в режиме rootful, но вам все равно нужно переключиться на непривилегированного пользователя и подстроить любой путь к рабочим директориям пользователя.
Если используется docker_add_alias: true
, команда docker
также будет доступна
как обычно для пользователя Ansible. Введите alias
в оболочке, чтобы увидеть
конфигурацию псевдонимов.
- name: Зарегистрировать информацию о пользователе Docker
become: true
ansible.builtin.user:
name: "{{ docker_user }}"
check_mode: true
register: docker_user_info
- name: Пример блока контейнера
environment:
XDG_RUNTIME_DIR: "/run/user/{{ docker_user_info.uid }}"
PATH: "{{ docker_user_info.home }}/bin:{{ ansible_env.PATH }}"
DOCKER_HOST: "unix:///run/user/{{ docker_user_info.uid }}/docker.sock"
block:
- name: Контейнер Nginx
become: true
become_user: "{{ docker_user }}"
community.docker.docker_container:
name: nginx
image: konstruktoid/nginx
state: started
cap_drop: all
capabilities:
- chown
- dac_override
- net_bind_service
- setgid
- setuid
pull: true
hostname: "{{ ansible_nodename }}"
container_default_behavior: compatibility
Сервис Docker Compose
- name: Зарегистрировать информацию о пользователе Docker
become: true
ansible.builtin.user:
name: "{{ docker_user }}"
check_mode: true
register: docker_user_info
- name: Пример блока Docker Compose
become: true
become_user: "{{ docker_user }}"
environment:
XDG_RUNTIME_DIR: /run/user/{{ docker_user_info.uid }}
PATH: "{{ docker_user_info.home }}/bin:{{ ansible_env.PATH }}"
DOCKER_HOST: "unix:///run/user/{{ docker_user_info.uid }}/docker.sock"
block:
- name: Установить зависимости pip
ansible.builtin.pip:
name:
- docker<7 # https://github.com/docker/docker-py/issues/3194
- docker-compose
- name: Создать и запустить сервисы
community.docker.docker_compose:
project_src: /var/tmp/
files: "{{ docker_user }}-docker-compose.yml"
register: compose_output
Тестирование с помощью Molecule
Если установлены Ansible Molecule
с плагином vagrant и
сопутствующим программным обеспечением, поддерживается запуск molecule test
.
Команда tox -l
выведет список всех доступных тестовых окружений tox
.
Участие в проекте
Хотите внести свой вклад? Отлично! Вклад всегда приветствуется, независимо от его размера. Если вы заметили что-то странное, не стесняйтесь создать issue, улучшить код, создав pull request, или поддержать этот проект.
Лицензия
Лицензия Apache версии 2.0
Информация об авторе
Docker daemon installation, with rootless support
ansible-galaxy install konstruktoid/ansible-docker-rootless