如何设置作为代理的 docker 注册表?
How to set-up a docker registry acting as a Proxy?
我有一个服务器(让我们将其命名为 A),它可以访问互联网并且我可以从官方 docker.io 注册表中提取图像。
我还有其他服务器(B、C),出于安全原因,它们不能具有相同的访问权限,但可以访问 A。
我还决定在 A 上安装一个私有注册表,可以从 B 和 C 使用。
是否可以让这个注册中心充当代理,当我想从 B 拉取官方镜像时,可以通过 A 完成?
这被称为拉通缓存镜像,不幸的是它还不受支持。这是一项正在进行的工作!参见 docker/distribution#19。
同时这是可能的:
https://blog.docker.com/2015/10/registry-proxy-cache-docker-open-source/
https://docs.docker.com/registry/recipes/mirror/
但是不支持推送到这样的注册表:
第 1 步:运行 具有代理配置的注册表版本 2+
您需要运行 docker 注册一个 proxy 配置。
获得初始config.yml
:
docker run -it --rm --entrypoint cat registry:2 /etc/docker/registry/config.yml > `pwd`/config.yml
将以下内容添加到 config.yml
:
proxy:
remoteurl: https://registry-1.docker.io
然后使用 config.yml
:
启动 docker 注册表
docker run -d --restart=always -p 5000:5000 --name docker-registry-proxy -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2
第 2 步:在客户端上配置 Docker 守护程序
如果您使用 Docker 作为 Mac(不是 Docker 工具箱或 boot2docker),只需将 http://<proxy-ip>:5000
添加到高级选项卡下的镜像部分:
为 Mac 重新启动 Docker。
否则,您需要使用 --registry-mirror=http://<proxy_ip>:5000
运行 docker 守护程序,方法是在客户端或 Docker Toolbox VM 上执行以下操作:
docker --registry-mirror=https://<my-docker-mirror-host> daemon
第 3 步:验证代理是否正常工作:
尝试拉取您还没有的图像:
docker pull nginx
然后验证代理目录是否有新图像:
curl https://<proxy_ip>:5000/v2/_catalog
它应该 return 一些东西,包括你刚刚拉取的图像。
"repositories":["library/nginx"]}
v2 注册表代理没有发生,我安装了 2.1 版,使我能够进行缓存。这是我遵循的步骤。
root@mahasan-Inspiron-5537:~# docker run -it --rm --entrypoint cat registry:2.1 /etc/docker/registry/config.yml > config.yml
打开 config.yml 并添加以下行。
root@mahasan-Inspiron-5537:~# vim config.yml
proxy:
remoteurl: https://registry-1.docker.io
root@mahasan-Inspiron-5537:~# docker run -d --restart=always -p 5000:5000 --name docker-registry-proxy-2 -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2.1
下一步停止 Docker 守护程序并使用以下参数启动。
root@mahasan-Inspiron-5537:~# dockerd --registry-mirror=http://localhost:5000
现在使用 docker 守护进程拉取任何镜像。
root@mahasan-Inspiron-5537:~# docker pull nginx
现在检查存储库目录以确保缓存和代理正在发生。
root@mahasan-Inspiron-5537:~# curl http://localhost:5000/v2/_catalog
{"repositories":["library/nginx"]}
我有一个服务器(让我们将其命名为 A),它可以访问互联网并且我可以从官方 docker.io 注册表中提取图像。
我还有其他服务器(B、C),出于安全原因,它们不能具有相同的访问权限,但可以访问 A。
我还决定在 A 上安装一个私有注册表,可以从 B 和 C 使用。
是否可以让这个注册中心充当代理,当我想从 B 拉取官方镜像时,可以通过 A 完成?
这被称为拉通缓存镜像,不幸的是它还不受支持。这是一项正在进行的工作!参见 docker/distribution#19。
同时这是可能的:
https://blog.docker.com/2015/10/registry-proxy-cache-docker-open-source/
https://docs.docker.com/registry/recipes/mirror/
但是不支持推送到这样的注册表:
第 1 步:运行 具有代理配置的注册表版本 2+
您需要运行 docker 注册一个 proxy 配置。
获得初始config.yml
:
docker run -it --rm --entrypoint cat registry:2 /etc/docker/registry/config.yml > `pwd`/config.yml
将以下内容添加到 config.yml
:
proxy:
remoteurl: https://registry-1.docker.io
然后使用 config.yml
:
docker run -d --restart=always -p 5000:5000 --name docker-registry-proxy -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2
第 2 步:在客户端上配置 Docker 守护程序
如果您使用 Docker 作为 Mac(不是 Docker 工具箱或 boot2docker),只需将 http://<proxy-ip>:5000
添加到高级选项卡下的镜像部分:
为 Mac 重新启动 Docker。
否则,您需要使用 --registry-mirror=http://<proxy_ip>:5000
运行 docker 守护程序,方法是在客户端或 Docker Toolbox VM 上执行以下操作:
docker --registry-mirror=https://<my-docker-mirror-host> daemon
第 3 步:验证代理是否正常工作:
尝试拉取您还没有的图像:
docker pull nginx
然后验证代理目录是否有新图像:
curl https://<proxy_ip>:5000/v2/_catalog
它应该 return 一些东西,包括你刚刚拉取的图像。
"repositories":["library/nginx"]}
v2 注册表代理没有发生,我安装了 2.1 版,使我能够进行缓存。这是我遵循的步骤。
root@mahasan-Inspiron-5537:~# docker run -it --rm --entrypoint cat registry:2.1 /etc/docker/registry/config.yml > config.yml
打开 config.yml 并添加以下行。
root@mahasan-Inspiron-5537:~# vim config.yml
proxy:
remoteurl: https://registry-1.docker.io
root@mahasan-Inspiron-5537:~# docker run -d --restart=always -p 5000:5000 --name docker-registry-proxy-2 -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2.1
下一步停止 Docker 守护程序并使用以下参数启动。
root@mahasan-Inspiron-5537:~# dockerd --registry-mirror=http://localhost:5000
现在使用 docker 守护进程拉取任何镜像。
root@mahasan-Inspiron-5537:~# docker pull nginx
现在检查存储库目录以确保缓存和代理正在发生。
root@mahasan-Inspiron-5537:~# curl http://localhost:5000/v2/_catalog
{"repositories":["library/nginx"]}