跳到主要内容

Docker镜像加速

Docker 拉取镜像速度在国内特别慢,为了解决这个问题,采用了如下三种方法:

  1. DockerHub镜像加速器
  2. Docker Proxy 代理
  3. 使用本地代理

Docker Hub 镜像加速器

Reference From: Docker Hub 镜像加速器

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务。

配置

创建或修改 /etc/docker/daemon.json

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

需要注意的是,上述加速服务可能会失效, Docker Hub 加速器列表 中可以找到有效的地址。

检查加速器是否生效

命令行执行 docker info,如果从结果中看到了如下内容,说明配置成功。

Registry Mirrors:
[...]
https://docker.m.daocloud.io

Docker Hub 镜像测速

使用镜像前后,可使用 time 统计所花费的总时间。测速前先移除本地的镜像!

$ docker rmi node:latest
$ time docker pull node:latest
Pulling repository node
[...]

real 1m14.078s
user 0m0.176s
sys 0m0.120s

Docker Proxy 代理

上述方案,可以为从Docker Hub 拉取镜像进行加速,对于非Docker Hub的镜像如何提供加速服务。

Docker Proxy 提供了解决方案,直接将镜像名前加上*dockerproxy.com/*即可。

Reference From: Docker Proxy 使用文档

Docker Hub 官方镜像代理

常规镜像代理

官方命令:docker pull stilleshan/frpc:latest 代理命令:docker pull dockerproxy.com/stilleshan/frpc:latest

根镜像代理

官方命令:docker pull nginx:latest 代理命令:docker pull dockerproxy.com/library/nginx:latest

GitHub Container Registry

常规镜像代理

官方命令:docker pull ghcr.io/username/image:tag 代理命令:docker pull ghcr.dockerproxy.com/username/image:tag

Google Container Registry

常规镜像代理

官方命令:docker pull gcr.io/username/image:tag 代理命令:docker pull gcr.dockerproxy.com/username/image:tag

Google Kubernetes

常规镜像代理

官方命令:docker pull k8s.gcr.io/username/image:tag 官方命令:docker pull registry.k8s.io/username/image:tag 代理命令:docker pull k8s.dockerproxy.com/username/image:tag

根镜像代理

官方命令:docker pull k8s.gcr.io/coredns:1.6.5 官方命令:docker pull registry.k8s.io/coredns:1.6.5 代理命令:docker pull k8s.dockerproxy.com/coredns:1.6.5

Quay.io

常规镜像代理

官方命令:docker pull quay.io/username/image:tag 代理命令:docker pull quay.dockerproxy.com/username/image:tag

本地代理

Reference: Docker的三种网络代理配置Configure the Docker daemon to use a proxy server|Docker Document

在执行docker pull时,是由守护进程dockerd来执行。 因此,代理需要配在dockerd的环境中。 而这个环境,则是受systemd所管控,因此实际是systemd的配置。

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf

在这个proxy.conf文件(可以是任意*.conf的形式)中,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

其中,proxy.example.com:8080要换成可用的免密代理。 通常使用cntlm在本机自建免密代理,去对接公司的代理。

dockerd代理的修改比较特殊,它实际上是改systemd的配置,因此需要重载systemd并重启dockerd才能生效。

sudo systemctl daemon-reload
sudo systemctl restart docker