Docker 配置基础优化

Author:rab


为什么要优化?

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

sh 复制代码
cat /etc/docker/daemon.json
yaml 复制代码
{
  "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 服务使配置生效:

sh 复制代码
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

相关推荐
€☞扫地僧☜€1 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
茶馆大橘1 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
全能全知者2 小时前
docker快速安装与配置mongoDB
mongodb·docker·容器
阿尔帕兹4 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
ZHOU西口6 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
景天科技苑8 小时前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge9 小时前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇9 小时前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
川石课堂软件测试11 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
昌sit!17 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes