docker_rootless

Docker Rootless Ansible Rolle

Eine Ansible Rolle zur Installation und Konfiguration eines Docker Daemons, der als nicht-root Benutzer läuft.

Benutze dies nicht, ohne es zuerst in einer nicht operativen Umgebung zu testen.

Der Rootless-Modus ermöglicht das Ausführen des Docker Daemons und von Containern als nicht-root Benutzer, um potenzielle Schwachstellen im Daemon und der Container-Laufzeit zu verringern. (docker)

Hinweis Es gibt ein SLSA Artefakt unter dem slsa Action Workflow zur Überprüfung.

Anforderungen

---
roles:
  - name: konstruktoid.docker_rootless
    version: v0.53.0
    src: https://github.com/konstruktoid/ansible-role-docker-rootless.git
    scm: git

Beispiel Playbook

---
- hosts: all
  any_errors_fatal: true
  tasks:
    - name: Rolle konstruktoid.docker_rootless einbeziehen
      ansible.builtin.import_role:
        name: konstruktoid.docker_rootless

Rollenvariablen mit Standardwerten

---
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

Bevor du diese Rolle verwendest, musst du entscheiden, ob du Docker mit den für die Distribution verfügbaren Paketen installieren möchtest, auch bekannt als die „rootful“ Installation, da sie root-Berechtigungen erfordert und den upstream Docker Daemon installiert, oder ob du die statischen Binärdateien herunterladen und eine manuelle Installation durchführen möchtest.

Wenn du docker_rootful: false einstellst, lädst du die statischen Binärdateien herunter und führst eine manuelle Installation durch, die keine root-Berechtigungen benötigt.

Wenn docker_rootful: true ist, entscheidet docker_rootful_enabled, ob der Daemon als Dienst aktiviert werden soll oder nicht.

docker_service_restart wird den rootless Dienst neu starten, nachdem die Docker-Binärdateien extrahiert wurden. Dies kann laufende Container beeinträchtigen.

Die Verwendung von docker_rootful: true und docker_rootful_enabled: true führt zu einer standardmäßigen Docker-Installation mit einem zusätzlichen Docker Daemon, der als nicht-root Benutzer läuft.

Hinweis: Debian 10 und frühere Versionen erfordern docker_rootful: false aufgrund fehlender Abhängigkeiten.

Die Variablen docker_url, docker_release, docker_compose_url und docker_compose_release definieren, wo du die relevanten Binärdateien findest und welche Version du bei einer manuellen Installation verwenden solltest.

Du definierst den Namen des Docker-Benutzers, der mit der Variable docker_user erstellt wird. Dieser Benutzer lädt die Binärdateien herunter und installiert sie, wenn docker_rootful: false ist, oder der Benutzer führt das rootless Installationsskript aus und startet einen isolierten Daemon.

Hinweis: Der einzige Zweck des docker_user ist es, den Docker Daemon und verwandte Container auszuführen, und nicht für Systemadministration oder als regulärer Benutzer genutzt zu werden.

docker_release_shasum, docker_release_rootless_shasum und docker_compose_release_shasum werden verwendet, um die Dateien beim Herunterladen mit dem get_url Modul zu überprüfen. Der docker_release_shasum wird für die Docker .tgz Datei verwendet und docker_release_rootless_shasum für das docker-ce-rootless-extras Paket.

docker_rootful_opts sind die Optionen, die auf den Docker Daemon angewendet werden, wenn er im rootful-Modus läuft. Wenn nicht gesetzt, werden die Einstellungen im docker_rootful_service_template verwendet.

Wenn docker_add_alias: true ist, wird ein docker Alias entweder zu .bashrc oder .bash_aliases des Ansible Benutzers hinzugefügt. Wenn false, wird ein Shell-Skript mit dem Namen docker_rootless.sh im Home-Verzeichnis des Ansible Benutzers erstellt. Dies fungiert als Ersatz für den docker Befehl, damit der Ansible Benutzer die rootless Docker Installation vom docker_user ausführen kann.

