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守护程序启动.在你的情况下:
--registry-mirror=http://dockerstore:5555告诉守护进程更喜欢使用本地镜像而不是dockerhub.资源--insecure-registry dockerstore:5000以访问私有注册表而无需进一步配置.看到这个答案拉动任何图像时,第一个源将是本地镜像.您可以通过运行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)
[来源]
| 归档时间: |
|
| 查看次数: |
21229 次 |
| 最近记录: |