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

Информация об авторе

https://github.com/konstruktoid

О проекте

Docker daemon installation, with rootless support

Установить
ansible-galaxy install konstruktoid/ansible-docker-rootless
Лицензия
apache-2.0
Загрузки
7177
Владелец