Docker镜像加速

14 阅读2分钟

Docker 镜像加速

默认从 Docker Hub 拉镜像,国内网络基本拉不动,必须配镜像加速器。

一、写配置

mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://hub-mirror.c.163.com",
    "https://my1tmn29.mirror.aliyuncs.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

每个字段什么意思:

字段作用
registry-mirrors镜像加速站点(按顺序尝试,第一个可用就生效)
exec-opts设置 docker 的 cgroup 驱动。CentOS 7 保持 cgroupfs 也可以;如果宿主机 systemd 版本较新,用 systemd 更统一(K8s 1.24+ 要求运行时和 kubelet 的 cgroup driver 一致)
log-driver日志驱动,默认 json-file
log-opts.max-size单个日志文件最大 100m(不限制的话容器日志会把磁盘写满)
log-opts.max-file最多保留 3 个文件(轮转)

★ 为什么必须配 log-opts:容器日志默认写进 json-file 且不限制大小,一个疯狂打日志的容器能把磁盘写满。这是生产必配项,也是面试常问的"容器日志怎么控制"。

二、生效与检验

systemctl daemon-reload        # daemon.json 改了要先 reload
systemctl restart docker       # 再重启 docker
systemctl status docker        # 确认 active (running)

docker info | grep -A5 "Registry Mirrors"

预期输出:

 Registry Mirrors:
  https://docker.1ms.run/
  https://docker.xuanyuan.me/
  https://hub-mirror.c.163.com/
  https://my1tmn29.mirror.aliyuncs.com/

docker info 里能看到这几行,就说明加速器生效了(这是"加速器是否生效"的唯一权威判断方式,不是看文件)。

三、加速地址从哪找(三类来源)

来源地址
阿里云专属加速器(最稳,推荐)阿里云控制台 → 容器镜像服务 ACR → 镜像工具 → 镜像加速器,形如 https://<你的ID>.mirror.aliyuncs.com
商业镜像同步站轩辕镜像 https://xuanyuan.cloud/、毫秒镜像 https://1ms.run/
镜像站(可查镜像是否存在)https://docker.aityp.com/,例:https://docker.aityp.com/image/docker.io/tomcat:9.0.107-jdk21

坑(重要):

  1. 公共加速地址失效非常快(有的已停服),强烈建议换成自己阿里云控制台申请的专属地址;
  2. 不要填这些:https://hub.docker.com(官方仓库,不是加速器)、https://cr.console.aliyun.com(控制台地址,不是加速器);
  3. 失效的地址排在前面会浪费超时时间,拖慢每一次拉取,所以列表要精简;
  4. 改完 daemon.json 一定要 systemctl daemon-reload + systemctl restart docker,只 reload 不 restart 不生效;
  5. JSON 写错(多逗号、少引号)会导致 docker 起不来,改完先校验:python -m json.tool /etc/docker/daemon.json。