在上一篇中,我们知道了docker是基于联合文件系统的分层镜像。而且也知道了镜像是只读的,容器才是可以写的。那么,如果我们要修改镜像,修改之后,怎么提交呢?本文,凯哥将介绍,docker的提交命令
命令公式:
dockercommit -m=“提交的描述信息” -a="作者" 容器id 要创建的目标镜像名称:[标签名]
演示案例:
那么我们就基于从远程仓库pull下来的Ubuntu。添加vim命令后,重新打一个新的镜像。
dockercommit 提交容器副本使其变为一个新的镜像。
我们启动原始下载的Ubuntu。使用vim命令如下:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=9fd277a3702ac65c6705667bcbf3b21d/9bdf6cf182025aaf015ad508beedab64014f1ad2.jpg?tbpicau=2025-02-28-05_3f4981e37daeb58d8e86345e7b5474f4)
命令未发现。
安装vim命令:
在docker上执行以下两条命令:
apt-get update
apt-get -yinstall vim
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4e7cb6c7719b033b2c88fcd225cf3620/7f36f9cc7b899e5195e591d707a7d933ca950dd3.jpg?tbpicau=2025-02-28-05_aff01b7e277eb2c22fd4504e1f8105e8)
需要注意
1:上面两条命令都是在容器内部执行的(因为我们是要扩展容器功能的)
2:apt-get 这两个是连接在一起的。
执行完vim后。我们试试此命令是否可以正常使用:
说明vim已经安装成功了。
在docker宿主机使用命令公式:
dockercommit -m"提交的描述信息" - a"作者" 容器id 要创建的目标镜像名:[标签名]
![](http://tiebapic.baidu.com/forum/w%3D580/sign=763e4ee54c24ab18e016e13f05fbe69a/eb88b2355982b2b7f4fa920774adcbef74099bdd.jpg?tbpicau=2025-02-28-05_73f5e098f59835123111a069246f678f)
注意其中的:50dba2e06051是通过docker ps获取到的
dockercommit之后,我们在通过 docker images命令查看当前宿主机上有多少个镜像:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=3c512d2dd982d158bb8259b9b00b19d5/1f37adfa43166d22a212be57032309f79252d2de.jpg?tbpicau=2025-02-28-05_05e72c15ca3ec416169fad6067aab3e9)
我们可以看到原来Ubuntu大小是72.8M。当我们添加了vim后的镜像是179M了。说明,我们添加了vim的镜像制作成功了。
启动新镜像,和原来镜像对比:新的镜像支持vim命令。
总结:
Docker中的镜像分层,支持通过扩展现有的镜像,创建新的镜像。类似于我们Java中的类继承与一个Base的基础类,自己在按照自己需要来扩展一样。新的镜像是从base镜像一层一层叠加生成的,每安装一个软件,就在现有的镜像的基础上增加一层。
命令公式:
dockercommit -m=“提交的描述信息” -a="作者" 容器id 要创建的目标镜像名称:[标签名]
演示案例:
那么我们就基于从远程仓库pull下来的Ubuntu。添加vim命令后,重新打一个新的镜像。
dockercommit 提交容器副本使其变为一个新的镜像。
我们启动原始下载的Ubuntu。使用vim命令如下:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=9fd277a3702ac65c6705667bcbf3b21d/9bdf6cf182025aaf015ad508beedab64014f1ad2.jpg?tbpicau=2025-02-28-05_3f4981e37daeb58d8e86345e7b5474f4)
命令未发现。
安装vim命令:
在docker上执行以下两条命令:
apt-get update
apt-get -yinstall vim
![](http://tiebapic.baidu.com/forum/w%3D580/sign=4e7cb6c7719b033b2c88fcd225cf3620/7f36f9cc7b899e5195e591d707a7d933ca950dd3.jpg?tbpicau=2025-02-28-05_aff01b7e277eb2c22fd4504e1f8105e8)
需要注意
1:上面两条命令都是在容器内部执行的(因为我们是要扩展容器功能的)
2:apt-get 这两个是连接在一起的。
执行完vim后。我们试试此命令是否可以正常使用:
说明vim已经安装成功了。
在docker宿主机使用命令公式:
dockercommit -m"提交的描述信息" - a"作者" 容器id 要创建的目标镜像名:[标签名]
![](http://tiebapic.baidu.com/forum/w%3D580/sign=763e4ee54c24ab18e016e13f05fbe69a/eb88b2355982b2b7f4fa920774adcbef74099bdd.jpg?tbpicau=2025-02-28-05_73f5e098f59835123111a069246f678f)
注意其中的:50dba2e06051是通过docker ps获取到的
dockercommit之后,我们在通过 docker images命令查看当前宿主机上有多少个镜像:
![](http://tiebapic.baidu.com/forum/w%3D580/sign=3c512d2dd982d158bb8259b9b00b19d5/1f37adfa43166d22a212be57032309f79252d2de.jpg?tbpicau=2025-02-28-05_05e72c15ca3ec416169fad6067aab3e9)
我们可以看到原来Ubuntu大小是72.8M。当我们添加了vim后的镜像是179M了。说明,我们添加了vim的镜像制作成功了。
启动新镜像,和原来镜像对比:新的镜像支持vim命令。
总结:
Docker中的镜像分层,支持通过扩展现有的镜像,创建新的镜像。类似于我们Java中的类继承与一个Base的基础类,自己在按照自己需要来扩展一样。新的镜像是从base镜像一层一层叠加生成的,每安装一个软件,就在现有的镜像的基础上增加一层。