【拉取一个ubuntu镜像】 ⇒ 【以ubuntu镜像创建容器,添加一个vim功能】 ⇒
【将添加vim功能的容器打成一个新镜像】 ⇒ 【拉取registry镜像,搭建本地docker-hub仓库】 ⇒
【将镜像推送到本地的docker-hub仓库】
2.1 拉取一个ubuntu镜像
docker search ubuntu --limit 5 # 查询ubuntu相关镜像

docker pull ubuntu # 拉取ubuntu镜像
docker images [镜像名] # 查看拉取的镜像,不加镜像名查看所有安装的镜像

2.2 以ubuntu镜像创建容器,添加一个vim功能
以交互模式在新终端运行ubuntu容器
docker run -it --name my_ubuntu ubuntu /bin/bash
结果:

基础的ubuntu镜像只保留核心的功能,其他功能需要自己安装:

安装vim
apt update # 更新的软件列表
apt search <keyword> # 查找软件包命令
apt install vim # 安装vim
安装完成后就有vim功能了:再次执行 vim a.txt

2.3 将添加vim功能的容器打成一个新镜像
ctry + p + q 不退出容器,回到主机
docker ps # 查看容器的状态
结果:

以运行的容器创建一个新镜像 -m=“描述信息” -a=“作者” 容器id 镜像名:版本
docker commit -m="ubuntu add vim" -a="yyy" 7cf6d79c2de8 yyy/my_ubuntu:1.0.1
结果:

2.4 拉取registry镜像,搭建本地docker-hub仓库
拉取并运行registry镜像
docker pull registry # 拉取registry镜像
docker run -d -p 5000:5000 -v /data/my_registry/:/tmp/registry --privileged=true registry
# -d 表示后台运行 -p 主机端口:docker端口(设置端口映射)
# -v 主机目录:容器目录(volume 容器卷,作用是主机与容器指定位置实时同步备份)
# --privileged=true 权限提升
结果:

get请求查看仓库的镜像 http://主机ip地址:主机端口/v2/_catalog
curl --get http://192.168.71:5000/v2/_catalog
查看本地仓库镜像(repositories数组内就表示存放的镜像,当前没有镜像):

2.5 将镜像推送到本地的docker-hub仓库
当前创建的镜像命名并不符合要上传仓库的命名规范,要先进行修改:

docker tag yyy/my_ubuntu:1.0.1 192.168.71.129:5000/yyy/my_ubuntu:1.0.1
# 打tag,相当于将镜像复制一份出来对名字和版本进行修改
# 命名规范是 主机ip地址:端口/命名空间(有无都行)/镜像名:版本
结果:

尝试推送镜像到本地仓库:docker push 192.168.71.129:5000/yyy/my_ubuntu:1.0.1

docker 默认不允许使用 http 的方式去推送镜像
如果我们要使用http去推送的话,就需要配置(/etc/docker/daemon.json):

查看发现只有配置了阿里云镜像加速的属性
我们需要加一个 insecure-registries 属性,并将允许访问的 http 协议
vim /etc/docker/daemon.json

在 insecure-registries 属性值的数组中添加自己的 主机ip和端口,保存退出,重启docker,再进行推送:
systemctl restart docker # 重启docker
# 创建 registry 容器,启用本地仓库服务ls
docker run -d -p 5000:5000 -v /data/my_registry/:/tmp/registry --privileged=true registry
docker push 本地镜像 # 推送镜像
推送:

查看本地仓库镜像:

done!!!