前言
在折腾 docker 的路上,必然会遇到拉取镜像速度不理想的问题,在加上可能会需要私有的镜像仓库.而使用 docker 官方的 registry 镜像来部署服务就可以解决此两种需求.
需要注意的是 : 镜像加速和私有仓库两种需求需要分别部署.镜像加速缓存
功能需要实时比对官方镜像仓库的版本,所以当私有镜像docker push
到该仓库时由于无法和官方仓库中比对,会导致一直Retrying
无法上传.
私有镜像仓库部署
部署 registry
docker run -d --name registry --restart always \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
registry:2
客户端配置 daemon.json
镜像仓库可以提供给局域网其他客户端使用,同时也可以提供给公网用户使用.只需要配置客户端daemon.json
的insecure-registries
参数.
例如 registry 所在服务器内网
IP 为 192.168.1.5 ,供内网使用.
{
"insecure-registries": [
"192.168.1.5:5000"
]
}
例如 registry 所在服务器公网
IP 为 101.102.103.104 ,且防火墙开放了 5000 端口.
{
"insecure-registries": [
"101.102.103.104:5000"
]
}
配置完成需重载 daemon 并重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker
通过 ngixn 反向代理配置域名
当镜像仓库通过 nginx 配置了反向代理域名,则客户端无需
额外配置 daemon.json .
push & pull
标记镜像 docker tag
docker tag imagename 192.168.1.5:5000/imagename:latest
# 或
docker tag imagename registry.yourdomain.com/imagename:latest
# 无需加 HTTP/HTTPS
推送镜像 docker push
docker push 192.168.1.5:5000/imagename:latest
# 或
docker push registry.yourdomain.com/imagename:latest
# 无需加 HTTP/HTTPS
拉取镜像 docker pull
docker pull 192.168.1.5:5000/imagename:latest
# 或
docker pull registry.yourdomain.com/imagename:latest
# 无需加 HTTP/HTTPS
镜像加速缓存部署
单纯的 docker 镜像加速也可以参考以下文章配置即可,无需单独部署 registry .
配置Docker中国官方镜像加速教程
部署 registry
在网络条件更好的服务器上,通过挂载目录持久化保存镜像数据缓存,方便后续使用.
docker run -d --name registry --restart always \
-p 5000:5000 \
-v /data/registry:/var/lib/registry \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
registry:2
为指定上游远程镜像仓库为官方镜像仓库.
通过 ngixn 反向代理配置域名
推荐为加速镜像仓库服务使用反向代理来配置域名和证书使用.
客户端配置 daemon.json
客户端配置daemon.json
的registry-mirrors
参数来指定加速镜像仓库.
例如 registry 所在服务器公网
IP 为 101.102.103.104 ,且防火墙开放了 5000 端口.注意此处需要明确填写 http 协议.
{
"registry-mirrors": [
"http://101.102.103.104:5000"
]
}
例如 已为 registry 配置了域名及证书.注意此处需要明确填写 http/https 协议.
{
"registry-mirrors": [
"https://registry.yourdomain.com"
]
}
配置完成需重载 daemon 并重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker
结语
关于 registry 镜像,博主也才使用一段时间,更多的用法,安全配置,参数,功能可以参考官方文档.
5 条评论
如果你配置了daemon.json,然后用docker info命令也能看到有镜像,但是pull的时候却怎么都不走镜像,这是个bug。
只需要docker login 执行一下就好了,如果是公用的镜像随便输个账号密码就行。
相关issue解决方案:https://github.com/moby/moby/issues/30880#issuecomment-1418248355
docker login 镜像地址
命令后半段尖括号被当成xss给吞了...
ghcr.io/xxx/xxx:xxx 怎么加速啊
https://dockerproxy.com/docs
可否使用cf无服务器模式