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 搭建私有仓库。