跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

Docker

Docker,开源容器服务

Docker 是 Pigsty 中的一个 可选模块,默认已下载但未安装。 您必须在使用前显式 启用 它。

配置
    配置 docker 注册中心、代理、镜像等...
参数
    使用 8 个参数自定义 docker 组件
管理
    管理 docker 镜像、容器等...
剧本
    可在 docker 模块中使用的 Ansible 剧本
监控
    仪表板、指标、记录和告警规则。
常见问题
    关于 docker 模块的常见问题

1 - 配置

配置您的 docker 设置

Pigsty 包含内置的 Docker 支持,允许您快速部署容器化应用程序。


快速开始

要在节点上安装 docker,请将 docker_enabled 参数设置为 true

all:
  vars:

    infra:
      hosts:
        10.10.10.10: { infra_seq: 1, nodename: infra-1 }
        10.10.10.11: { infra_seq: 2, nodename: infra-2 }
      vars:
        docker_enabled: true  # 在此组上安装 Docker

然后运行 docker.yml playbook(在目标主机/组上):

~/pigsty
./docker.yml -l infra

Docker 将安装在该 infra 组上。


镜像站

您可以使用 docker_registry_mirrors 指定 docker 注册表镜像:

all:
  vars:
    docker_registry_mirrors: ["https://docker.1ms.run"]

以下是一些示例注册表镜像:

  • 阿里云:["https://registry.cn-hangzhou.aliyuncs.com"]
  • 腾讯云:["https://ccr.ccs.tencentyun.com"]
  • DaoCloud:["https://docker.m.daocloud.io"]
  • 1Ms:["https://docker.1ms.run"]

您可以将多个注册表镜像指定为数组,记住用 " 引用 URL。


代理

如果指定了 proxy_env 参数,Docker 将使用它。

您可以在全局参数 all.vars 或专用组(如 infra)中定义它:

all:
  vars:
    proxy_env:
      no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*"
      http_proxy: 'http://127.0.0.1:12345'
      https_proxy: 'http://127.0.0.1:12345'
      all_proxy: 'http://127.0.0.1:12345'

它将在 docker_config 任务期间呈现到 /etc/docker/daemon.json

{
  "proxies": {
    "http-proxy": "127.0.0.1:12345",
    "https-proxy": "127.0.0.1:12345",
    "no-proxy": "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.tsinghua.edu.cn"
  }
}

这在由于各种原因阻止直接网络访问时很有用。


镜像

您可以使用 docker_imagedocker_image_cache 置备 docker 镜像:

infra:
  hosts:
    10.10.10.10: { infra_seq: 1 }
  vars:
    docker_enabled: true
    docker_image:
      - redis:latest
    docker_image_cache: "/tmp/docker/*.tgz"

docker_image 中定义的镜像将在 docker_image 任务期间逐个拉取。 匹配 docker_image_cache glob 列表的带有 .tgz 后缀的本地 docker 镜像缓存将使用 docker load 加载到 docker 中


加速

您可以在各个云供应商上使用加速器:

  • 阿里云 ACR:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

2 - 参数

使用 8 个参数自定义 docker

Docker 模块有 8 个参数:

名称 类型 层级 注释
docker_enabled bool G/C/I 在此节点上启用 docker?
docker_data path G/C/I Docker 数据目录,默认为 /var/lib/docker
docker_storage_driver enum G/C/I Docker 存储驱动程序,默认为 overlay2
docker_cgroups_driver enum G/C/I docker cgroup fs 驱动程序:cgroupfs,systemd
docker_registry_mirrors string[] G/C/I docker 注册中心镜像列表
docker_exporter_port port G Docker 指标导出器端口,默认为 9323
docker_image path[] G/C/I 要拉取的 docker 镜像,默认为 []
docker_image_cache path G/C/I docker 镜像缓存压缩包通配符,默认为 /tmp/docker

默认值

Docker 的默认参数定义在 roles/docker/defaults/main.yml

