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