Docker私有镜像仓库registry

483 阅读2分钟

Docker私有镜像仓库registry

registry简介

官方提供了Docker Hub网站来作为一个公开的集中仓库,然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

docker registry 就是管理 docker 镜像的服务, Docker 公司维护的 registry 就是 hub.docker.com ,它可以让我们方便的下载预先做好的镜像。

安装registry

我们可以通过获取官方的 registry 镜像来运行。

这将使用官方提供的 registry 镜像来启动私有仓库,默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。我们可以通过 -v 参数将镜像文件存放在本地的指定路径。

docker run -d \
-p 5000:5000 \
-v /tmp/data/registry:/var/lib/registry \
--restart=always \
registry

image.png

这样我们的registry已经启动起来了

访问测试

这时我们可以通过浏览器访问 http://ip:5000/v2/_catalog 查看仓库是否启动成功。

curl http://192.168.64.152:5000/v2/_catalog

image.png

上传镜像

registry 上传镜像的命名规范是 仓库IP:5000/镜像名称:tag

修改镜像名称

将我们的镜像改成服务规范的名字

docker tag baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3

image.png

推送镜像

使用命令推送镜像

docker push 192.168.64.153:5000/learn-docker-storage:0.0.3

我们发现推送报错了,这是因为docker推送默认使用的https的方式,而我们的registry只支持http的方式

image.png

修改Docker推送配置

对于 Linux 系统,我们可以在 /etc/docker/daemon.jsondaemon.josn 文件不存在则新建该文件)

 vi /etc/docker/daemon.json

添加下面的配置

{ "insecure-registries": ["仓库IP:5000"] }

完整的配置如下

{
  "insecure-registries": ["192.168.64.153:5000"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}

执行以下命令重启重新加载配置并生效

systemctl daemon-reload
service docker restart