如何设置作为代理的 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/

但是不支持推送到这样的注册表:

https://docs.docker.com/registry/configuration/#proxy

第 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"]}