背景
在公司里面,自己的项目在打包成镜像时,可能需要将镜像共享给其它同事使用,如果使用公有仓库共享可能会不安全,且拉取镜像时受网络带宽影响,拉取镜像时会很慢。为解决这些问题,用户可以使用docker官方提供的registry来搭建本地私有仓库。
Registry简介
registry是一种无状态,高扩展性的服务端应用,它可用于存储并使你可以分发你的容器镜像和其它内容。registry是基于Apache License开源协议的,最初由docker官方提供,后捐赠给CNCF。
部署Registry
registry是搭建仓库的应用程序,本身也是需要部署的,在docker中同样以容器的方式运行。
1.拉取registry镜像
docker pull registry
2.运行registry镜像
docker run -d -p 5000:5000 --restart=always --name=my-registry registry
- docker run 运行容器的基本命令
- -d 表示在后台执行,如果你想将终端焊住,可以用-it
- -p 5000:5000 将宿主机的5000端口映射到容器中的5000端口,格式是:-p 宿主机端口:容器端口,registry容器内的默认端口是5000,可以通过环境变量进行修改,稍后会进行介绍
- –restart=always 设置重启策略为总是重启,即Linux重启后容器也会自动重启
- –name=my-registry 设置容器的名称为my-registry
- registry 运行的容器使用的镜像是registry
使用docker ps命令查看容器列表,如下截图,表明仓库就已经搭建好了:
列举两个运行registry常用的配置:
- 挂卷
docker history查看镜像的层
可以看到,运行容器时,仓库的镜像是存储在/var/lib/registry下面,使用-v选项将容器中的地址挂载都宿主机中。
docker run -d -p 5000:5000 --restart=always --name=my-registry -v /docker/volume/registry:/var/lib/registry registry
上面的-v /docker/volume/registry:/var/lib/registry表示将容器中的/var/lib/registry挂载到宿主机的/docker/volume/registry目录,这样,仓库中的镜像文件就保存在了宿主机中,方便管理。
- 自定义容器内的端口
需要使用到环境变量REGISTRY_HTTP_ADDR
docker run -d -p 5000:5000 --restart=always --name=my-registry -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 registry
上面的-e REGISTRY_HTTP_ADDR=0.0.0.0:5001表示将容器内的端口设置为5001。
3.推送镜像到本地仓库
3.1 拉取测试镜像
docker pull redis
从远程仓库拉取一个redis镜像作为测试镜像。
3.2 给测试镜像打标签
docker tag redis localhost:5000/my-redis
给redis镜像打标签,docker会从localhost:5000/my-redis解析ip和端口为localhost:5000,后续拉取或推送镜像时都会从localhost:5000这个服务器上去拉取或推送。
执行上述命令后,用docker images查看一下镜像列表:
3.3 推送镜像
docker push localhost:5000/my-redis
执行上述命令,docker会将my-redis镜像推送到本地为5000端口的镜像仓库中。
使用curl localhost:5000/v2/_catalog命令查看仓库中的镜像
执行推送命令前:
执行推送命令后:
4.从本地仓库拉取镜像
4.1先删除本地镜像
docker rmi localhost:5000/my-redis
执行上述命令后使用docker images查看本地镜像列表:
可以看到本地不存在localhost:5000/my-redis镜像了
4.2从本地仓库拉取镜像
docker pull localhost:5000/my-redis
执行上述命令后使用docker images查看本地镜像列表:
拉取成功!
配置Registry可用IP访问
上面的示例中都是通过localhost:5000来访问仓库的,如果通过仓库所在服务器的IP地址来访问,你会发现拉取或推送不了镜像。这是由于registry默认是以HTTPS方式推送的,由于我们没有CA,是没办法通过HTTPS来访问,不过,可以通过配置来取消这个限制。
-
windows
Docker Desktop->Settings>Docker Engine,在insecure-registries中添加仓库所在服务器的IP和端口
点击Apply & restart -
Linux
在/etc/docker/daemon.json添加insecure-registries配置(Linux安装的docker默认没有daemon.json文件,需要你自己手动创建)。
{
"insecure-registries": [
"192.168.xx.xx:5000"
]
}
注意:以上配置是在客户端上配置
使用systemctl restart docker命令重启docker,重启后才会生效文章来源:https://www.toymoban.com/news/detail-778314.html
测试:
推送成功!文章来源地址https://www.toymoban.com/news/detail-778314.html
到了这里,关于docker搭建私有仓库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!