性能调优之 Docker

Docker 性能调优

Posted by 董江 on Friday, December 13, 2019

上传/下载调优

调整 Docker 镜像下载最大并发数

通过配置镜像上传\下载并发数max-concurrent-downloads,max-concurrent-uploads,缩短镜像上传\下载的时间。

配置镜像加速地址

通过配置镜像加速地址registry-mirrors,可以很大程度提高镜像下载速度。

存储驱动调优

配置 Docker 存储驱动时,建议使用新版的 overlay2,因为它更稳定。OverlayFS 是一个新一代的联合文件系统,类似于 AUFS,但速度更快,实现更简单。Docker 为 OverlayFS 提供了两个存储驱动程序:旧版的 overlay 和新版的overlay2

日志文件调优

容器中会产生大量日志文件,很容器占满磁盘空间。您可以在全局范围限制日志文件大小max-size和日志文件数量max-file,可以有效控制日志文件对磁盘的占用量,如下图所示,您可以将日志文件大小max-size设为 30Mb,日志文件数量max-file设为 10。完成设置后,请运行systemctl daemon-reload命令,重新加载配置文件;然后运行systemctl restart docker命令,重启 Docker。重启后调优规则马上生效。日志文件存储的机制是这样的:

  • 日志不满 30Mb 的情况下,只会生成一个*.log文件,存储日志内容。
  • 日志超出 30Mb,但少于 300Mb(数量限制 x 大小限制)的情况下,会生成*.log*.log.1*.log.2*.log.n(n 小于或等于 9)这几个文件存储日志内容。
  • 日志超出 300Mb(数量限制 x 大小限制),会按照生成 log 文件的时间,由早到晚依次将*.log*.log.1*.log.2*.log.n的日志内容替换成最近的日志内容。

开启WARNING: No swap limit support,WARNING: No memory limit support支持

对于 Ubuntu\Debian 系统,执行docker info命令时能看到警告WARNING: No swap limit support或者WARNING No memory limit support。因为 Ubuntu\Debian 系统默认关闭了swap account或者功能,这样会导致设置容器内存或者 swap 资源限制不生效,可以通过以下命令解决:

# 统一网卡名称为ethx
sudo sed -i 's/en[[:alnum:]]*/eth0/g' /etc/network/interfaces;
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 cgroup_enable=memory swapaccount=1 biosdevname=0 \1"/g' /etc/default/grub;
sudo update-grub;

修改 Docker 默认 IP 地址 (可选)

Docker 第一次运行时会自动创建名为 docker0 的网络接口,默认接口地址为172.17.0.1/16。在一些企业中,可能已经使用了这个网段的地址,或者规划以后会使用这个网段的地址。所以,建议在安装好 docker 服务后,第一时间修改 docker0 接口地址,避免后期出现网段冲突。

  • 停止 docker 运行

systemctl stop docker.service

  • 删除已有的 docker0 接口

sudo ip link del docker0

  • 修改 docker 配置文件

    /etc/docker/daemon.json中添加"bip": "192.168.1.1/24",

综合配置调优

touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<EOF
{
    "oom-score-adjust": -1000,
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "bip": "192.168.1.1/24",
    "registry-mirrors": ["https://registry-xxxxx.mirror.aliyuncs.com"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
}
EOF
systemctl daemon-reload && systemctl restart docker

docker.service 配置调优

对于 CentOS 系统,docker.service 默认位于/usr/lib/systemd/system/docker.service;对于 Ubuntu 系统,docker.service 默认位于/lib/systemd/system/docker.service。编辑docker.service,添加以下参数

  • 防止 docker 服务 OOM:

OOMScoreAdjust=-1000

  • 开启 iptables 转发链:

ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT (centos) ExecStartPost=/sbin/iptables -P FORWARD ACCEPT (ubuntu)

「如果这篇文章对你有用,请随意打赏」

Kubeservice博客

如果这篇文章对你有用,请随意打赏

使用微信扫描二维码完成支付