一、下载Docker Registry镜像,相当于本地有个私有的Docker hub。
docker pull registry
二、运行本地私有库Registry。
docker run -d -p 5000:5000 -v /lingon/myregistry/:/tmp/registry --privileged=true registry
- 含义解释:
- docker run // 运行容器
- -d // 守护式容器,也称后台运行
- -p 5000:5000 // 端口映射 [ 主机端口:容器端口 ]
- -v // /宿主机绝对路径目录:/容器内目录 镜像名
- 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便宿主机联调。
可通过 docker ps 查看是否运行成功(列出正在运行的容器)。
下列图片中有一个正在运行中的容器,该容器就是 私服。
私服库对外暴露端口号为5000
三、将需要上传的镜像修改为符合私服规范的Tag。
# 例如:我想将ubuntu镜像推送到私服中
# docker tag 本地镜像:[版本号] 主机ip:对外暴露的端口号/镜像:[版本号]
docker tag ubuntu 192.168.138.156:5000/ubuntu
命令输入后,查看镜像列表。有一个主机ip:端口号/ubantu的镜像,这就是经过规范化的镜像。
四、修改配置文件,使之支持http。
由于docker的私服库做了安全加密,默认不支持http访问,所以需要修改配置。
vim /etc/docker/daemon.json
在该json格式中额外添加一条(注意!json两字段间需要加逗号隔开!):
"insecure-registries": ["主机ip:5000"]
五、上传镜像到私服库。
- 由于修改了配置文件,所以需要重启Docker。
- 如果提示有容器正在运行导致重启失败,应该先关掉容器,再重启。
- 重启后查看docker状态。
systemctl restart docker
systemctl status docker
- 重启docker后,所有的容器都停止运行,需要重新运行私服库。
docker run -d -p 5000:5000 -v /lingon/myregistry/:/tmp/registry --privileged=true registry
- 镜像上传到私服库。
# docker push 镜像:[版本号]
docker push 192.168.138.156:5000/ubuntu
六、验证私服是否已经成功上传该进行。
curl -XGET http://192.168.138.156:5000/v2/_catalog
私服库中已经显示存在 'ubantu' 镜像,成功将镜像上传到私服!
7、从私服上拉取镜像。
- 首先删掉原先的规范化的镜像。
- 拉取私服上的镜像:docker pull 主机ip:暴露的端口号/镜像名:[版本号]
docker pull 192.168.138.159:5000/ubuntu
- 此时再查看 docker images ,会发现私服上的镜像已经被拉取下来了。