● docker commit提交容器副本使之成为一个新的镜像
比如 在我们从官网下载的Ubuntu镜像是没有vim命令的:
格式:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
操作实例:(commit一个带有vim命令的新镜像)
① 在终端输入 apt-get update
② 在终端输入 apt-get -y install vim
完成。现在我们自己的这个镜像文件,已经含有了vim编辑功能(兄弟变强了)
然后,把这个镜像以提交副本的形式生成一个新的镜像:参照上面的格式
可以看到: 自制的镜像已经出现在了列表里面。
实例:将容器镜像发布到阿里云
打开阿里云,登录之后进入控制台
进入个人实例:
①创建命名空间
构建新的命名空间:
在当前命名空间下,创建镜像仓库:
点击下一步,选择本地仓库→创建镜像仓库(需要现有命名空间,再有镜像名称)
创建镜像仓库;
根据阿里云的页面提示,现在我们要做的是将本地的镜像推送到阿里云的镜像仓库,但是这里需要注意的是,在我首次连接的过程中,一直在报错这个是需要配置访问凭证,具体解决方案:解决方法
解决之后,使用密码登录:
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/hud9866/myubuntu:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/hud9866/myubuntu:[镜像版本号]
可以看到,在阿里云的镜像仓库中已经有了我们刚才上传的镜像文件:
现在 我们进行验证:将阿里云上的镜像下载到本地,现在我已经将本地刚才制作好的添加了vim编辑命令的镜像删除。
拉取镜像,输入镜像版本号,成功!
docker registry:官方提供的工具,用于构建私有镜像仓库
● 拉取镜像:用于搭建私有镜像仓库
运行私有库registry,也就相当于本地有一个私有的docker hub ,命令有点复杂:
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
-d: 后台守护式进程,-p:端口映射
这次我们再新建一个镜像(Ubuntu带ifconfig命令),新建容器并安装ifconfig
apt-get update
apt-get install net-tools
commit我们新的一个镜像,因为commit命令需要在容器外执行,现在我们退出容器 然后以副本的形式生成一个新的镜像
docker commit -m="Ubuntu with ifconfig" -a="Hud" 容器ID 要创建的目标镜像名:[标签名]
接下来需要将这个新的Ubuntu镜像推送到registry本地私服库
①先验证本地私服库有什么镜像
curl -XGET http://192.168.66.11:5000/v2/_catalog
这里有一个问题,因为我的Linux学的不是很好。。。我在复制周阳老师的源指令的时候出现了一点小小的问题,显示访问被拒绝,这是肯定的,因为我用的curl命令后面的ip地址不是自己本机的ip地址。。。
首先 ip addr查看ens33条目中的inet值,即为本机的ip地址
然后再查看私有仓库中,现在有什么: curl -XGET http://192.168.111.162:5000/v2/_catalog
②将新镜像修改符合私服规范的tag
按照公式: docker tag 镜像:Tag Host:Port/Repository:Tag进行修改
由于docker的私服库做了安全加固,所以一般不支持进行http形式的推送。所以进行第三步:
③修改配置文件使之支持http
修改配置:告诉端口我们本机的这个IP:192.168.66.11:5000这个端口是安全的(由于是json格式,不要忘记两个配置之前有一个“,”)
vim命令新增如下红色内容:vim /etc/docker/daemon.json然后编辑新增一行:
"insecure-registries": ["192.168.66.11:5000"]
:wq!(保存退出)
重启docker,重启registry服务:
④push推送到私服库:
docker push 标准名称:[版本号]
现在再看,发现里面已经有了我刚才上传的那个镜像文件了
为了验证,现在我准备删除本地的镜像,然后从私服库中下载这个镜像到本地验证它的可行性:
现在,拉取私服库中的镜像到本地:
现在看到:本地已经有了这个镜像,然后呢我们再来运行这个镜像看看有没有ifconfig命令
运行成功了。