centos7搭建及使用DOCKER私有仓库
centos7搭建及使用DOCKER私有仓库
环境:
虚拟机1:192.168.31.11,centos-7.3,docker-18.03.1-ce,私有仓库服务器
虚拟机2:192.168.31.12,centos-7.5,docker-18.03.1-ce
一、私有仓库的搭建
1、拉起registry镜像
启动docker以后,执行“docker pull registry:latest”,拉取成功后,执行“docker images”可以看到拉取下来的镜像。执行结果如下图(第一次pull时不知什么原因卡了,强制中断后再次pull就好了):
说明:registry是docker官方提供的私有仓库镜像,用这个镜像运行起来的容器就是一个私有仓库。
2、运行registry镜像
docker run -d -p 5000:5000 --restart=always --name private-docker-registry --privileged=true -v /opt/docker-registry:/var/lib/registry b2b03e9146e1
说明:“-d”表示容器在后台运行。“-p 5000:5000”表示将容器的5000端口映射到虚拟机192.168.31.11的5000端口。“–restart=always”表示容器随着docker启动而启动,同时若容器异常终止,会自动启动;实测表明,使用“docker stop”命令停止容器后,此参数不会让容器自动重启。“–name private-docker-registry”设置容器名。“–privileged=true”使容器真正具有容器内的root权限,详情自行百度。“-v /opt/docker-registry:/var/lib/registry”将容器中的“/var/lib/registry”目录映射到虚拟机192.168.31.11的“/opt/docker-registry”;“/var/lib/registry”是私有仓库容器存放镜像的目录,网上很多教程说这个目录是“/tmp/registry”,实际上“/tmp/registry”是老版本的镜像目录,经实测,最新版本的镜像仓库目录是“/var/lib/registry”。
二、私有仓库的使用
1、将镜像推送到私有仓库
(1)修改现有镜像的标签
结合我的实际情况,执行:docker tag b2b03e9146e1 192.168.31.11:5000/registry:latest-20180802
说明:这个命令为我之前下载的registry镜像新建了一个REPOSITORY和TAG。我们在原有的REPOSITORY之前增加了“192.168.31.11:5000/”,这就是我们刚搭建的私有仓库的地址。docker在push和pull时会使用REPOSITORY属性中指定的地址作为私有仓库地址,如果REPOSITORY属性中没有指定,会使用docker默认的仓库地址。命令中还修改了镜像的TAG属性,这个属性可改可不改,如果命令中不指定TAG属性,会使用原有的TAG属性,即“latest”。
(2)将镜像推送到私有仓库
执行:docker push 192.168.31.11:5000/registry:latest-20180802
结果如图:
我们看到,报错了,push失败。这是因为docker在操作镜像仓库时(search、push、pull),默认使用HTTPS的方式,这要求镜像仓库配置SSL,本文不讲述如何搭建支持HTTPS的私有仓库,有此需求的,请自行百度。
那么,我们只能让docker使用HTTP而不是HTTPS来访问我们刚搭建的私有仓库,操作如下:
a、编辑docker配置文件“/etc/docker/daemon.json”,内容如下:
{
"insecure-registries": [
"192.168.31.11:5000"
]
}
说明:这个配置告诉docker,当对地址为“192.168.31.11:5000”的镜像仓库进行search、push、pull操作时,使用非安全的方式,即HTTP。可配置多个地址,例如:{ “insecure-registries”: [ “192.168.31.11:5000”, “192.168.31.12:5000”]}。这个配置文件是docker的默认配置文件路径,默认是不存在的,需要创建,配置文件路径也可以更改,有关详情可参考docker官网或自行百度。
b、重启docker,执行:systemctl restart docker.service。
重启完成后再push,就成功了。然后我们再看之前映射的“/opt/docker-registry”目录,可以看到里面有东西了。如图:
2、从私有仓库拉取镜像
(1)配置docker,让其使用HTTP方式访问私有仓库,具体操作详见上文“步骤二.1.(2)”。我们从私有仓库拉取镜像的服务器是192.168.31.12,与私有仓库不是同一台服务器,因此需要执行此操作。
(2)查看私有仓库的镜像及tag列表
不知为何,截至撰写本文,docker似乎不支持使用search命令查询使用上述方式搭建的私有仓库,只能通过命令进行查询,具体如下:
a、查询镜像
curl http://192.168.31.11:5000/v2/_catalog
b、查询镜像下的tag
curl http://192.168.31.11:5000/v2/registry/tags/list
(3)从私有仓库拉取镜像
执行:docker pull 192.168.31.11:5000/registry:latest-20180802
执行完成后,使用“docker images”命令,我们发现已经把镜像拉取到了本地。
三、从私有仓库中删除镜像
请参考:https://blog.csdn.net/lastsweetop/article/details/78185706
将镜像删除后,再次push刚删除的镜像,会提示“Layer already exists”。此时,重启docker,再次push刚删除的镜像,就没有问题了。因此,可以判断是docker中存在缓存,导致不重启就无法上传,至于如何在不重启docker的条件下清理layer缓存,暂时没有查到。
上一篇: CocoaPods自建远程私有仓库并使用
下一篇: 二叉树的镜像 三种方法 详细!