Docker---建立registry私有仓库
Docker Hub作为Docker默认官方公共镜像,如果想要自己搭建私有镜像残酷,官方也提供Registry镜像,使得我们搭建私有仓库变得非常简单。
所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。
仓库的原理:Docker模型的核心部分是有效的利用分层镜像的机制,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体应用的镜像。不同的Docker容器可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。由于最终镜像是以压缩包的方式静态存储在服务器端,这种存储适用于对象存储
使用docker pull 获取镜像的过程
1.1 搭建镜像仓库
首先,下载Registry镜像并启动
docker pull registry
1、创建本地镜像仓库映射目录
mkdir -p /opt/data/registry #在宿主机创建容器内的数据映射挂载目录
2、启动本地镜像仓库(registry容器)
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry --name private_registry registry
-d : 让容器可以后台运行
-p :指定映射端口(前者是宿主机的端口号,后者是容器的端口号)
-v :数据挂载(前者是宿主机的目录,后者是容器的目录)
--name: 为运行的容器命名
最后,在客户端查看镜像仓库中的所有镜像
curl http://your-server-ip:5000/v2/_catalog
1.2 上传镜像
首先,为了让客户端服务器能够快速地访问刚刚在服务端搭建的镜像仓库(默认情况下是需要配置HTTPS证书的),这里简单在客户端配置一下私有仓库的可信任设置让我们可以通过HTTP直接访问:# vim /etc/docker/daemon.json
加上下面这一句,这里的"your-server-ip"请换为你的服务器的外网IP地址:
{ "insecure-registries" : [ "your-server-ip:5000" ] }
PS:如果不设置可信任源,又没有配置HTTPS证书,那么会遇到这个错误:error: Get https://ip:port/v1/_ping: http: server gave HTTP response to HTTPS client.
为了使得配置生效,重新启动docker服务:# systemctl restart docker
其次,为要上传的镜像打Tag
docker tag your-image-name:tagname your-server-ip:5000/your-image-name:tagname
最后,开始正式上传镜像到服务端镜像仓库
docker push your-registry-server-ip:5000/your-image-name:tagname
这时我们可以再次通过访问API验证镜像仓库的内容:
1.3 下载镜像
下载镜像就很简单了,使用pull命令即可:
docker pull your-server-ip:5000/your-image-name:tagname
示例:
如果想要知道要下载的镜像都有哪些tag(或版本),可以通过下面这个api来获取:
curl http://your-server-ip:5000/v2/your-image-name/tags/list
个人感觉:对于个人开发者或开源社区而言,docker hub主要提供的是类似于github的共享公共仓库(当然docker hub也有提供私有仓库)。对于小团队而言,官方提供的Registry项目可以帮助小团队快速地构建起自己的镜像仓库把精力更多放在快速迭代上面。而对于中大规模的团队,Harbor的企业级特性更加适合此类型的团队使用。