bodsch.docker

Ansible Rolle: docker

Diese Rolle konfiguriert und installiert dockerd vollständig.


Ich habe diese Rolle in eine eigene Sammlung übertragen.
Zukünftig werde ich hier keine Pull-Requests oder Probleme mehr annehmen oder bearbeiten.

Bitte verwendet ab jetzt die verlinkte Sammlung!


GitHub Workflow Status GitHub issues GitHub release (latest by date) Ansible Quality Score

Anforderungen & Abhängigkeiten

Ansible Sammlungen

ansible-galaxy collection install bodsch.core

oder

ansible-galaxy collection install --requirements-file collections.yml

Betriebssysteme

Getestet auf

  • ArchLinux
  • ArtixLinux
  • Debian-basiert
    • Debian 10 / 11
    • Ubuntu 20.04 / 22.04

RedHat-basierte Systeme werden nicht mehr offiziell unterstützt! Funktioniert möglicherweise, muss aber nicht.

Rollenspezifische Variablen

Die folgenden Variablen können verwendet werden, um die Docker-Installation anzupassen:

## Wählen Sie den Status des CentOS Docker Repo-Kanals
docker_repo:
  channel:
    stable_enabled: true
    test_enabled: false
    nightly_enabled: false

## Status des Pakets (vorhanden, nicht vorhanden usw.)
docker_state: present

## Soll der Docker-Daemon beim Starten aktiviert werden?
docker_service:
  enable: true
  ## Name des Docker-Dienstes
  name: docker

## Docker-Compose in welcher Version installieren
docker_compose: {}
# als Beispiel:
# docker_compose:
#   install: true
#   version: 1.29.2

docker_users: []

docker_plugins: []

docker_client_config: []

docker_config: {}

docker_config_diff: true

docker_python_packages: []

Proxy-bezogen

Soll der Docker-Daemon einen Proxy für ausgehende Verbindungen verwenden?

docker_proxy:
  enabled: false
  ## Liste der Umgebungsvariablen, die wir setzen sollten (kommentieren Sie die aus, die Sie nicht benötigen)
  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-Client-Konfiguration

Aktivieren Sie die Authentifizierung für das Docker-Registry.
Hier ist es möglich, eine Konfiguration für verschiedene Benutzer zu erstellen.
Das hier gespeicherte Passwort ist base64-kodiert und nicht verschlüsselt!
Die Erstellung eines entsprechenden Strings kann wie folgt erfolgen:

echo "jenkins$robot:rubbel-die-katz-du-dummschwätzer1" | base64
amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
docker_client_config:
  ## Der Ort, an dem wir die Client-Konfiguration aufspielen sollten
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==

Alternativ können Sie auch Ihren Benutzernamen und Passwort eingeben.
Das Ansible-Modul erstellt daraus einen gültigen, base64-kodierten String.

docker_client_config:
    ## Der Ort, an dem wir die Client-Konfiguration aufspielen sollten
  - location: "/var/tmp/foo/config.json"
    enabled: false
    auths:
      "test.tld":
        username: "FOO-was-sonst"
        passwort: "ja-toll-schon-wieder-alles-scheisse!"

Seit Version 3.1.0 ist es auch möglich, das Ausgabeformat von docker ps oder docker image zu konfigurieren.
Hier müssen die festgelegten Parameter als Liste definiert werden:

docker_client_config:
  ## Der Ort, an dem wir die Client-Konfiguration aufspielen sollten
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVuan2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
    formats:
      ps:
        - ".ID"
        - ".Names"
        - ".Status"
        - ".Labels"
        - ".RunningFor"
        - ".Ports"
      images:
        - ".ID"
        - ".Size"
        - ".Repository"
        - ".Tag"
        - ".CreatedAt"

Standard-Dockerd-Konfigurationsoptionen

Konfigurationsreferenz

Aktuell unterstützte Optionen:

Optionen Typ Standard Beschreibung
authorization_plugins list []
bip string - Geben Sie die IP des Netzwerkbrückes an
bridge string - Container mit einem Netzwerk-Bereich verbinden
data_root string /var/lib/docker Root-Verzeichnis des persistierenden Docker-Zustands
debug bool false Debug-Modus aktivieren
default_gateway string - Standard-Gateway IPv4-Adresse für Container
default_gateway_v6 string - Standard-Gateway IPv6-Adresse für Container
default_shm_size string - Standard-Speichergröße für Container (Standard 64MiB)
default_ulimits dict {} Standard-Ulimits für Container (Standard [])
dns list [] Zu verwendender DNS-Server
dns_opts list [] Zu verwendende DNS-Optionen
dns_search list [] Zu verwendende DNS-Suchdomänen
experimental bool false Experimentelle Funktionen aktivieren
fixed_cidr string - IPv4-Subnetz für feste IPs
fixed_cidr_v6 string - IPv6-Subnetz für feste IPs
group group docker Gruppe für den Unix-Socket
hosts list [] Daemon-Socket(s), zu denen verbunden werden soll
insecure_registries list [] Unsichere Registry-Kommunikation aktivieren
ip string 0.0.0.0 Standard-IP beim Binden von Container-Ports
ip_forward bool true Aktivieren von net.ipv4.ip_forward (Standard: true)
ip_masq bool true IP-Masquerading aktivieren (Standard: true)
iptables bool true Hinzufügen von iptables-Regeln aktivieren (Standard: true)
ip6tables bool false Hinzufügen von ip6tables-Regeln aktivieren (Standard: false)
ipv6 bool false IPv6-Netzwerk aktivieren
labels list [] Schlüssel=Wert-Labels für den Daemon festlegen
log_driver string json-file Standardtreiber für Container-Logs
log_level string info Festlegen des Protokollierungsniveaus (debug, info, warn, error, fatal)
log_opts dict {} Standard-Logtreiberoptionen für Container
max_concurrent_downloads int 3 Maximale gleichzeitige Downloads für jeden Pull festlegen
max_concurrent_uploads int 5 Maximale gleichzeitige Uploads für jeden Push festlegen
max_download_attempts int 5 Maximale Downloadversuche für jeden Pull festlegen
metrics_addr string - Standardadresse und -port zum Bereitstellen der Metriken-API festlegen
oom_score_adjust int -500 OOM-Wert des Daemons festlegen (Standard: -500)
pidfile string /var/run/docker.pid Pfad zur Verwendung für die Daemon-PID-Datei (Standard: "/var/run/docker.pid")
raw_logs bool false Vollständige Zeitstempel ohne ANSI-Farbcodierung
registry_mirrors list [] Bevorzugter Docker-Registry-Spiegel
seccomp_profile string - Pfad zum Seccomp-Profil
selinux_enabled bool false Aktivieren von SELinux-Unterstützung
shutdown_timeout int 15 Standard-Zeitüberschreitung für Herunterfahren festlegen
storage_driver string overlay2 Speichertreiber, der verwendet werden soll (aufs, devicemapper, btrfs, zfs, overlay, overlay2, fuse-overlayfs)
storage_opts list [] Speichertreiberoptionen
tls.verify bool false TLS verwenden und den Remote-Server überprüfen
tls.ca_cert string ~/.docker/ca.pem Nur von dieser CA signierte Zertifikate vertrauen (Standard: "~/.docker/ca.pem")
tls.cert string ~/.docker/cert.pem Pfad zur TLS-Zertifizierungsdatei (Standard: "~/.docker/cert.pem")
tls.key string ~/.docker/key.pem Pfad zur TLS-Schlüsseldatei (Standard: "~/.docker/key.pem")

