与镜像的Docker私有registry

我创build了两个Docker容器。 第一个提供了一个私人的Dockerregistry,第二个是官方Dockerregistry的镜像:

docker run -d --name registry -v /local/path/to/registry:/registry -e SETTINGS_FLAVOR=local -e STORAGE_PATH=/registry -p 5000:5000 registry docker run -d --name mirror -v /local/path/to/mirror:/registry -e STORAGE_PATH=/registry -e STANDALONE=false -e MIRROR_SOURCE=https:/registry-1.docker.io -e MIRROR_SOURCE_INDEX=https://index.docker.io -p 5555:5000 registry 

现在我想结合两者。 每当用户图像,它应该首先查询私人registry,然后镜像。 而当图片被推送时,他们只能被推送到私人registry。

我不知道如何做到这一点。 任何帮助表示赞赏。

你不能只强制所有的docker推送命令推送到您的私人registry。 一个原因是你可以有任何数量的这些寄存器。 您必须先通过标记图像来告诉docker在哪里推送(请参见下方)。

这里是如何设置docker主机使用正在运行的私有registry和本地镜像。

客户端设置

让我们假设你在dockerstore (可parsing的)主机上运行镜像和私有registry。 镜像端口5555,registry5000。

然后在客户端机器上,您应该将额外的选项传递给docker守护进程启动。 在你的情况下:

  1. 添加--registry-mirror=http://dockerstore:5555来告诉守护进程使用本地镜像而不是dockerhub。 资源
  2. 添加--insecure-registry dockerstore:5000来访问私有registry,无需进一步configuration。 看到这个答案
  3. 重新启动docker守护进程

使用镜子

当你拉任何图像时,第一个来源将是本地镜像。 你可以通过运行docker pull来确认,例如

 docker pull debian 

在输出将有消息,图像正在从你的镜子 – dockerstore:5000

使用本地registry

为了首先推送到私人registry,您必须标记图像以使用registry的全名推送。 确保你在标签的第一部分有一个点或冒号,告诉docker这个图像应该被推送到私人registry。

Docker会查找“。”(域分隔符)或“:”(端口分隔符),以获知存储库名称的第一部分是位置而不是用户名。

例:

标签30d39e59ffe2图像作为dockerstore:5000 / myapp:稳定

 docker tag 30d39e59ffe2 dockerstore:5000/myapp:stable 

将其推送到私人registry

 docker push dockerstore:5000/myapp:stable 

那你也可以拉

 docker pull dockerstore:5000/myapp:stable 

存储库名称旨在是全局的 ,即存储库redis始终是指Docker Hub的官方Redis映像。 如果要使用私有registry,则使用registry的名称(如localhost.localdomain:5000/myimage:mytag为存储库名称加前缀。

所以当你拉或推,它会自动去相关的registry。 镜像应该很容易设置,只需要使用--registry-mirror=参数将URL传递给守护进程。

这对于企业用户来说并不完美,所以这个(封闭的)Docker问题 。

要明确, docker文件确认:

目前无法镜像另一个私人registry。 只有中央集线器才能被镜像。