一. 介绍
一般docker提供了Docker Hub来维护管理所有的镜像,但是一般出于安全和网络原因,我们不可能把商业项目上传到docker上,我们会在本地局域网搭建私有镜像仓库。
所谓私有仓库,也就是在本地(局域网)搭建的一个类似公共仓库的东西,搭建好之后,我们可以将镜像提交到私有仓库中。这样我们既能使用 Docker 来运行我们的项目镜像,也避免了商业项目暴露出去的风险。
二. 环境
服务端机器 (主机名为registry):docker私有仓库服务器,运行registry容器。
测试端机器 (主机名为node):普通的docker服务器,在这台服务器上下载一个测试镜像busybox,然后上传到registry服务器进行测试。
三. 部署
registry主机下操作:
1. 下载镜像
docker pull registry
2. 查看镜像是否下载成功
docker image ls
3. 运行镜像
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
参数说明
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了;
--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
--name registry:创建容器命名为registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;
4. 测试镜像仓库中的所有镜像
curl http://127.0.0.1:5000/v2/_catalog
node节点下操作:
1. 为镜像打标签
192.168.72.102:5000是registry私有镜像服务器的IP地址和端口
2. 查看打好标签的镜像
3. 上传到镜像服务器
这边报错了,因为docker 默认是https协议,而我们这是http协议。
解决方案:
1)修改daemon.json文件:添加私有镜像服务器地址
2)重启docker
4. 再次上传到私有服务器
5. 可以在registry主机上看看镜像:
6. 测试(先删除node机器上的镜像,然后从主机上下载)
我们也可以在浏览器上直接访问: