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