一、镜像拉取代理
由于国内防护墙原因,无法从以下仓库进行镜像拉取
- docker.io:docker官方仓库
- ghcr.io:GitHub官方仓库
- gcr.io:谷歌官方仓库
- k8s.gcr.io/registry.k8s.io:k8s官方谷歌仓库
- quay.io:红帽官方仓库
- mcr.microsoft.com:微软官方仓库
如需要拉取以上仓库镜像需要通过特殊的方法进行拉取一般有如下几种方式
- 使用公有云申请国外区域服务器进行镜像拉取之后load到本地或推送到自己的仓库(推荐阿里云仓库免费版有300配额个数)
- 使用VPN工具,在本地使用虚拟机安装docker配置代理可直接使用
docker pull
命令拉取 - 购买国外服务器自行部署镜像代理服务,使用代理服务拉取
- 使用国内其他厂商的代理服务拉取
二、代理服务crproxy
官方文档:https://github.com/DaoCloud/crproxy/releases
需要有一台国外服务器并且可以访问互联网,且有一个公网IP,最大的好处是别人也是可以使用的。
2.1 单人使用简单部署
#下载二进制文件包
wget https://github.com/DaoCloud/crproxy/releases/download/v0.8.0-rc.11/crproxy_linux_amd64
#设置权限
chmod +x crproxy_linux_amd64
mv crproxy_linux_amd64 /usr/local/bin/crproxy
#配置service文件
cat /etc/systemd/system/crproxy.service
[Unit]
Description=crproxy
Documentation=https://github.com/DaoCloud/crproxy
Wants=network-noline.target
After=network-noline.target
[Service]
ExecStart=/usr/local/bin/crproxy --address ":5050"
Restart=always
[Install]
WantedBy=multi-user.target
#启动服务
systemctl --now enable crproxy.service
客户端使用
#修改docker配置文件/etc/docker/daemon.json
{
"insecure-registries": ["你的服务器IP:5050"]
}
#拉取命令如下
docker pull 你的服务器IP:5050/docker.io/library/registry:latest
#镜像地址说明
# 你的服务器IP:5050/你拉取的镜像地址
# docker镜像需要使用docker.io前缀如果没有一级项目名称需要添加library,如nginx镜像需要写为docker.io/library/nginx:latest
2.2 代理缓存模式
crproxy+registry构建代理缓存集群,crproxy部署与上面部署一致主要说明registry部署
#需要安装docker
docker pull docker.io/library/registry:latest
#创建配置文件config.yml
version: 0.1
log:
fields:
service: registry
level: info
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
proxy:
enabled: true
remoteurl: http://127.0.0.1:5050
http:
addr: :5000
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
#运行服务
docker run -it -d --network host -v /data/registry:/var/lib/registry -v /root/config.yml:/etc/docker/registry/config.yml --restart=always --name registry registry:latest
客户端使用与单人使用一致但是拉取入口需要配置为registry监听的端口。拉取过的镜像会缓存在registry中,registry无法进行镜像push,只能镜像镜像拉取。