bodsch.docker

Ansible角色:docker

该角色将完全配置和安装dockerd


我已将此角色转移到自己的集合中。
从现在开始,我将不再接受或处理任何进一步的拉取请求或问题。

请从现在起使用链接的集合!


GitHub工作流状态 GitHub 问题 GitHub 发布(最新日期) Ansible 质量评分

需求与依赖

Ansible集合

ansible-galaxy collection install bodsch.core

ansible-galaxy collection install --requirements-file collections.yml
  • 连接到docker-ce软件包仓库

操作系统

已在以下系统上测试

  • ArchLinux
  • ArtixLinux
  • 基于Debian
    • Debian 10 / 11
    • Ubuntu 20.04 / 22.04

不再官方支持基于RedHat的系统!可能有效,但也可能无效。

角色变量

以下变量可用于自定义docker安装:

## 选择centos docker仓库频道启用状态
docker_repo:
  channel:
    stable_enabled: true
    test_enabled: false
    nightly_enabled: false

## 软件包状态(present,absent 等)
docker_state: present

## docker守护进程是否应在启动时启动?
docker_service:
  enable: true
  ## docker服务的名称
  name: docker

## 安装docker-compose的版本
docker_compose: {}
# 例如:
# docker_compose:
#   install: true
#   version: 1.29.2

docker_users: []

docker_plugins: []

docker_client_config: []

docker_config: {}

docker_config_diff: true

docker_python_packages: []

代理相关

docker守护进程是否应使用代理进行外部连接?

docker_proxy:
  enabled: false
  ## 我们应该设置的环境变量列表(注释掉你不需要的)
  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客户端配置

启用Docker注册表的身份验证。
这里可以为不同用户创建配置。
这里存储的密码是Base64编码的,而不是加密的!
创建相应字符串的方法如下:

echo "jenkins$robot:rubbel-die-katz-du-dummschwätzer1" | base64
amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==
docker_client_config:
  ## 我们应该推送客户端配置的位置
  - location: "/root/.docker/config.json"
    enabled: false
    auths:
      registry.gitfoo.tld:
        auth: amVua2luczpydWJiZWwtZGllLWthdHotZHUtZHVtbXNjaHfDpHR6ZXIxCg==

或者,你也可以输入你的usernamepassword
Ansible模块将会生成一个有效的Base64编码字符串。

docker_client_config:
    ## 我们应该推送客户端配置的位置
  - location: "/var/tmp/foo/config.json"
    enabled: false
    auths:
      "test.tld":
        username: "FOO-was-sonst"
        passwort: "ja-toll-schon-wieder-alles-scheisse!"

自版本3.1.0起,现在也可以配置docker psdocker image的输出格式。 此处需要将提供的参数定义为列表:

docker_client_config:
  ## 我们应该推送客户端配置的位置
  - 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"

默认的dockerd配置选项

配置参考

当前支持的选项:

