bodsch.docker

Rôle Ansible : docker

Ce rôle configurera et installera complètement dockerd.


J'ai transféré ce rôle vers sa propre collection.
À l'avenir, je n'accepterai ni ne traiterai d'autres demandes de tirage ou problèmes ici.
Veuillez utiliser la collection liée à partir de maintenant !


État du workflow GitHub
Problèmes GitHub
Dernière version GitHub
Score de qualité Ansible

Exigences et dépendances

Collections Ansible

ansible-galaxy collection install bodsch.core

ou

ansible-galaxy collection install --requirements-file collections.yml
  • Connectivité au dépôt du paquet docker-ce repository

Systèmes d'exploitation

Testé sur

  • ArchLinux
  • ArtixLinux
  • Basé sur Debian
    • Debian 10 / 11
    • Ubuntu 20.04 / 22.04

Les systèmes basés sur RedHat ne sont plus officiellement pris en charge ! Ils peuvent fonctionner, mais ce n'est pas garanti.

Variables du rôle

Les variables suivantes peuvent être utilisées pour personnaliser l'installation de Docker :

## Choisir le statut d'activation du canal du dépôt docker pour CentOS
docker_repo:
  channel:
    stable_enabled: true
    test_enabled: false
    nightly_enabled: false

## État du paquet (présent, absent, etc.)
docker_state: present

## Le démon Docker doit-il démarrer au démarrage ?
docker_service:
  enable: true
  ## nom du service Docker
  name: docker

## Installer docker-compose dans la version
docker_compose: {}
# par exemple :
# docker_compose:
#   install: true
#   version: 1.29.2

docker_users: []

docker_plugins: []

docker_client_config: []

docker_config: {}

docker_config_diff: true

docker_python_packages: []

Lié au proxy

Le démon Docker doit-il utiliser un proxy pour les connexions sortantes ?

docker_proxy:
  enabled: false
  ## liste des variables d'environnement à définir (commenter celles dont vous n'avez pas besoin)
  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"

Configuration du client Docker

Activer l'authentification pour le registre Docker.
Il est possible de créer une configuration pour différents utilisateurs.
Le mot de passe stocké ici est encodé en base64 et n'est pas chiffré !
La création d'une chaîne correspondante peut être effectuée comme suit :

echo "jenkins$robot:rubbel-die-katz-du-dummschwätzer1" | base64
amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
docker_client_config:
  ## l'emplacement où nous devons pousser la configuration du client
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==

Alternativement, vous pouvez également entrer votre nom d'utilisateur et mot de passe.
Le module Ansible créera une chaîne valide encodée en base64 à partir de cela.

docker_client_config:
    ## l'emplacement où nous devons pousser la configuration du client
  - location: "/var/tmp/foo/config.json"
    enabled: false
    auths:
      "test.tld":
        username: "FOO-was-sonst"
        passwort: "ja-toll-schon-wieder-alles-scheisse!"

Depuis la version 3.1.0, il est également possible de configurer le format de sortie de docker ps ou docker image.
Ici, les paramètres fournis doivent être définis comme une liste :

docker_client_config:
  ## l'emplacement où nous devons pousser la configuration du client
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
    formats:
      ps:
        - ".ID"
        - ".Names"
        - ".Status"
        - ".Labels"
        - ".RunningFor"
        - ".Ports"
      images:
        - ".ID"
        - ".Size"
        - ".Repository"
        - ".Tag"
        - ".CreatedAt"

Options de configuration par défaut de dockerd

référence de configuration

Options actuellement prises en charge :

