Docker 配置基础优化

Docker Containers

Author:rab


为什么要优化?

你有没有发现,Docker 作为线上环境使用时,Docker 日志驱动程序的日志、存储驱动数据都比较大(尤其是在你容器需要增删比较频繁的时候),动不动就好几百 G 的大小,因此我们需要合理的配置一下 Docker 的配置文件。接下来是一个 Overlay2 文件系统常用的配置基础优化,可根据你的实际情况来进行调整,但要注意的是不同的 Docker 版本可能配置文件选项有所细微区别,具体可查看官方文档。

cat /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://q1rw9tzz.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries":["http://xxx.xxx.xxx"],
  "data-root": "/data/docker",
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.size=50GB",
    "overlay2.override_kernel_check=true",
    "overlay2.override_wait_for_deletion=true"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50MB",
    "max-file": "3"
  }
}

修改保存完成后,需要重启 Docker 服务使配置生效:

systemctl daemon-reload 
systemctl restart docker

字段解释:

  • exec-opts

    指定 Docker 使用 systemd 作为 cgroup 驱动程序。这是为了确保 Docker 在容器的资源控制方面与宿主系统的 systemd 一致。

  • registry-mirrors

    配置 Docker 镜像仓库镜像源,可以指定多个镜像源地址(避免单个可能会失效的问题),以加速从这些镜像源下载 Docker 镜像。

  • insecure-registries

    配置 Docker 的私有镜像仓库镜像源,该仓库一般是我们私有化部署或使用的云产品服务。

  • data-root

    指定 Docker 的数据目录,存储驱动、日志驱动等数据都会存储在该目录下。

  • storage-driver

    指定 Docker 的存储驱动为 overlay2,不指定默认也是 overlay2。

  • storage-opts

    设置 Docker 存储驱动的选项,overlay2.override_kernel_check=true 表示允许覆盖内核版本检查,以便在不同内核版本之间切换 overlay2 存储驱动。overlay2.override_wait_for_deletion=true c=表示覆盖等待删除操作,提高容器删除速度。overlay2.size=50GB 表示限制存储驱动的容量大小为 50GB,但是我不建议限制其大小,如果在生产环境中你限制的大小太小可能会导致容器中的应用程序无法正常工作或崩溃,如果存储驱动的大小限制不足以容纳容器中的数据,那么超出限制的数据可能会丢失,这可能会导致重要数据的损失,因此需要根据你的具体需求和应用场景来谨慎考虑。确保你了解应用程序的存储需求,并根据实际情况来设置存储驱动大小限制。同时,要定期监控存储空间的使用情况,以确保不会出现不可预测的问题。

  • log-driver

    指定 Docker 容器的日志驱动程序为 json-file,表示容器日志将以 JSON 格式写入文件。

  • log-opts

    设置 Docker 日志驱动的选项,max-size 表示限制单个容器日志文件的最大大小为 50MB。max-file表示最多保留 3 个容器日志文件,旧的日志文件会被轮换出去。

小结

其实这并算不上实际意义上的优化,我们只需要关注以下几个方面的配置,其他默认即可(默认参数配置已经完全可应对生产了)。

  • 存储驱动(storage-driver):默认情况下,Docker 使用 overlay2 存储驱动,这对大多数用例都是合适的。

  • 数据根目录(data-root):这是 Docker 用于存储容器镜像、容器数据和卷的根目录。如果你的系统有足够的存储空间,使用默认的数据根目录通常是合适的。但如果你想将 Docker 数据存储在不同的位置,可以根据需求修改此选项。

  • 日志驱动(log-driver):默认情况下,Docker 使用 json-file 日志驱动,将容器日志以 JSON 格式写入文件。这个设置通常适用于大多数用例,但你可以根据需求选择其他日志驱动程序,如 syslog 或 fluentd。

  • 日志选项(log-opts):根据日志需求,可以设置不同的选项。例如,你可以使用 "max-size""max-file" 选项来限制单个日志文件的大小和文件的数量。这有助于控制日志文件的大小和数量,以免耗尽磁盘空间。

  • 镜像仓库镜像源(registry-mirrors):如果你需要加速 Docker 镜像的下载速度,可以配置国内镜像仓库的镜像源(如阿里)。

  • 不安全的镜像仓库(insecure-registries):如果你需要连接到不安全的 Docker 镜像仓库(其实就是我们自建的私有 Docker 镜像仓库),可以在这里添加这些仓库的地址。

—END

配置优化Docker容器时,可以考虑以下几个方面: 1. 资源限制:为每个容器设置适当的资源限制,包括CPU、内存和磁盘空间。这可以通过Docker的`--cpu-shares`、`--memory`和`--storage-opt`参数来实现。 2. 容器镜像优化:选择轻量级的基础镜像,避免使用过大或过于复杂的镜像。可以使用Alpine Linux等精简的基础镜像,以减少容器的大小和启动时间。 3. 避免不必要的软件包:在构建容器时,只包含应用程序所需的最小软件包。避免安装不必要的依赖项,以减少容器的大小和复杂性。 4. 优化容器启动顺序:如果应用程序有多个组件,可以优化容器的启动顺序,确保先启动最重要的组件,以提高整体性能。 5. 使用缓存:在构建容器时,合理使用缓存机制。可以使用Docker的多阶段构建功能,将常用的步骤缓存起来,以加快构建速度。 6. 日志管理:合理配置容器的日志输出,避免过多的日志输出导致磁盘空间占用过大。可以将日志输出到标准输出或者专门的日志文件中,并定期清理不必要的日志。 7. 容器网络优化:根据实际需求,选择合适的网络模式。可以使用桥接网络、主机网络或者自定义网络,以满足应用程序的网络需求。 8. 安全性配置:确保容器的安全性,限制容器的权限和访问范围。可以使用Docker的安全配置选项,如`--security-opt`参数,限制容器的能力和访问权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值