![24d6dec4e5ab1a63b216d0379c2be540.png](https://i-blog.csdnimg.cn/blog_migrate/74aac0f21f28f82d88cf86cfbfe815d1.jpeg)
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- Docker Client客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
本篇文章我们通过一个简单的教程来向大家介绍下,如何在自己的虚拟机里搭建一个私有的Registry,Docker Registry是一个提供存储Docker镜像的服务,在一个项目小组中我们可以把我们的project打包成一个Docker image,并且把它push到Registry,当需要测试project的时候我们可以把它从Registry pull下来,并且把它部署到Docker中。
下面我们详细的描述下整个部署步骤:
步骤一:安装Docker
yum install -y docker
查看docker版本:
docker --version
![e5ab5f9b560285920cabd0d998cdce5a.png](https://i-blog.csdnimg.cn/blog_migrate/ea994b3e8f937569d37b63483b9463a7.jpeg)
启动docker:
systemctl enable dockersystemctl start docker
查看docker服务是否启动
ps auwx | grep docker
![3436b24d456d518259d80b2ce77bd13a.png](https://i-blog.csdnimg.cn/blog_migrate/4a908687c8a6f12e670a96847273b958.jpeg)
步骤二:Pull Registry镜像
docker pull docker.io/registry:latestdocker pull konradkleine/docker-registry-frontend:v2
查看Docker镜像
docker images
![d02f243264bea54fbadcc7acc294c10c.png](https://i-blog.csdnimg.cn/blog_migrate/027853f2e82344311a31dce5a954bff3.jpeg)
步骤三:运行Registry和Registry Web UI镜像
docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry:latest
查看Registry是否运行起来
docker ps -a
![b9fea6245731771291ab193a571d982c.png](https://i-blog.csdnimg.cn/blog_migrate/68f6d39e6a94e79eaeeb26df7b630cdf.jpeg)
验证Registry Service是否正常
curl http://localhost:5000/v2/_catalog
![5fd21b13a24681175e7f6527866b6a9c.png](https://i-blog.csdnimg.cn/blog_migrate/b46c149e674a5cd87e7f2312a002c901.jpeg)
因为我们还没有向Registry push任何image,所以通过Registry API查询repositories为空。
运行docker-registry-frontend,主要是提供web UI,方便查看Docker image
docker run -d --link registry:registry --name registry-frontend -e ENV_DOCKER_REGISTRY_HOST=registry -e ENV_DOCKER_REGISTRY_PORT=5000 -p 9090:80 konradkleine/docker-registry-frontend:v2
--link:docker-registry-frontend需要访问registry后端API,所以需要在这里加上此参数,并且ENV_DOCKER_REGISTRY_HOST参数必须是registry的name;
查看docker-registry-frontend是否运行
docker ps -a
![42c718c5dcd92c875a5262f284f387f1.png](https://i-blog.csdnimg.cn/blog_migrate/7e244b22c3d073531aafe2c2dd580885.jpeg)
通过浏览器访问registry-frontend web UI,由于虚拟机绑定的静态IP地址是10.0.0.10,所以访问URL是http://10.0.0.10:9090
![5b9bc343c79168374aebf65eccd49699.png](https://i-blog.csdnimg.cn/blog_migrate/d08dd17184da39d18b785320390bcded.jpeg)
步骤四:验证整个Registry是否工作正常
pull一个最小的Docker image用于测试
docker pull daocloud.io/library/busyboxdocker tag daocloud.io/library/busybox:latest 10.0.0.10:5000/test/busybox:latestdocker push 10.0.0.10:5000/test/busyboxThe push refers to a repository [10.0.0.10:5000/test/busybox]Get https://10.0.0.10:5000/v1/_ping: http: server gave HTTP response to HTTPS client
出现上面错误是由于Client端采用https,而Registry Server端采用http导致的,需要修改docker配置文件统一采用http协议,修改内容如下:
![39ef1a039178f922de068b456709643c.png](https://i-blog.csdnimg.cn/blog_migrate/91dfc177416d7f27740dd83c211f8533.jpeg)
修改后重启Docker
systemctl restart dockerdocker push 10.0.0.10:5000/test/busybox
![c4597674587ce3863a444e2301b188e9.png](https://i-blog.csdnimg.cn/blog_migrate/0c281a85bde81fae30a1fd4a175447ed.jpeg)
再次调用Registry API查看repositories:
curl http://localhost:5000/v2/_catalog
![7e6d152c121e6195918ad6408a87148f.png](https://i-blog.csdnimg.cn/blog_migrate/1614a58a295cb6b15a4622abe936c5a8.jpeg)
发现repositories已经有image了,就是我们刚才push到Registry中的。
再次访问:http://10.0.0.10:9090/repositories
![2301915eee02c47f431cf06265176d7b.png](https://i-blog.csdnimg.cn/blog_migrate/da40dc93c5f9d34fa4c005167191f6b0.jpeg)
registry-frontend web UI也出现了我们刚才push的image。
到此,一个私有Docker Registry的整个安装过程已经介绍完了。通过上述步骤,我们看到Registry和Registry frontend在整个系统中扮演的角色非常分明,Registry提供Docker Image存储功能以及提供API服务,Registry frontend提供Web UI服务,使用户方便查看存储在Registry中的镜像文件。
参考:
https://github.com/docker/distribution
https://github.com/kwk/docker-registry-frontend
文章如有不妥之处,欢迎指正!谢谢!