docker push 上传harbor docker push 500_Docker


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 push 上传harbor docker push 500_docker_02


启动docker:

systemctl enable dockersystemctl start docker

查看docker服务是否启动

ps auwx | grep docker


docker push 上传harbor docker push 500_docker_03


步骤二:Pull Registry镜像

docker pull docker.io/registry:latestdocker pull konradkleine/docker-registry-frontend:v2

查看Docker镜像

docker images


docker push 上传harbor docker push 500_docker_04


步骤三:运行Registry和Registry Web UI镜像

docker run -d  -p 5000:5000  --restart=always  --name registry docker.io/registry:latest

查看Registry是否运行起来

docker ps -a


docker push 上传harbor docker push 500_UI_05


验证Registry Service是否正常

curl http://localhost:5000/v2/_catalog


docker push 上传harbor docker push 500_UI_06


因为我们还没有向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


docker push 上传harbor docker push 500_docker_07


通过浏览器访问registry-frontend web UI,由于虚拟机绑定的静态IP地址是10.0.0.10,所以访问URL是http://10.0.0.10:9090


docker push 上传harbor docker push 500_Docker_08


步骤四:验证整个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 push 上传harbor docker push 500_UI_09


修改后重启Docker

systemctl restart dockerdocker push 10.0.0.10:5000/test/busybox


docker push 上传harbor docker push 500_UI_10


再次调用Registry API查看repositories:

curl http://localhost:5000/v2/_catalog


docker push 上传harbor docker push 500_UI_11


发现repositories已经有image了,就是我们刚才push到Registry中的。

再次访问:http://10.0.0.10:9090/repositories


docker push 上传harbor docker push 500_UI_12


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

文章如有不妥之处,欢迎指正!谢谢!