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

相关推荐
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
tntlbb3 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao3 小时前
Docker安装Neo4j
docker·容器·neo4j
豆豆豆豆变7 小时前
Docker轻量级可视化工具Portainer
docker·容器·自动化运维
花晓木7 小时前
k8s etcd 数据损坏处理方式
容器·kubernetes·etcd
运维&陈同学7 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero
花晓木7 小时前
k8s备份 ETCD , 使用velero工具进行备份
容器·kubernetes·etcd
大熊程序猿7 小时前
xxl-job docker 安装
运维·docker·容器
shelby_loo7 小时前
使用 Docker 在 Ubuntu 下部署 Cloudflared Tunnel 服务器
服务器·ubuntu·docker
咏颜8 小时前
Ubuntu离线安装Docker容器
linux·运维·服务器·经验分享·ubuntu·docker