Docker官方提供了公共镜像仓库——Docker Hub。我们可以从上面拉取镜像到本地,也可以把自己的镜像推送上去,但是,有时候我们的服务器无法访问境外网站,或者考虑到安全性,自己的镜像不适合放到公网中,那我们就需要搭建自己的私有仓库来存储和管理自己的镜像。
Docker registry是存储Docker image的仓库,我们可以将registry容器其部署到某个服务器,将镜像上传到registry容器,然后可以从registry拉取镜像。
搭建私有仓库
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id -p 5000:5000 --name=registry -v /root/docker-data/resp/data:/var/lib/registry registry:latest
# 3、配置docker信任私有仓库
vim /etc/docker/daemon.json
# 在daemon.json中,添加一个键值对,让docker新人私有仓库地址
{"insecure-registries": ["服务器ip:5000"]}
# 4、重启docker服务和私有仓库容器
systemctl restart docker
docker start registry
关于docker run命令的解释:
-p 5000:5000
:我们从Docker Hub官网中的registry的dockerfile内容中可以看到,暴露的端口是5000,也就是默认的registry容器服务端口是5000,所以需要映射容器的5000端口。-v /root/docker-data/resp/data:/var/lib/registry
:从从Docker Hub官网的VOLUME字段可以看出,镜像上传到registry容器后,应该是存放到registry的/var/lib/registry目录下,为了预防registry容器突然下线等情况,我们最好是给registry配置数据卷。- 注意: 从dockerfile内容来看,启动registry容器时会执行一系列命令,所以我们在docker run命令后面不要再加个command命令了,否则覆盖了dockerfile的CMD命令导致容器内的相关应用没有启动。
通过http://服务器ip:5000/v2/_catalog
,可以获取到空仓库数据
镜像上传私有仓库
私有库搭建好之后,就可以将本地镜像上传至私有库
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 服务器ip:5000/centos:7
# 2、上传标记的镜像
docker push 服务器ip:5000/centos:7
centos:7镜像上传到registry服务器成功后,访问http://服务器ip:5000/v2/_catalog
可以看到有对应的镜像名称。
访问http://服务器ip:5000/v2/镜像名称/tags/list
可以查询到对应的版本列表
拉取镜像
可以从私有库上拉取镜像到本地:
docker pull 服务器ip:5000/centos:7
其他
1、如果想修改registry容器的服务端口,可以通过设置环境变量REGISTRY_HTTP_ADDR
来更改。如将registry容器的服务端口设置为5001:docker run -id -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 -p 5000:5001 --name=registry -v /root/docker-data/resp/data:/var/lib/registry registry:latest