自建 docker 镜像服务
由于众所众知的原因,docker pull
在国内不好使。在开发环境会影响工作学习,在生产环境会影响产品部署。
国内有一些服务商提供了 Docker 镜像服务,但出于供应链安全的考虑,我不建议使用第三方服务。好在 Docker 官方提供了搭建镜像服务的工具,自己也可以很方便的搭建一个镜像服务。下面来看如何实现。
准备服务器
准备一台境外服务器,需要能在国内直接访问,云服务商不限。
在服务器上安装 docker。
启动镜像服务
为了方便管理配置,这里使用 docker compose。
在服务器上新建文件 compose.yml
,内容为:
services:
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
volumes:
- /data/registry:/var/lib/registry
其中 REGISTRY_PROXY_REMOTEURL
将 docker 官方 registry 设为上游源,当本地没有找到对应镜像时,会从上游源拉取并缓存镜像。
如果你需要拉取私有源,那么还要设置 REGISTRY_PROXY_USERNAME
和 REGISTRY_PROXY_PASSWORD
,更多配置可参考官方文档。
volumes
部分则设置了数据存储目录,根据你的数据盘路径不同需要自行修改。
编辑完成后,执行 docker compose up -d
启动服务。
用 caddy 提供 web 服务
docker registry 镜像本身可以提供 TLS 和身份验证等功能,但由于我对 caddy 更熟悉,所以选择使用 caddy 提供 web 服务。
首先安装 caddy server,然后在 Caddyfile 中添加配置:
registry-mirror.example.com {
# IP 白名单
@denied not remote_ip xx.xx.xx.xx
abort @denied
reverse_proxy localhost:5000
}
由于我不打算提供公众服务,所以增加了 IP 白名单限制。如果不作限制,小心流量费爆表!
不要忘了在 DNS 添加你的域名记录。
配置完成后重启 caddy 服务。
部署服务器配置
在需要拉取镜像的部署服务器上,添加配置 /etc/docker/daemon.json
:
{
"registry-mirrors": ["https://registry-mirror.example.com"]
}
保存后重启 docker 服务:
systemctl restart docker
现在测试 docker pull <image>
,顺利的话就可以正常 pull 镜像了。
习惯性先看官方的~
原来自建 Docker 镜像这么简单,我用 Nexus3 自建老麻烦了
谢谢,Great