Docker 已经提供了docker hub仓库,第三方也提供相应的仓库,比如网易,时速云,阿里云等,那为什么还要搭建自己私有的仓库呢?
1)网络有关,有的时候你在的环境可能突然就断网了,但是内部局域网还可以访问,那么你就可以去公司私有的仓库去下载
2)安全性,你自己或者公司的项目,一定不会直接暴露给外面的人看到,所以安全性很重要。
3)便于部署,开发环境,测试环境,正式环境,可以通过私有仓库拉取同一份镜像一步部署,即可完成。
首页要下载registry镜像
docker pull registry
这个没有指定地址,则默认是去docker hub上下载镜像
查看镜像信息
docker history d1fd7d86a825
可以看到工作目录为/etc/docker/registr
Push上传的文件都会上这个文件,因docekr 计算和存储是分开的所以要永久保存镜像就要把这文件导出来永久保存
然后我们运行registry镜像
docker run -d -p 5000:5000 -v /c/Users/docker_registry:/var/lib/registry registry
这里我们使用了本地挂载,因为我这里是Windows系统,所以是挂载在docker的Linux系统默认的挂载目录下,当然你也可以修改此目录。
那我们来看一下挂载情况吧
docker inspect 20b132ab834b310c5
我们已经成功的挂载了。
推送镜像到本地库
接下来我们就要把本地的镜像push到私有仓库中,我们把balance镜像push到私有仓库中
docker push 192.168.99.100:5000/balance
我们看到第一次push错误的时候,是因为缺少tag,当我们tag标签之后,再次push有出现异常信息。因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
解决方案:
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
如果有这个文件就在时面加一条
{ "insecure-registries":["192.168.99.100:5000"] }
IP地址为docker 私有仓库地址
因为我是Windows系统,所以要先连接到docker的运行环境Linux系统
docker-machine ssh default
然后将当前的docker用户切换到root用户
sudo -i
保存文件
重启docker容器,再次push镜像
已经推送成功了。
验证
我们来验证一下,首先将本地所有的balance相关的镜像都删除
我们看到本地已经没有了balance镜像
docker pull 192.168.99.100:5000/balance
我们看到镜像已经被拉取下来了,然后在运行一下镜像,看看是否能正常访问
docker run -d -p 8888:8080 fa9b9a86d1ed
项目已经完美运行起来了,棒棒滴!