Docker 私有仓库 registry

Docker 仓库(Repository)是集中存放镜像的地方。我们拉取镜像的时候,除了使用 Docker 官方的公共仓库 Docker Hub 外,还可以使用自行搭建的本地私有仓库。

搭建本地私有仓库主要有两种方式:registry 和 harbor。

本文介绍使用 registry 搭建私有仓库。

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

 

1. 拉取 registry 镜像

$ docker pull registry

我们将 registry 最新镜像 registry:latest 下载到本地。

 

2. 创建私有仓库镜像的存储目录

$ mkdir /opt/registry

我们可以根据机器的实际情况,创建合适的镜像存储目录,本文中使用了 /opt/registry 目录。

 

3. 运行 registry 容器

我们使用下载的 registry 镜像,创建 registry 容器,并设置私有仓库镜像的存储目录为 /opt/registry。

$ docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --name registry registry:latest

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

 

4. 验证 registry 搭建是否成功

我们测试将一个专门制作的镜像推送到 registry 本地私有仓库:

先通过 docker images 命令查看本地已经下载的镜像。

$ docker images

运行结果:
REPOSITORY  TAG     IMAGE ID...
alpine      latest  f70734b6a266

本地有一个已经下载的镜像 alpine:latest,我们以其为模板创建一个测试用的镜像。

查看安装 registry 服务的机器的 ip 地址,本文测试机的IP地址为 10.10.1.178。要把测试镜像推送到该机器的私有仓库,镜像名称必须符合特定的格式: registry_url:port/ImageName:tag。

我们测试镜像的名称为:10.10.1.178:5000/alpine:latest。

使用 docker tag 命令创建测试镜像:

$ docker tag alpine:latest 10.10.1.178:5000/alpine:latest

使用 docker push 命令把测试镜像推送到私有仓库:

$ docker push 10.10.1.178:5000/alpine:latest

执行结果:
The push refers to a repository [10.10.1.178:5000/alpine]
Get https://10.10.1.178:5000/v2/: http: server gave HTTP response to HTTPS client

以上执行结果是错误的,因为我们启动的registry服务不是安全可信赖的。这时需要修改客户端docker的配置文件/etc/docker/daemon.json,添加一项不安全的 insecure-registries:

{
"registry-mirrors": "insecure-registries": ["10.10.1.178:5000"]
}

使用 systemctl restart docker 命令重启 docker 服务。

再次使用 docker push 命令,把测试镜像推送到私有仓库:

$ docker push 10.10.1.178:5000/alpine:latest

执行结果:
The push refers to a repository [10.10.1.178:5000/alpine]
3e207b409db3: Pushed 

本次推送成功。

 

5. 浏览 registry 镜像列表

在浏览器中访问 http://registry-ip:5000/v2/_catalog 可以查看镜像列表。

我们访问 http://10.10.1.178:5000/v2/_catalog,返回镜像列表:

  {"repositories":["alpine"]}

私有仓库中已经有测试镜像 alpine。

我们访问 http://10.10.1.178:5000/v2/alpine/tags/list,返回标签列表:

  {"name":"alpine","tags":["latest"]}

Docker 仓库是集中存放镜像的地方。我们拉取镜像的时候,除了使用 Docker 官方的公共仓库 Docker Hub 外,还可以使用自行搭建的本地私有仓库。harbor 私有仓库是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。本文介绍使用 harbor 搭建私有仓库。