Docker自动化部署与配置详解③

目录结构

复制代码
docker/
├── tasks/
│   └── main.yml
├── templates/
│   ├── daemon.json.j2
│   └── docker.service.j2
└── vars/
    └── main.yml

1. tasks/main.yml

复制代码
- name: 获取是否已经安装 docker
  shell: 'systemctl is-active docker || echo "NoFound"'
  register: docker_svc

- name: 获取 docker 版本信息
  shell: "{{ base_dir }}/bin/docker-bin/dockerd --version|cut -d' ' -f3"
  register: docker_ver
  connection: local
  run_once: true
  tags: upgrade_docker, download_docker

- name: debug info
  debug: var="docker_ver"
  connection: local
  run_once: true
  tags: upgrade_docker, download_docker

- name: 转换 docker 版本信息为浮点数
  set_fact:
    DOCKER_VER: "{{ docker_ver.stdout.split('.')[0]|int + docker_ver.stdout.split('.')[1]|int/100 }}"
  connection: local
  run_once: true
  tags: upgrade_docker, download_docker

- name: 已安装提示
  debug:
    msg: "docker 服务已安装"
  when: "'NoFound' not in docker_svc.stdout"

- block:
    - name: 准备 docker 相关目录
      file:
        name: "{{ item }}"
        state: directory
      loop:
        - "{{ bin_dir }}"
        - "/etc/docker"

    - name: 下载 docker 二进制文件
      copy:
        src: "{{ item }}"
        dest: "{{ bin_dir }}/"
        mode: '0755'
      with_fileglob:
        - "{{ base_dir }}/bin/docker-bin/*"
      tags: upgrade_docker, download_docker

    - name: 配置 docker daemon
      template:
        src: daemon.json.j2
        dest: /etc/docker/daemon.json

    - name: 创建 docker 的 systemd unit 文件
      template:
        src: docker.service.j2
        dest: /etc/systemd/system/docker.service
      tags: upgrade_docker, download_docker

    - name: 开机启用 docker 服务
      shell: systemctl enable docker
      ignore_errors: true

    - name: 开启 docker 服务
      shell: systemctl daemon-reload && systemctl restart docker
      tags: upgrade_docker

    - name: 轮询等待 docker 服务运行
      shell: "systemctl is-active docker.service"
      register: docker_status
      until: '"active" in docker_status.stdout'
      retries: 8
      delay: 2
      tags: upgrade_docker

    # 配置 docker 命令软链接,方便单独安装 docker
    - name: 配置 docker 命令软链接
      file:
        src: "{{ bin_dir }}/docker"
        dest: /usr/bin/docker
        state: link
      ignore_errors: true

  when: "'NoFound' in docker_svc.stdout"

2. templates

2.1 daemon.json.j2
复制代码
{
  "data-root": "{{ DOCKER_STORAGE_DIR }}",
  "exec-opts": ["native.cgroupdriver={{ CGROUP_DRIVER }}"],
{% if ENABLE_MIRROR_REGISTRY %}
  "registry-mirrors": [
    "https://docker.nju.edu.cn/",
    "https://kuamavit.mirror.aliyuncs.com"
  ],
{% endif %}
{% if DOCKER_ENABLE_REMOTE_API %}
  "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
{% endif %}
  "insecure-registries": [{{ INSECURE_REG_STRING }}],
  "max-concurrent-downloads": 10,
  "live-restore": true,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "50m",
    "max-file": "1"
  },
  "storage-driver": "overlay2"
}
2.2 docker.service.j2
复制代码
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io

[Service]
Environment="PATH={{ bin_dir }}:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart={{ bin_dir }}/dockerd 
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

3. vars/main.yml

复制代码
# cgroup driver
CGROUP_DRIVER: "{%- if DOCKER_VER|float >= 20.10 -%} \
                     systemd \
                {%- else -%} \
                     cgroupfs \
                {%- endif -%}"

#
INSECURE_REG_STR: "{% for reg in INSECURE_REG %}\"{{ reg }}\",{% endfor %}"
INSECURE_REG_STRING: "{{ INSECURE_REG_STR.rstrip(',') }}"
相关推荐
王琦031833 分钟前
Linux的文件管理
linux·运维·服务器
xlq2232235 分钟前
高并发服务器day13
运维·服务器
Android系统攻城狮43 分钟前
Linux PipeWire深度解析之pw_stream_new调用流程与实战(四十二)
linux·运维·服务器·音频进阶·pipewire音频进阶
Ivan CloudBay44 分钟前
CDN 能完全隐藏源服务器 IP 吗?
运维·服务器·tcp/ip
沉迷学习 日益消瘦2 小时前
13-Ingress 生产实战
运维·kubernetes
Dawn-bit2 小时前
Linux日志处理三剑客之基础篇:(基础正则+扩展正则)
linux·运维·服务器·正则表达式·云计算·运维开发
暗影凋落2 小时前
docker-image 工具展示更详细镜像层内容
运维·docker·容器
深圳市爱派派智能科技有限公司2 小时前
“进迭时空 RISC-V 集群服务器 CSB1-N10SPK3:10 节点 K3,600 TOPS 绿色算力“
运维·服务器·risc-v·k3·进迭时空·集群服务器
☆凡尘清心☆2 小时前
Linux运维故障排查速查命令清单
linux·运维·服务器
极客先躯2 小时前
高级java每日一道面试题-2026年05月11日-实战篇[Docker]-如何容器化金融产品推荐系统?
java·运维·docker·容器·金融·高级面试·金融产品推荐系统