Docker私有注册表与镜像

h3n*_*rik 15 docker docker-registry

我创建了两个Docker容器.第一个提供私有Docker注册表,第二个是官方Docker注册表的镜像:

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
Run Code Online (Sandbox Code Playgroud)

现在我想两者结合起来.每当用户提取图像时,它应首先查询私有注册表,然后查询镜像.当图像被推送时,它们应该只被推送到私人注册表.

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

Tom*_*ski 17

您不能只强制所有docker push命令推送到您的私人注册表.一个原因是你可以拥有任意数量的寄存器.你必须首先通过标记图像告诉docker在哪里推送(见下图).

以下是如何设置docker主机以使用正在运行的私有注册表和本地镜像.

客户端设置

让我们假设您在名为dockerstore的(可解析的)主机上运行镜像和私有注册表.镜像端口5555,注册表5000.

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

  1. 添加--registry-mirror=http://dockerstore:5555告诉守护进程更喜欢使用本地镜像而不是dockerhub.资源
  2. 添加--insecure-registry dockerstore:5000以访问私有注册表而无需进一步配置.看到这个答案
  3. 重启docker守护进程

使用镜子

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

docker pull debian
Run Code Online (Sandbox Code Playgroud)

在输出中会有消息显示图像正从镜像中拉出 - dockerstore:5000

使用本地注册表

为了首先推送到私人注册表,您必须使用注册表的全名标记要推送的图像.确保标记第一部分中有一个点或冒号,告诉docker该图像应该被推送到私有注册表.

Docker查找"."(域分隔符)或":"(端口分隔符)以了解存储库名称的第一部分是位置而不是用户名.

例:

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

docker tag 30d39e59ffe2 dockerstore:5000/myapp:stable
Run Code Online (Sandbox Code Playgroud)

将其推送到私人注册表

docker push dockerstore:5000/myapp:stable
Run Code Online (Sandbox Code Playgroud)

然后你也可以拉

docker pull dockerstore:5000/myapp:stable
Run Code Online (Sandbox Code Playgroud)


Emm*_*N K 15

如果不存在,则创建该文件:

sudo nano /etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)

然后粘贴以下内容:

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}
Run Code Online (Sandbox Code Playgroud)

然后重新启动 Docker 守护进程

$ sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

[来源]


Jos*_*iah 9

需要明确的是,docker 文档确认了:

\n\n
\n

它\xe2\x80\x99s 目前无法镜像另一个私有注册表。只有中央集线器可以被镜像。

\n
\n

  • 那么,最好的解决方案可能是使用 Red Hat 的 Docker 分支 (v1.10)。您可以使用“--add-registry”和“--registry-mirror”标志。我发现这还有一个额外的好处,那就是能够通过镜像(从官方库)拉取图像,将其推回到私有注册表中,然后从私有注册表中拉取,所有这些都不需要对图像进行任何重新标记。 (5认同)