Beispiele

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: []

Bei der Erstellung der Konfiguration kann optional ein Unterschied zur Originalversion erstellt und ausgegeben werden.

Hierfür muss die Variable docker_config_diff auf true gesetzt werden.

Es gibt weitere Beispiele in den Molekül-Tests:

docker_users Optionen

Fügt einen existierenden Benutzer zur docker Gruppe hinzu.

Darüber hinaus wird versucht, die Zugriffsrechte auf den Docker-Socket mithilfe von setfacl zu setzen.

docker_users:
  - jenkins

docker_plugins Optionen

Installiert und aktiviert benutzerdefinierte Plugins.

(Aktuell nur getestet mit Loki!)

docker_plugins:
  - alias: loki
    source: grafana/loki-docker-driver
    version: 2.7.0
    state: present

Python Unterstützung

Einige Module in dieser Rolle erfordern geeignete Python-Erweiterungen.
In letzter Zeit gab es einige Inkompatibilitäten, weshalb dieser Punkt jetzt auch konfigurierbar ist.

Die Standardkonfiguration ist wie folgt:

docker_python_packages:
  - name: docker
  - name: requests
  - name: urllib3

Wenn hier andere pip-Modulversionen installiert sind, können Sie diese Standardwerte überschreiben.
Es ist möglich, für jedes Modul Versionen hinzuzufügen:

docker_python_packages:
  - name: docker
    version: 6.1.1

Wenn eine Version angegeben ist, wird versucht, genau diese Version zu installieren.
Es besteht jedoch auch die Möglichkeit, dieses Verhalten über compare_direction zu beeinflussen.

docker_python_packages:
  - name: docker
    compare_direction: ">"
    version: 6.0.0

Oder einen entsprechenden Bereich über versions zu definieren:

docker_python_packages:
  - name: docker
  - name: requests
    versions:
      - ">= 2.27.0"
      - "< 2.29.0"
  - name: urllib3
    versions:
      - ">= 1.26.0"
      - "< 2.0.0"

Beispiele

Installieren Sie die neueste Docker stable Version auf Ihrem lokalen CentOS-Server

- hosts: localhost
  roles:
     - role: docker

Installieren Sie die neueste Docker edge Version auf Ihrem lokalen CentOS-Server

- hosts: localhost
  vars:
    docker_repo:
      channel:
        nightly_enabled: true
  roles:
     - role: docker

Fortgeschrittenes Playbook mit verschiedenen angewendeten Variablen

Konfigurationsreferenz

- hosts: localhost
  vars:
    docker_config:
      # Speichern Sie Docker-Container/Bilder in /opt/docker
      data_root: /opt/docker
      # Ändern Sie das Standard-Docker-Bridge-Subnetz
      bip: 172.16.77.77/24
      # Setzen Sie den Standard-Logtreiber auf journald
      log_driver: journald
      # Aktivieren Sie den experimentellen Modus
      experimental: true
      # Exponiere die Docker-API über Socket-Datei und TCP
      hosts:
        - unix:///var/run/docker.sock
        - tcp://0.0.0.0:2376
      # Setzen Sie die Standard-Suchdomänen
      dns_search:
        - lab1.linuxctl.com
        - lab2.linuxctl.com
      # Konfigurieren der Protokollierungsoptionen
      log_opts:
        "max-size": 10m
        "max-file": "3"
        labels: molecule
        env: "os,customer"

  roles:
    - role: docker

Autor und Lizenz

  • Ursprung der docker Rolle geschrieben von:

  • Modifiziert:

    • Bodo Schulz

Lizenz

MIT

KOSTENLOSE SOFTWARE, NA KLAR!

Über das Projekt

install and configure docker on various linux systems

Installieren
ansible-galaxy install bodsch.docker
GitHub Repository
Lizenz
mit
Downloads
11.8k
Besitzer
ex-developer (c, c++, php), ex-system administrator / engineer, keep-it-simple, monitoring, automation, system architect