利用代理拉取docker镜像
在日常开发中经常会遇到有些镜像在 gcr.io 仓库,其仓库是google提供的,由于国内网络环境的复杂性是无法拉取到这些镜像的,这时候就需要我们想一些办法来实现拉取了。
这里给出了两种解决方法,一种是直接使用代理,这种可以直接拉取远程镜像到本地。另一种是通过中转的方法,先找一个可以直接拉取到镜像的网络,先将存储到本地,然后再转镜像上传到三方国内可以访问的镜像,如我们最常用镜像 https://hub.docker.com。
代理方式
使用代理方法的时候,如果通过直接设置 http_proxy 和 https_proxy 这两个环境变量是不可行的。如果是k8s环境的话,可能会使用到 containerd
运行时,这时可能还需要设置 crictl
配置,因此下面将分别介绍这个软件的配置方式。
如果k8s运行时,使用的是 Docker Engine ,则可以通过 docker 命令管理镜像;如果使用的是 containerd
运行时,则需要通过 crictl
命令管理镜像。
不同运行时需要不同的管理客户端,因此下面我们将一下针对这两个软件配置的不同代理配置。
如果使用的是
containerd
运行时,crictl 命令无法下载镜像的话,可能还需要配置一下 Docker 代理。
Docker 代理
主要原因是 docker 并不会使用它们,需要为 docker daemon 服务的设置代理才可以。
1. 设置docker服务代理
sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
将以下内容写入 http-proxy.conf 文件
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="ALL_PROXY=socks5://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,.docker.io,.docker.com"
上面代理地址是本机开启的代理服务监听端口,如果代理服务在局域网内的其它机器上的话,需要更换为其 ip 地址和端口号。环境变量 NO_PROXY 表示不使用代理的域名或IP。
2. 重启 docker 服务
root@ubuntu:~# systemctl daemon-reload
root@ubuntu:~# systemctl restart docker
3. 验证设置
root@ubuntu:~# systemctl show --property=Environment docker
Environment=HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890 ALL_PROXY=socks5://127.0.0.1:7890 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp,.docker.io,.docker.com
也可以使用命令 docker info
验证
By admin
read more