欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

centos7搭建及使用DOCKER私有仓库

程序员文章站 2024-01-29 08:46:16
...

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就好了):
centos7搭建及使用DOCKER私有仓库
说明: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

centos7搭建及使用DOCKER私有仓库
说明:“-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
centos7搭建及使用DOCKER私有仓库
说明:这个命令为我之前下载的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
结果如图:centos7搭建及使用DOCKER私有仓库
我们看到,报错了,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”目录,可以看到里面有东西了。如图:
centos7搭建及使用DOCKER私有仓库

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
centos7搭建及使用DOCKER私有仓库
(3)从私有仓库拉取镜像
执行:docker pull 192.168.31.11:5000/registry:latest-20180802
centos7搭建及使用DOCKER私有仓库
执行完成后,使用“docker images”命令,我们发现已经把镜像拉取到了本地。

三、从私有仓库中删除镜像
请参考:https://blog.csdn.net/lastsweetop/article/details/78185706
将镜像删除后,再次push刚删除的镜像,会提示“Layer already exists”。此时,重启docker,再次push刚删除的镜像,就没有问题了。因此,可以判断是docker中存在缓存,导致不重启就无法上传,至于如何在不重启docker的条件下清理layer缓存,暂时没有查到。

相关标签: docker 私有仓库