本地搭建私有镜像Registry

1,592 阅读4分钟

在我们进行公司私有项目或者产品开发的时候,我们肯定是希望能够将我们开发的镜像私密的保存起来,这样公共仓库就不是很方便了。在这里我们可以有两种方式来保存我们私有的Image,第一种就是在本地搭建本地仓库,第二种就是利用相应的云产品提供的镜像仓库;本篇文章主要为大家介绍一下:如何在本地搭建私有仓库;本篇文章例子中应用的操作系统版本为Windows 10。

搭建本地Docker Registry

Docker官方提供了本地Registry的镜像文件,该镜像文件是基于Linux Container创建,因此我们需要将我们本地的docker切换为Linux Container,然后通过执行指令docker pull registry 指令将镜像文件拉取到本地。通过docker run指令来创建一个registry镜像的容器实例,具体指令如下:

docker run -d -p 8007:5000 --mount type=bind,source=D:/Docker/private-registry,target=/var/lib/registry --restart=always --name registry-container registry

上方指令的意思是:基于registry镜像创建一个名称为registry-container的容器实例,并将容器的5000端口与主机的8007端口进行映射,同时将本地的D:/Docker/private-registry文件夹与容器中的/var/lib/registry文件夹进行映射,并设置container的restart机制为always。默认情况下,仓库会被创建在容器的/var/lib/registry 目录下。我们可以通过-v 参数来将镜像文件存放在本地的指定路径中。以上指令就是将container中的registry文件夹与本地磁盘D盘中的private-registry文件夹做了映射。这样我们就可以在D盘的private-registry中查看到push的镜像信息。通过以上操作我们遍完成了本地私有镜像仓库的搭建。


标记镜像并上传到本地私有镜像仓库

标记本地镜像并上传到镜像库中我们介绍了如何标记本地镜像并上传到docker提供的公共镜像库中,我们可以通过指令docker tag指令对本地镜像进行标记,然后通过docker push指令将被标记的镜像上传到私有镜像库中。具体指令如下:

docker tag local-image-name ip:port/repo-name:tag 

docker push  ip:port/repo-name:tag 例如

docker tag registry ip:8007/private-registry:registrytest

docker push ip:8007/private-registry:registrytest

 指令中的参数ip为所搭建私有镜像库的主机的ip地址, 第一个指令表达的意思是将本地名为registry的镜像标记为 ip:8007/private-registry:registrytest,第二个指令表达的意思是将被标记的tag名称为registrytest的镜像上传到ip:8007中的名为private-registry的私有仓库中。 如图所示:


我们可以通过查看本地文件夹D:\Docker\private-registry,来查看从container的/var/lib/registry中映射出来的镜像信息,如下图所示:


图中的docker文件夹就是从container的/var/lib/registry 文件夹中映射出来的。

我们可以通过docker exec -it container-name bin/sh 指令进入到container所在的linux系统的指令操作界面,如 docker exec -it registycontainer1 bin/sh 

如图所示:


我们通过cd var/lib/registry 指令进入到registry的存储路径,并通过ls列举出文件夹中包含的内容,如图所示:


可以看到registry中的docker文件夹在本地D:/Docker/private-registry 文件夹中也存在。


注意:大家在搭建本地私有仓库并向其push镜像的时候可能会遇到如下错误:

1. error: Get https://ip:port/v1/_ping: http: server gave HTTP response to HTTPS client.

2. error: Skipped foreign layer received unexpected HTTP status: 500 Internal Server Error

针对以上两个问题,具体的解决方案请大家参照文章:Docker实践过程中遇到的问题总结一文中的问题7和问题8。

通过本篇文章为大家介绍了如何在本地搭建私有镜像仓库,希望能进一步加深大家对docker的学习和了解。


上一篇(灵活设置docker容器内.net core app的配置文件信息)