选项 类型 默认值 描述
authorization_plugins list []
bip string - 指定网络桥IP
bridge string - 将容器附加到网络桥
data_root string /var/lib/docker 持久化Docker状态的根目录
debug bool false 启用调试模式
default_gateway string - 容器默认网关IPv4地址
default_gateway_v6 string - 容器默认网关IPv6地址
default_shm_size string - 容器的默认共享内存大小(默认 64MiB
default_ulimits dict {} 容器的默认ulimits(默认[])
dns list [] 要使用的DNS服务器
dns_opts list [] 要使用的DNS选项
dns_search list [] 要使用的DNS搜索域
experimental bool false 启用实验功能
fixed_cidr string - 固定IP的IPv4子网
fixed_cidr_v6 string - 固定IP的IPv6子网
group group docker UNIX套接字的组
hosts list [] 要连接的守护程序套接字
insecure_registries list [] 启用不安全注册表通信
ip string 0.0.0.0 绑定容器端口时的默认IP
ip_forward bool true 启用net.ipv4.ip_forward(默认为true)
ip_masq bool true 启用IP伪装(默认为true)
iptables bool true 启用添加iptables规则(默认为true)
ip6tables bool false 启用添加ip6tables规则(默认为false)
ipv6 bool false 启用IPv6网络
labels list [] 将key=value标签设置为守护进程
log_driver string json-file 容器日志的默认驱动程序
log_level string info 设置日志级别(debuginfowarnerrorfatal
log_opts dict {} 容器的默认日志驱动程序选项
max_concurrent_downloads int 3 设置每次拉取的最大并发下载数
max_concurrent_uploads int 5 设置每次推送的最大并发上传数
max_download_attempts int 5 设置每次拉取的最大下载尝试次数
metrics_addr string - 设置提供指标api的默认地址和端口
oom_score_adjust int -500 设置守护进程的oom_score_adj(默认-500)
pidfile string /var/run/docker.pid 用于守护进程PID文件的路径(默认 "/var/run/docker.pid")
raw_logs bool false 无ANSI颜色的完整时间戳
registry_mirrors list [] 优先的Docker注册表镜像
seccomp_profile string - seccomp配置文件的路径
selinux_enabled bool false 启用selinux支持
shutdown_timeout int 15 设置默认的关闭超时时间
storage_driver string overlay2 存储驱动程序aufsdevicemapperbtrfszfsoverlayoverlay2fuse-overlayfs
storage_opts list [] 存储驱动程序选项
tls.verify bool false 使用TLS并验证远程
tls.ca_cert string ~/.docker/ca.pem 仅信任这个CA签名的证书(默认 "~/.docker/ca.pem")
tls.cert string ~/.docker/cert.pem TLS证书文件的路径(默认 "~/.docker/cert.pem")
tls.key string ~/.docker/key.pem TLS密钥文件的路径(默认 "~/.docker/key.pem")

示例

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

创建配置时,可以选择性地创建并输出原始版本的差异。

为此,变量docker_config_diff必须设置为true

在分子测试中还有更多示例:

docker_users选项

现有用户添加到docker组。

此外,它尝试通过setfacl来设置对docker套接字的访问权限。

docker_users:
  - jenkins

docker_plugins选项

安装和激活自定义插件。

(目前仅在Loki中测试!)

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

Python支持

该角色中的某些模块需要适合的python扩展。
最近,这方面出现了一些不兼容性,因此此点现在也是可配置的。

默认配置如下:

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

如果在这里安装了其他pip模块版本,则可以覆盖这些默认值。
可以为每个模块添加版本:

docker_python_packages:
  - name: docker
    version: 6.1.1

如果指定了版本,将尝试安装该版本。
但是,还可以通过compare_direction来影响此行为。

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

或者通过versions定义相应的窗口:

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

示例

在你的本地centos服务器上安装最新的docker 稳定版本

- hosts: localhost
  roles:
     - role: docker

在你的本地centos服务器上安装最新的docker 边缘版本

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

应用多种变量的高级剧本

配置参考

- hosts: localhost
  vars:
    docker_config:
      # 将docker容器/镜像存储到 /opt/docker
      data_root: /opt/docker
      # 更改默认docker桥接子网
      bip: 172.16.77.77/24
      # 设置默认日志驱动为journald
      log_driver: journald
      # 启用实验模式
      experimental: true
      # 通过套接字文件和tcp暴露docker api
      hosts:
        - unix:///var/run/docker.sock
        - tcp://0.0.0.0:2376
      # 设置默认搜索域
      dns_search:
        - lab1.linuxctl.com
        - lab2.linuxctl.com
      # 配置日志选项
      log_opts:
        "max-size": 10m
        "max-file": "3"
        labels: molecule
        env: "os,customer"

  roles:
    - role: docker

作者和许可证

  • 原始 docker 角色由:

  • 修改人:

    • Bodo Schulz

许可证

MIT

免费软件,太棒了!

关于项目

install and configure docker on various linux systems

安装
ansible-galaxy install bodsch.docker
许可证
mit
下载
11.8k
拥有者
ex-developer (c, c++, php), ex-system administrator / engineer, keep-it-simple, monitoring, automation, system architect