options type par défaut description
authorization_plugins list []
bip string - Spécifiez l'adresse IP du pont réseau
bridge string - Connecter les conteneurs à un pont réseau
data_root string /var/lib/docker Répertoire racine de l'état persistant de Docker
debug bool false Activer le mode debug
default_gateway string - Adresse IPv4 de la passerelle par défaut du conteneur
default_gateway_v6 string - Adresse IPv6 de la passerelle par défaut du conteneur
default_shm_size string - Taille shm par défaut pour les conteneurs (par défaut 64MiB)
default_ulimits dict {} Ulimits par défaut pour les conteneurs (par défaut [])
dns list [] Serveur DNS à utiliser
dns_opts list [] Options DNS à utiliser
dns_search list [] Domaines de recherche DNS à utiliser
experimental bool false Activer les fonctionnalités expérimentales
fixed_cidr string - Sous-réseau IPv4 pour IP fixes
fixed_cidr_v6 string - Sous-réseau IPv6 pour IP fixes
group group docker Groupe pour le socket unix
hosts list [] Socket(s) du démon auxquels se connecter
insecure_registries list [] Activer la communication avec des registres non sécurisés
ip string 0.0.0.0 IP par défaut lorsqu'on lie les ports des conteneurs
ip_forward bool true Activer net.ipv4.ip_forward (par défaut vrai)
ip_masq bool true Activer le masquage d'IP (par défaut vrai)
iptables bool true Activer l'ajout de règles iptables (par défaut vrai)
ip6tables bool false Activer l'ajout de règles ip6tables (par défaut faux)
ipv6 bool false Activer le réseau IPv6
labels list [] Définir des étiquettes clé=valeur pour le démon
log_driver string json-file Pilote par défaut pour les journaux de conteneurs
log_level string info Définir le niveau de journalisation (debug,info,warn,error,fatal)
log_opts dict {} Options du pilote de journal par défaut pour les conteneurs
max_concurrent_downloads int 3 Définir le maximum de téléchargements simultanés pour chaque tirage
max_concurrent_uploads int 5 Définir le maximum de téléchargements simultanés pour chaque envoi
max_download_attempts int 5 Définir le maximum de tentatives de téléchargement pour chaque tirage
metrics_addr string - Définir l'adresse et le port par défaut pour servir l'API des métriques
oom_score_adjust int -500 Définir le oom_score_adj pour le démon (par défaut -500)
pidfile string /var/run/docker.pid Chemin à utiliser pour le fichier PID du démon (par défaut "/var/run/docker.pid")
raw_logs bool false Horodatages complets sans coloration ANSI
registry_mirrors list [] Miroir de registre Docker préféré
seccomp_profile string - Chemin vers le profil seccomp
selinux_enabled bool false Activer le support selinux
shutdown_timeout int 15 Définir le délai d'attente par défaut pour l'arrêt
storage_driver string overlay2 Pilote de stockage à utiliser (aufs, devicemapper, btrfs, zfs, overlay, overlay2, fuse-overlayfs)
storage_opts list [] Options du pilote de stockage
tls.verify bool false Utiliser TLS et vérifier le distant
tls.ca_cert string ~/.docker/ca.pem Trust certs signés uniquement par ce CA (par défaut "~/.docker/ca.pem")
tls.cert string ~/.docker/cert.pem Chemin vers le fichier de certificat TLS (par défaut "~/.docker/cert.pem")
tls.key string ~/.docker/key.pem Chemin vers le fichier de clé TLS (par défaut "~/.docker/key.pem")

Exemples

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

Lors de la création de la configuration, une différence par rapport à la version originale peut être créée et affichée en option.

Pour ce faire, la variable docker_config_diff doit être définie sur true.

Il y a plus d'exemples dans les tests de molécule :

Options docker_users

Ajoute un utilisateur existant au groupe docker.

De plus, il tente de définir les droits d'accès au socket Docker à l'aide de setfacl.

docker_users:
  - jenkins

Options docker_plugins

Installer et activer des plugins personnalisés.

(Actuellement uniquement testé avec Loki !)

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

Support Python

Certains des modules de ce rôle nécessitent des extensions Python appropriées.
Ces derniers temps, il y a eu quelques incompatibilités, c'est pourquoi ce point est maintenant également configurable.

La configuration par défaut est la suivante :

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

Si d'autres versions de modules pip sont installées ici, vous pouvez écraser ces valeurs par défaut.
Il est possible d'ajouter des versions à chaque module :

docker_python_packages:
  - name: docker
    version: 6.1.1

Si une version est spécifiée, une tentative sera faite pour installer exactement cette version.
Cependant, il est également possible d'influencer ce comportement via compare_direction.

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

Ou de définir une fenêtre correspondante via versions :

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

Exemples

Installer la dernière version stable de Docker sur votre serveur CentOS local

- hosts: localhost
  roles:
     - role: docker

Installer la dernière version edge de Docker sur votre serveur CentOS local

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

Playbook avancé avec diverses variables appliquées

référence de configuration

- hosts: localhost
  vars:
    docker_config:
      # stocker les conteneurs/images Docker dans /opt/docker
      data_root: /opt/docker
      # changer le sous-réseau bridge par défaut de Docker
      bip: 172.16.77.77/24
      # définir le pilote de journal par défaut sur journald
      log_driver: journald
      # activer le mode expérimental
      experimental: true
      # exposer l'API Docker via le fichier socket et TCP
      hosts:
        - unix:///var/run/docker.sock
        - tcp://0.0.0.0:2376
      # définir les domaines de recherche DNS par défaut
      dns_search:
        - lab1.linuxctl.com
        - lab2.linuxctl.com
      # configurer les options de journalisation
      log_opts:
        "max-size": 10m
        "max-file": "3"
        labels: molecule
        env: "os,customer"

  roles:
    - role: docker

Auteur et licence

  • Rôle docker original écrit par :

  • Modifié par :

    • Bodo Schulz

Licence

MIT

LOGICIEL GRATUIT, OUI !

À propos du projet

install and configure docker on various linux systems

Installer
ansible-galaxy install bodsch.docker
Licence
mit
Téléchargements
11.8k
Propriétaire
ex-developer (c, c++, php), ex-system administrator / engineer, keep-it-simple, monitoring, automation, system architect