原文地址:https://mp.weixin.qq.com/s/tBh6kT4I5XniCoFEcn7W9A

一、简介

在 Docker 中,当我们执行 docker pull xxx 的时候 ,它实际上是从 registry.hub.docker.com 这个地址去查找,这就是 Docker 公司为我们提供的公共仓库。在工作中,我们不可能把企业项目 push 到公有仓库进行管理。所以为了更好的管理镜像,Docker 不仅提供了一个中央仓库,同时也允许我们搭建本地私有仓库。

二、registry 的搭建

1. 搭建

Docker 官方提供了一个搭建私有仓库的镜像 registry ,只需把镜像下载下来,运行容器并暴露5000端口,就可以使用了。

docker pull registry:2
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

Registry 服务默认会将上传的镜像保存在容器的 /var/lib/registry,我们将主机的 /opt/registry 目录挂载到该目录,即可实现将镜像保存到主机的 /opt/registry 目录了。

浏览器访问 http://127.0.0.1:5000/v2,出现下面情况说明 registry 运行正常。

 

2. 验证

现在通过 push 镜像到 registry 来验证一下。

查看本地镜像:

$ docker images
REPOSITORY                    TAG             IMAGE ID            CREATED             SIZE
nginx                         latest          568c4670fa80        5 weeks ago         109MB
ubuntu                        latest          93fd78260bd1        7 weeks ago         86.2MB
elasticsearch                 6.5.1           32f93c89076d        7 weeks ago         773MB

要通过 docker tag 将该镜像标志为要推送到私有仓库:

docker tag nginx:latest localhost:5000/nginx:latest

通过 docker push 命令将 nginx 镜像 push 到私有仓库中:

docker push localhost:5000/nginx:latest

访问 http://127.0.0.1:5000/v2/_catalog 查看私有仓库目录,可以看到刚上传的镜像了:

 

下载私有仓库的镜像,使用如下命令:

docker pull localhost:5000/镜像名:版本号

例如:

docker pull localhost:5000/nginx:latest

 

3. 跳过 HTTPS 验证

我们在本机可以通过仓库地址 localhost:5000 进行 push 操作,如果局域网中的其他主机想 push 镜像到本机,就要换成类似 192.168.199.100:5000 这样的地址,这时你会发现无法成功推送镜像。

因为 Docker 默认不允许非 HTTPS 方式推送镜像,我们可以通过 Docker 的配置选项来取消这个限制。

对于使用 Linux 系统的用户,请在 /etc/docker/daemon.json 中把私有仓库地址加入到 insecure-registries 列表,如:

{
  "registry-mirror": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [
    "192.168.199.100:5000"
  ]
}

对于 Windows 、 Mac 在设置中的 Docker Engine 中进行编辑 ,增加和上边一样的字符串即可。