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
启动docker:
systemctl enable dockersystemctl start docker
查看docker服务是否启动
ps auwx | grep docker
步骤二:Pull Registry镜像
docker pull docker.io/registry:latestdocker pull konradkleine/docker-registry-frontend:v2
查看Docker镜像
docker images
步骤三:运行Registry和Registry Web UI镜像
docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry:latest
查看Registry是否运行起来
docker ps -a
验证Registry Service是否正常
curl http://localhost:5000/v2/_catalog
因为我们还没有向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
通过浏览器访问registry-frontend web UI,由于虚拟机绑定的静态IP地址是10.0.0.10,所以访问URL是http://10.0.0.10:9090
步骤四:验证整个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协议,修改内容如下:
修改后重启Docker
systemctl restart dockerdocker push 10.0.0.10:5000/test/busybox
再次调用Registry API查看repositories:
curl http://localhost:5000/v2/_catalog
发现repositories已经有image了,就是我们刚才push到Registry中的。
再次访问:http://10.0.0.10:9090/repositories
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
文章如有不妥之处,欢迎指正!谢谢!