docker_enabled: false             # 在此节点上启用 docker?
docker_data: /var/lib/docker      # docker 数据目录,默认为 /var/lib/docker
docker_storage_driver: overlay2   # docker 存储驱动程序,可以是 zfs, btrfs
docker_cgroups_driver: systemd    # docker cgroup fs 驱动程序:cgroupfs,systemd
docker_registry_mirrors: []       # docker 注册中心镜像列表
docker_exporter_port: 9323        # docker 指标导出器端口,默认为 9323
docker_image: []                  # 引导后要拉取的 docker 镜像
docker_image_cache: /tmp/docker/*.tgz # docker 镜像缓存通配符模式

docker_enabled

名称:docker_enabled,类型:bool,层级:G/C/I

在此节点上启用 docker?默认值为 false


docker_data

名称:docker_data,类型:path,层级:C

Docker 数据目录,默认为 /var/lib/docker


docker_storage_driver

名称:docker_storage_driver,类型:enum,层级:C

Docker 存储驱动程序,默认为 overlay2

请参考:https://docs.docker.com/engine/storage/drivers/select-storage-driver/

  • overlay2
  • fuse-overlayfs
  • brtfs
  • zfs
  • vfs

docker_cgroups_driver

名称:docker_cgroups_driver,类型:enum,层级:G/C/I

docker cgroup fs 驱动程序,可以是 cgroupfssystemd,默认值:systemd


docker_registry_mirrors

名称:docker_registry_mirrors,类型:string[],层级:G/C/I

docker 注册中心镜像列表,默认值:[],示例:

以下是使用各云厂商内网镜像的一些示例:

["https://docker.m.daocloud.io"]                # 国内 DaoCloud 镜像站点
["https://docker.1ms.run"]                      # 国内毫秒镜像站点
["https://mirror.ccs.tencentyun.com"]           # 腾讯云内网镜像站点
["https://registry.cn-hangzhou.aliyuncs.com"]   # 阿里云内网镜像站点,需要登录

考虑使用 Cloudflare Worker Docker Proxy

如果拉取速度太慢,您也可以考虑:docker login quay.io 使用其他注册中心。


docker_exporter_port

名称:docker_exporter_port,类型:port,层级:G

Docker 指标导出器端口,默认为 9323


docker_image

名称:docker_image,类型:string[],层级:G/C/I

要拉取的 docker 镜像,默认为 []

这里列出的镜像将在 docker 置备期间被拉取。


docker_image_cache

名称:docker_image_cache,类型:path,层级:G/C/I

docker 镜像缓存压缩包通配符列表,默认为 "/tmp/docker/*.tgz"

匹配此通配符列表的带有 .tgz 后缀的本地 docker 镜像缓存将逐一加载到 docker 中:

cat *.tgz | gzip -d -c - | docker load

3 - 管理

Docker 管理任务

安装

要在节点上安装和启用 docker,请 配置 docker_enabled 参数为 true

all:
  vars:

    infra:
      hosts:
        10.10.10.10: { infra_seq: 1, nodename: infra-1 }
        10.10.10.11: { infra_seq: 2, nodename: infra-2 }
      vars:
        docker_enabled: true  # 在此组上安装 Docker

然后运行 docker.yml 剧本(在目标主机/组上):

./docker.yml -l infra

Docker 将安装在该 infra 组上。

infra 是占位符

我们在这里使用 infra 组作为示例,您可以在其他地方定义它,只要它适用于预期的主机。


仓库

Docker 仓库是 infra 仓库模块的一部分,将在 仓库 构建期间自动添加。

- name: docker-ce
  description: 'Docker CE'
  module: infra
  releases: [7,8,9]
  arch: [x86_64, aarch64]
  baseurl:
    default: 'https://download.docker.com/linux/centos/$releasever/$basearch/stable'
    europe:  'https://mirrors.xtom.de/docker-ce/linux/centos/$releasever/$basearch/stable'
    china:   'https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable'
- name: docker-ce
  description: 'Docker CE'
  module: infra
  releases: [11,12,20,22,24]
  arch: [x86_64, aarch64]
  baseurl:
    default: 'https://download.docker.com/linux/${distro_name} ${distro_codename} stable'
    china: 'https://mirrors.aliyun.com/docker-ce/linux/${distro_name} ${distro_codename} stable'

您可以使用以下命令将此仓库添加到您的节点:

./node.yml -t node_repo -e node_repo_modules=infra -l infra

升级

要升级 Docker 守护进程,使用 ansible 命令,添加 docker 仓库,然后:

~/pigsty
ansible infra -m package -b -a 'name=docker-ce state=latest'

它将把 docker-ce 包升级到您配置的仓库中可用的最新版本。


移除

要移除 Docker 守护进程,使用 ansible 命令运行:

~/pigsty
ansible infra -m package -b -a 'name=docker-ce state=absent'

它将使用您的操作系统包管理器移除 docker-ce 包。


应用程序

Pigsty 提供基于 Docker Compose 的即用型 软件模板,用于部署与 Pigsty 管理的数据库集群无缝集成的外部应用程序。

4 - 剧本

使用剧本设置 docker

DOCKER 模块只有一个剧本:docker.yml 用于在目标节点上安装 docker 守护进程和 docker compose。


docker.yml

原始剧本:docker.yml

在任何主机上运行此剧本将在启用 docker_enabled: true 标志的目标节点上安装 docker-cedocker-compose-plugin

以下是 docker.yml 剧本中可用的子任务:

  • docker_install:在节点上安装 Docker 和 Docker Compose 包。
  • docker_admin:将指定用户添加到 Docker 管理员用户组。
  • docker_config:生成 Docker 守护进程服务配置文件。
  • docker_launch:启动 Docker 守护进程服务。
  • docker_register:将 Docker 守护进程注册为 Prometheus 监控目标。
  • docker_image:如果存在的话,尝试从 /tmp/docker/*.tgz 加载预打包的 Docker 镜像。

Docker 模块不提供专用的 Docker 卸载剧本。如果您需要卸载 Docker,您可以手动停止 Docker 服务然后卸载它:

systemctl stop docker                        # 停止 Docker 守护进程服务
yum remove docker-ce docker-compose-plugin   # 在 EL 系统上卸载 Docker
apt remove docker-ce docker-compose-plugin   # 在 Debian 系统上卸载 Docker

5 - 监控

docker 监控和仪表板

如果节点的 docker_enabled = true,Pigsty 将把 docker 守护进程添加到监控目标中

但是 docker 模块没有默认的仪表板和告警规则,您可以向 prometheus 和 grafana 添加自己的规则。

6 - FAQ

常见问题解答

谁可以运行 Docker 命令?

默认情况下,Pigsty 将在远程主机上运行剧本的 管理用户(即 SSH 登录用户)和由 node_admin_username 参数定义的用户都添加到操作系统组 docker 中。 该组中的任何账户都可以通过 docker CLI 管理 Docker。

需要为另一个用户授予 Docker 访问权限?只需将该操作系统用户添加到 docker 组:

sudo usermod -aG docker <username>

通过代理工作

在安装期间,如果设置了 proxy_env 参数,Pigsty 会将指定的 HTTP 代理设置写入 /etc/docker/daemon.json

然后 Docker 将通过此代理路由所有来自上游注册中心的镜像拉取。

提示: 使用 -x 标志运行 configure 剧本会自动捕获当前 shell 的代理变量并将它们注入到 proxy_env 中。


使用镜像注册中心

在中国大陆,您可能会遇到 GFW 限制。可以使用诸如 quay.io 等镜像:

docker login quay.io   # 输入您的凭据登录

更新(2024年6月): 中国所有以前可访问的 Docker 镜像现在都已被阻止。请通过代理拉取镜像。


将 Docker 添加到监控

安装 Docker 模块后,您可以通过运行 docker_register(别名 register_prometheus)任务将 Docker 注册为特定节点的 Prometheus 目标:

./docker.yml -l <your-node-selector> -t register_prometheus

软件模板

Pigsty 提供了一系列 软件模板,这些模板使用 Docker Compose 启动流行的技术栈——开箱即用。

只需确保首先安装了 Docker 模块。