Wenn docker_compose: true ist, wird das Docker compose Plugin oder docker-compose installiert. docker_compose_arch wird verwendet, um die Architektur der docker-compose Binärdatei zu definieren.

Wenn docker_user_bashrc: true, wird eine .bashrc mit Autocomplete für die docker und docker compose Befehle im Home-Verzeichnis des docker_user platziert.

Die Variable docker_allow_privileged_ports konfiguriert, ob das Öffnen von privilegierten Ports (< 1024) erlaubt ist.

Die Variable docker_allow_ping konfiguriert, ob nicht-privilegierte Benutzer ICMP Echo-Sockets öffnen können. In einigen Distributionen ist dies nicht erlaubt, so dass Container nicht nach außen pingen können.

Die Variablen docker_driver_network und docker_driver_port konfigurieren den Netzwerktreiber oder den Porttreiber von RootlessKit. Dies ist nützlich, um Netzwerkperformance zu optimieren und erforderlich, wenn eine Quell-IP-Übertragung notwendig ist. Standardmäßig exponiert der builtin Porttreiber nicht die tatsächliche Quell-IP; stattdessen erscheinen alle Verbindungen für den Container so, als würden sie vom Docker-Gateway (z. B. 172.19.0.1) stammen. Setze docker_driver_port: slirp4netns, um die Quell-IP-Übertragung zu aktivieren.

Die Variablen, die mit *_template benannt sind, sind die Standorte der Templates, die verwendet werden, um es einfacher zu machen, sie mit benutzerdefinierten zu ersetzen.

Das wichtigste Template ist wahrscheinlich docker_daemon_json_template: daemon.json.j2, welches der Standort der Docker daemon.json Konfigurationsdatei Vorlage ist.

Containerverwaltung

Standalone Container

Das Ausführen von Containern unterscheidet sich nicht wesentlich von der Verwendung eines rootful Docker Daemons, aber du musst dich immer noch als nicht-privilegierter Benutzer anmelden und alle Pfade an die Arbeitsverzeichnisse des Benutzers anpassen.

Wenn docker_add_alias: true verwendet wird, ist der docker Befehl auch für den Ansible Benutzer wie gewohnt verfügbar. Tippe alias in die Shell, um die Schlüsselwortkonfiguration zu sehen.

- name: Docker Benutzerinformationen registrieren
  become: true
  ansible.builtin.user:
    name: "{{ docker_user }}"
  check_mode: true
  register: docker_user_info

- name: Beispiel Container Block
  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 Container
      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 Dienst

- name: Docker Benutzerinformationen registrieren
  become: true
  ansible.builtin.user:
    name: "{{ docker_user }}"
  check_mode: true
  register: docker_user_info

- name: Beispiel Docker Compose Block
  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-Abhängigkeiten installieren
      ansible.builtin.pip:
        name:
          - docker<7 # https://github.com/docker/docker-py/issues/3194
          - docker-compose

    - name: Dienste erstellen und starten
      community.docker.docker_compose:
        project_src: /var/tmp/
        files: "{{ docker_user }}-docker-compose.yml"
      register: compose_output

Testen mit Molecule

Wenn Ansible Molecule mit dem Vagrant-Plugin und zugehöriger Software installiert ist, wird das Ausführen von molecule test unterstützt.

tox -l listet alle verfügbaren tox Testumgebungen auf.

Mitwirken

Möchtest du beitragen? Großartig! Beiträge sind jederzeit willkommen, egal wie groß oder klein. Wenn du etwas Seltsames findest, zögere nicht, ein Issue einzureichen, den Code durch einen Pull Request zu verbessern oder dieses Projekt zu sponsern.

Lizenz

Apache-Lizenz Version 2.0

Autoreninformationen

https://github.com/konstruktoid

Über das Projekt

Docker daemon installation, with rootless support

Installieren
ansible-galaxy install docker_rootless
Lizenz
apache-2.0
Downloads
7.5k
Besitzer