玩会基于registry的私有仓库

Posted Friends of the wind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩会基于registry的私有仓库相关的知识,希望对你有一定的参考价值。

目标:

1、理解概念。
2、学会搭建使用方法。


内容:

1、为什么用它?

公司服务器大部分都是私网,为了安全和方便可以搭建私有仓库,而不用完全手动的去导入导出镜像,因为是局域网拉取速度非常快,可以节省带宽和大量时间。 有时候使用 Docker Hub 这样的公共仓库可能不方便(隐私文件),用户可以创建一个本地仓库供私人使用。

2、是什么?

docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。

一般情况下,不论是通过commit容器得到的镜像,或者是用dockerfile 制作的镜像,如果需要将镜像保存,可以使用我们之前提到的导出导入命令(save -o ; load -i)。导出的包,然后再传给其他dockerHost,这种方法也是可行的。

但往往在公司会有大量的镜像,而且不仅仅是单台的dockerHost。我们迫切需要有一个本地的共用的仓库,来实现多台dockerHost直接拉取镜像而不用手动的将镜像传来传去,之前的DockerHub可以帮助我们解决这个问题,当然前提需要申请一个DockerHub的账号,创建一个仓库。但这种方法需要消耗我们的带宽,因为是通过网络传输,既然是网络传输,就需要消耗一定的时间。

Registry仓库,是通过一个容器给我们提供的服务,是比较简易的私有仓库,以后在企业中还会有功能更加完善的Harbor仓库。

registry是官方提供的工具,可以用于构建私有的镜像仓库。你可以通过获取官方 registry 镜像来运行。

案例

注意:我们使用的是registry:2版本,还有一个registry镜像,这两个没有什么大的区别。registry: 是用Python语言写的,registry:2使用Go 语言写的,理论上来说,registry:2这个版本运行更快些。

搭建基于registry的私有仓库

1)用docker容器运行registry私有仓库服务。

注:registry是官方打包好的服务,端口为5000,就像其他虚拟出来的web服务一样

命令:
docker pull registry:2

2)运行私有仓库服务

创建数据卷目录:
mkdir /registry

执行命令运行容器:
docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2

释义:
-v: 挂载目录。 宿主机的目录(如果没有此目录会自动创建):容器内的目录。(数据卷:实现容器与宿主机之间的共享,通过一个目录"卷")

–restart=always:随着docker服务的启动而启动此容器

3)镜像重命名(要上传的镜像名需要注明私仓的ip)

因为上传或下载镜像的时候,需要将镜像的名称直接重命名,要注明它私有仓库的IP地址:暴露端口。否则将识别不到仓库而上传或下载失败。

格式为:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

命令:
docker tag nginx:latest 192.168.100.205:5000/nginx

4)编辑docker配置文件(因为默认是拉取docker官方的镜像,需要重新指定)

#初次上传命令:
docker push 192.168.100.205:5000/nginx #上传私有仓库会报错

#The push refers to repository [192.168.100.205:5000/nginx]
#Get https://192.168.100.205:5000/v2/: http: server gave HTTP response to HTTPS client

解决:

因为docker默认是从dockehub上下载镜像的,需要在本地指定一下私有仓库的IP加端口,这是因为 Docker默认不允许非HTTPS 方式推送镜像。 如果没做这一步,会报HTTPS的错。

编辑docker的配置文件,指定私有仓库地址

vim /usr/lib/systemd/system/docker.service

[Service]
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.100.205:5000

#修改完成之后重新加载docker和重启
systemctl daemon-reload
systemctl restart docker

#再次上传测试
docker push 192.168.100.205:5000/nginx

5)其他dockerhost上传私有仓库

这里注意,既然是私有仓库,肯定是要考虑多台DockerHost共用的情况, 如果有其他的DockerHost想要使用私有仓库,仅需要修改docker的配置文件,指定私有仓库的IP和端口即可。当然别忘了,更改过配置文件之后, daemon-reload ,restart docker服务。

修改docker配置文件

vim /usr/lib/systemd/system/docker.service

[Service]
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.100.205:5000

systemctl daemon-reload
systemctl restart docker.service
docker info
看到私仓ip即成功


以上是关于玩会基于registry的私有仓库的主要内容,如果未能解决你的问题,请参考以下文章

Docker 部署Registry私有仓库+Harbor私有仓库

Docker--构建镜像私有仓库registry数据卷端口映射

Docker 私有仓库

Docker 私有仓库 Harbor registry 安全认证搭建 [Https]

Docker--------Harbor registry私有仓库搭建 [ Http ]

docker本地镜像推送到私有库-Docker Registry