bodsch.docker

Rol de Ansible: docker

Este rol configurará e instalará completamente dockerd.


He transferido este rol a su propia colección.
En el futuro, no aceptaré ni procesaré más solicitudes de extracción o problemas aquí.

¡Por favor, usa la colección vinculada a partir de ahora!


Estado del flujo de trabajo de GitHub Problemas en GitHub Última versión en GitHub (más reciente por fecha) Puntuación de calidad de Ansible

Requisitos y Dependencias

Colecciones de Ansible

ansible-galaxy collection install bodsch.core

o

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

Sistemas operativos

Probado en

  • ArchLinux
  • ArtixLinux
  • Basado en Debian
    • Debian 10 / 11
    • Ubuntu 20.04 / 22.04

¡Los sistemas basados en RedHat ya no están oficialmente soportados! Pueden funcionar, pero no necesariamente.

Variables del Rol

Las siguientes variables se pueden usar para personalizar la instalación de docker:

## elige el estado del canal del repositorio de docker de centos
docker_repo:
  channel:
    stable_enabled: true
    test_enabled: false
    nightly_enabled: false

## estado del paquete (presente, ausente, etc.)
docker_state: present

## ¿debe iniciar el daemon de docker al arrancar?
docker_service:
  enable: true
  ## nombre del servicio de docker
  name: docker

## instalar docker-compose en versión
docker_compose: {}
# como ejemplo:
# docker_compose:
#   install: true
#   version: 1.29.2

docker_users: []

docker_plugins: []

docker_client_config: []

docker_config: {}

docker_config_diff: true

docker_python_packages: []

Relacionado con Proxy

¿debe el daemon de docker usar un proxy para conexiones salientes?

docker_proxy:
  enabled: false
  ## lista de variables de entorno que debemos establecer (comente las que no necesite)
  env:
    - "HTTP_PROXY=http://proxy.ejemplo.com:80/"
    - "HTTP_PROXY=https://proxy.ejemplo.com:443/"
    - "NO_PROXY=localhost,127.0.0.1,internalhub.ejemplo.com"

configuración del cliente de docker

Habilitar la autenticación para el Registro de Docker.
Aquí es posible crear una configuración para diferentes usuarios.
La contraseña almacenada aquí está codificada en base64 y no está encriptada.
La creación de una cadena correspondiente se puede hacer de las siguiente manera:

echo "jenkins$robot:rubbel-die-katz-du-dummschwätzer1" | base64
amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
docker_client_config:
  ## la ubicación donde debemos enviar la configuración del cliente
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==

Alternativamente, también puedes ingresar tu nombre de usuario y contraseña.
El módulo de Ansible generará una cadena válida codificada en Base64 a partir de ello.

docker_client_config:
    ## la ubicación donde debemos enviar la configuración del cliente
  - location: "/var/tmp/foo/config.json"
    enabled: false
    auths:
      "test.tld":
        username: "FOO-was-sonst"
        password: "ja-toll-schon-wieder-alles-scheisse!"

Desde la versión 3.1.0, también es posible configurar el formato de salida de docker ps o docker image.
Aquí los parámetros proporcionados deben definirse en forma de lista:

docker_client_config:
  ## la ubicación donde debemos enviar la configuración del cliente
  - 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"

opciones de configuración predeterminadas de dockerd

referencia de configuración

opciones soportadas actualmente:

opciones tipo predeterminado descripción
authorization_plugins lista []
bip cadena - Especificar IP del puente de red
bridge cadena - Adjuntar contenedores a un puente de red
data_root cadena /var/lib/docker Directorio raíz del estado persistente de Docker
debug bool false Habilitar el modo de depuración
default_gateway cadena - Dirección IP del gateway por defecto del contenedor
default_gateway_v6 cadena - Dirección IPv6 del gateway por defecto del contenedor
default_shm_size cadena - Tamaño por defecto de shm para contenedores (por defecto 64MiB)
default_ulimits diccionario {} Ulimits por defecto para contenedores (por defecto [])
dns lista [] Servidor DNS a utilizar
dns_opts lista [] Opciones DNS a utilizar
dns_search lista [] Dominios de búsqueda DNS a utilizar
experimental bool false Habilitar funciones experimentales
fixed_cidr cadena - Subred IPv4 para IPs fijas
fixed_cidr_v6 cadena - Subred IPv6 para IPs fijas
group grupo docker Grupo para el socket unix
hosts lista [] Socket(s) del daemon a los que conectarse
insecure_registries lista [] Habilitar comunicación con registros inseguros
ip cadena 0.0.0.0 IP predeterminada al vincular puertos de contenedores
ip_forward bool true Habilitar net.ipv4.ip_forward (por defecto true)
ip_masq bool true Habilitar la mascarada de IP (por defecto true)
iptables bool true Habilitar la adición de reglas de iptables (por defecto true)
ip6tables bool false Habilitar la adición de reglas de ip6tables (por defecto false)
ipv6 bool false Habilitar redes IPv6
labels lista [] Establecer etiquetas clave=valor para el daemon
log_driver cadena json-file Controlador predeterminado para logs de contenedores
log_level cadena info Establecer el nivel de registro (debug,info,warn,error,fatal)
log_opts diccionario {} Opciones del controlador de registro predeterminadas para los contenedores
max_concurrent_downloads int 3 Establecer el número máximo de descargas concurrentes para cada pull
max_concurrent_uploads int 5 Establecer el número máximo de subidas concurrentes para cada push
max_download_attempts int 5 Establecer el número máximo de intentos de descarga para cada pull
metrics_addr cadena - Establecer la dirección y el puerto predeterminados para servir la API de métricas
oom_score_adjust int -500 Establecer el oom_score_adj para el daemon (por defecto -500)
pidfile cadena /var/run/docker.pid Ruta para el archivo PID del daemon (por defecto "/var/run/docker.pid")
raw_logs bool false Timestamps completos sin colores ANSI
registry_mirrors lista [] Espejo de registro de Docker preferido
seccomp_profile cadena - Ruta al perfil seccomp
selinux_enabled bool false Habilitar soporte para selinux
shutdown_timeout int 15 Establecer el tiempo de espera predeterminado para apagado
storage_driver cadena overlay2 Controlador de almacenamiento a utilizar (aufs, devicemapper, btrfs, zfs, overlay, overlay2, fuse-overlayfs)
storage_opts lista [] Opciones del controlador de almacenamiento
tls.verify bool false Usar TLS y verificar el remoto
tls.ca_cert cadena ~/.docker/ca.pem Confiar solo en certs firmados por esta CA (por defecto "~/.docker/ca.pem")
tls.cert cadena ~/.docker/cert.pem Ruta al archivo de certificado TLS (por defecto "~/.docker/cert.pem")
tls.key cadena ~/.docker/key.pem Ruta al archivo de clave TLS (por defecto "~/.docker/key.pem")

Ejemplos

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

Al crear la configuración, se puede optar por crear un diff con la versión original.

Para ello, la variable docker_config_diff debe configurarse en true.

Hay más ejemplos en las pruebas de molecule:

opciones docker_users

Añade un usuario existente al grupo docker.

Además, intenta establecer los derechos de acceso al socket de docker mediante setfacl.

docker_users:
  - jenkins

opciones docker_plugins

Instalar y activar plugins personalizados.

(¡Actualmente solo probado con Loki!)

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

Soporte de python

Algunos de los módulos en este rol requieren extensiones de python adecuadas.
Recientemente, ha habido algunas incompatibilidades, por lo que este punto ahora también es configurable.

La configuración predeterminada es la siguiente:

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

Si se instalan otras versiones de módulo pip aquí, puedes sobrescribir estas configuraciones predeterminadas.
Es posible añadir versiones a cada módulo:

docker_python_packages:
  - name: docker
    version: 6.1.1

Si se especifica una versión, se intentará instalar exactamente esa versión.
Sin embargo, también hay la posibilidad de influir en este comportamiento a través de compare_direction.

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

O definir una ventana correspondiente a través de versions:

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

Ejemplos

Instalar la última versión estable de docker en tu servidor centos local

- hosts: localhost
  roles:
     - role: docker

Instalar la última versión en el canal edge de docker en tu servidor centos local

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

Playbook avanzado con varias variables aplicadas

referencia de configuración

- hosts: localhost
  vars:
    docker_config:
      # almacenar contenedores/imágenes de docker en /opt/docker
      data_root: /opt/docker
      # cambiar subred del puente de docker por defecto
      bip: 172.16.77.77/24
      # establecer el controlador de registro predeterminado a journald
      log_driver: journald
      # habilitar modo experimental
      experimental: true
      # exponer la API de docker a través de un socket y tcp
      hosts:
        - unix:///var/run/docker.sock
        - tcp://0.0.0.0:2376
      # establecer dominios de búsqueda predeterminados
      dns_search:
        - lab1.linuxctl.com
        - lab2.linuxctl.com
      # configurar opciones de registro
      log_opts:
        "max-size": 10m
        "max-file": "3"
        labels: molecule
        env: "os,customer"

  roles:
    - role: docker

Autor y Licencia

  • Rol original docker escrito por:

  • Modificado:

    • Bodo Schulz

Licencia

MIT

¡SOFTWARE GRATIS, SÍ!

Acerca del proyecto

install and configure docker on various linux systems

Instalar
ansible-galaxy install bodsch.docker
Licencia
mit
Descargas
11.8k
Propietario
ex-developer (c, c++, php), ex-system administrator / engineer, keep-it-simple, monitoring, automation, system architect