需求:
使用镜像的过程中,每次都是pull别人的镜像,而有时候pull的镜像会缺少工具或者需要自己对文件进行配置,如果一次性需要部署相同的多个容器,每一个都需要进行一次配置会显得很繁琐。我们能不能以pull的镜像做基础修改后打包成新的镜像呢? 答案是肯定的,docker的commit命令就是完成这样的需求。
语法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
参数
options | 作用 |
---|---|
-a | 提交镜像的作者 |
-c | 使用 Dockerfile 指令来创建镜像 |
-m | 提交时的说明文字 |
-p | commit 时,将容器暂停 |
以tomcat为例子:
启动一个tomcat
[root@localhost ~]# docker run -d -P --name tomcat01 tomcat
9650e40905f78220a14c29d7a41b38972a5cf2271b8fe057582bfcc984dceaee
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9650e40905f7 tomcat "catalina.sh run" 9 seconds ago Up 6 seconds 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp tomcat01
进入到tomcat容器,webapps里面没有文件,文件在webapps.dist,每次部署一次就需要将webapps.dist里的文件拷贝一次到webapps
root@9650e40905f7:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
root@9650e40905f7:/usr/local/tomcat# ls webapps
root@9650e40905f7:/usr/local/tomcat# ls webapps.dist/
ROOT docs examples host-manager manager
现在我们拷贝一次,然后用commit从新打包一个镜像
docker commit -a “jj” -m “tomcat-test” 9650e40905f7 tomcat:test
解析:
-a参数提交作者
-m参数描述信息
9650e40905f7 以这个容器为基础
tomcat:test 新的镜像名和tag
root@9650e40905f7:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@9650e40905f7:/usr/local/tomcat# ls webapps
ROOT docs examples host-manager manager
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9650e40905f7 tomcat "catalina.sh run" 19 minutes ago Up 16 minutes 0.0.0.0:49154->8080/tcp, :::49154->8080/tcp tomcat01
[root@localhost ~]# docker commit -a "jj" -m "tomcat-test" 9650e40905f7 tomcat:test
sha256:f69dde4344f1bdb5ba250acaa677785b20bbd5b837defa7d8d91305ceef82341
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat test f69dde4344f1 8 minutes ago 684MB
现在我们以新的镜像来运行一个容器,然后进入容器可以看到webapps目录下是有文件的
[root@localhost ~]# docker run -d -P tomcat:test
c866e6314162528776616435c9c03671ef8adf408aa512a28b56e6759e80ae9f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c866e6314162 tomcat:test "catalina.sh run" 6 seconds ago Up 4 seconds 0.0.0.0:49155->8080/tcp, :::49155->8080/tcp admiring_vaughan
root@c866e6314162:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
root@c866e6314162:/usr/local/tomcat# ls webapps
ROOT docs examples host-manager manager
可以直接访问