hub.docker.com上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案,今天我们就来实战搭建私有docker仓库吧;
环境规划
需要两台机器:docker私服仓库的server和使用docker的普通机器,这两个机器都是centos7版本的server,一台机器名为 centos7-1,ip为192.168.6.78的私有仓库服务器,另一台机器名为centos7-2,ip为192.168.6.173的运行docker服务的普通服务器 。
在centos7-1上安装docker的私有仓库
sudo docker run -d -v /home/sukang/registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
-v /home/sukang/registry:/var/lib/registry 默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器。
-p 5000:5000 端口映射
--restart=always 在容器退出时总是重启容器,主要应用在生产环境
--privileged=true 在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误
--name registry 指定容器的名称
通过执行上面的run
命令,实际我们已经完成了Docker私有仓库的搭建。
推送nginx到registry仓库
使用tag命令修改标签
sudo docker tag nginx localhost:5000/nginx
推送到仓库
sudo docker push localhost:5000/nginx
执行命令curl -X GET http://127.0.0.1:5000/v2/_catalog,收到的响应如下,是一个json对象,表示已经有了nginx的镜像
好的,私有仓库已经创建和启动完毕了,接下来试试如何使用吧。
支持http协议的推送
正常情况下,应用服务器推送镜像到仓库用的是https,此处我们通过命令行来测试推送用的是普通的http,所以需要修改docker的启动参数,使之允许以http协议工作;
执行推送镜像的机器是centos7-2,所以登录到此机器
执行命令docker pull tomcat,从hub.docker.com下载最新版本的tomcat镜像,如下图:
下载完毕后,执行docker images查看镜像的信息,如下图:
如上图红框所示,这个镜像的ID是ca9e2fccef98,所以我们执行以下命令,给这个镜像添加一个带有私有仓库IP的TAG,这样后面才能成功推送到私有仓库:
docker tag ca9e2fccef98 192.168.6.78:5000/tomcat
再执行docker images查看镜像的信息,如下图,出现了一个新的镜像,REPOSITORY是192.168.6.78:5000/tomcat:
执行以下命令进行推送:
docker push 192.168.6.78:5000/tomcat
此时遇到一个问题
解决方案是:
在/etc/docker下的daemon.json文件中,写入:
{ "insecure-registries":["192.168.6.78:5000"]}
重启docker:
systemctl restart docker.service
然后再执行
docker push 192.168.6.78:5000/tomcat
推送成功后,在浏览器中打开 http://192.168.6.78:5000/v2/_catalog,查看私有仓库的镜像信息,都能见到如下内容:
使用私有仓库的镜像
在centos7-2机器上,先执行以下命令将本地镜像删掉:
docker rmi 192.168.6.78:5000/tomcat tomcat
再执行以下命令,用私服上的镜像来创建一个容器,映射8080端口:
docker run --name tomcat001 -p 8080:8080 -idt 192.168.6.78:5000/tomcat
本地没有镜像就去私服下载,如下图:
centos7-2的IP是192.168.6.173,所以在当前电脑上打开浏览器,输入:192.168.6.173:8080,可以看到下图熟悉的tomcat欢迎页:
至此本次实战就结束了,希望能对您的私有仓库搭建有所帮助。