docker commit 容器的提交
需求:运行基础的centos镜像,在容器内安装好vim,然后提交的镜像, 新提交的镜像,再运行出的容器,就默认携带vim命令了。
docker run -it centos bash #进去之后 yum安装个vim (如果无法使用yum 则拷贝一个过去)
#这里说明一下,有时候容器内无法使用yum,就是镜像的原因。pull下载镜像的时候指定下版本,
(例如:docker pull centos:centos7)如果不指定版本,进容器内大概率无法使用yum源
exit #下载好之后 退出镜像
docker ps -a #根据exit 退出的那个进行id 查找到刚刚退出的那个容器的id号 然后进行设置
docker commit +容器ID centos123/centos-vim-7.0.3 #commit后面跟id号 和新的自定义命名
docker images #查看 如图所示
docker run -it centos123/centos-vim-7.0.3 bash #然后根据新提交的镜像进行使用 就会有vim工具了
本地镜像发布到阿里云
https://cr.console.aliyun.com #登入阿里云
找到右上角控制台-左上角列表-找到容器-容器镜像服务-然后找到左侧实例列表-个人实例
容器要先有命名空间,才能继续创建镜像仓库
如图所示 点击创建命名空间 (可设置公开或者私有)
创建镜像仓库 如图所示
然后点击下一步 选择本地仓库 点击创建镜像仓库
创建之后可以看到自动生成的一系列的 拉取镜像,推送镜像的相关的命令。 直接在终端复制执行即可。 也可已从管理界面进入查看系统生成的相关命令的界面。
例如使用生成的推送镜像命令。推送下图中自己的镜像
$ docker login --username=[自己的阿里云ID] registry.cn-hangzhou.aliyuncs.com
如下图一(输入自己的阿里云登入密码) 如图出现 “Login Succeeded”表示本地链接阿里云库成功
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qwedsazxc/ceshi:[镜像版本号]
如下图二 修改为对应的版本号及镜像名称
$ docker push registry.cn-hangzhou.aliyuncs.com/qwedsazxc/ceshi:[镜像版本号]
如下图三 填写对应的版本好之后进行上传
验证 将上传到阿里云的镜像 下载到本地进行使用。 方法命令同上,可以到阿里云镜像仓库中使用生成的命令
docker pull registry.cn-hangzhou.aliyuncs.com/qwedsazxc/ceshi:[镜像版本号]
如图所示 先将本地的镜像删除然后将上传的下载到本地。
上传至私有库 docker registry (本地私有库)
docker registry 是官方提供的工具,可以用于构建私有镜像仓库
docker pull registry 下载 私有仓库 registry
docker images 查看有一个最新的 registry,
docker run -d -p 5000:5000 -v /root/myregistry/:/tmp/registry --privileged=true registry
运行私有库,相当于本地有一个私有的docker hub
docker ps 查看registry信息 如图所示
docker commit +容器ID centos456/centos:7.9 提交容器为centos456/centos:7.9
curl -XGET http://192.168.XX.XX:5000/v2/_catalog 提交前先测试下能否和registry私有库链接
(本地的IP和上图中-p映射的5000端口)返回{"repositories":[]} 表示库中是空的
docker tag centos456/centos:7.9 192.168.xx.xx:5000/zzyyxx:2.2 (本机宿主机的ip地址加映射的端口号)
将提交的新镜像centos456/centos:7.9修改成符合registry规范的tag(192.168.xx.xx:5000/zzyyxx:2.2)
docker images 查看 相当于是新克隆出来一个名为192.168.xx.xx:5000/zzyyxx:2.2 版本的镜像
修改配置文件使之支持http(registry默认设置的安全加固不支持http推送)
vi /etc/docker/daemon.json 在该文件中修改或添加图中红框中的配置
PS:修改之后 建议重启一下docker 服务
(重启之后注意私服库registry有没有启动
docker run -d -p 5000:5000 -v /root/myregistry/:/tmp/registry --privileged=true registry)
docker push 192.168.xx.xx:5000/zzyyxx:2.2 直接pull推送(镜像名称+版本号)
curl -XGET http://192.168.XX.XX:5000/v2/_catalog 验证registry有没有成功推送
{"repositories":["zzyyxx"]} 返回结果 zzyyxx 表示推送成功
测试能否从库中拉取到本地运行使用
docker rmi -f 192.168.XX.XX:5000/zzyyxx:2.2 首先删除原来的镜像
docker pull 192.168.XX.XX:5000/zzyyxx:2.2 拉取zzyyxx镜像
docker run -it 192.168.XX.XX:5000/zzyyxx:2.2 /bin/bash 运行该镜像 如图所示
PS:这里输入的是本地宿主机的ip地址 5000端口映射了容器的5000端口 也就是访问了容器库registry