docker commit 从容器创建一个新的镜像。提交容器副本使之成为一个新的镜像!
语法
docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
测试
下载运行 Tomcat
从Docker Hub 下载 tomcat 镜像到本地并运行
- -it:交互终端
- -p:端口映射
docker run -it -p 3344:8080 --name tomcat9 tomcat
注意:
docker启动官方tomcat镜像的容器,发现404是因为使用了加速器,而加速器里的 tomcat的webapps下没有root等文件!
下载tomcat官方镜像,就是这个镜像(阿里云里的tomcat的webapps下没有任何文件)
进入tomcat查看cd到webapps下发现全部空的,反而有个webapps.dist里有对应文件,cp -r 到webapps下!
[root@xiaoyequ ~]# docker exec -it tomcat9 /bin/bash
root@6ba1137fc95f:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@6ba1137fc95f:/usr/local/tomcat# cp -r webapps.dist/* webapps # 复制文件到 webapps
root@6ba1137fc95f:/usr/local/tomcat# cd webapps
root@6ba1137fc95f:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
删除上一步镜像产生的 tomcat 容器的文档
[root@xiaoyequ ~]# docker ps # 查看容器id
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01e8d5cae8f8 tomcat "catalina.sh run" 10 minutes ago Up 10 minutes 0.0.0.0:3344->8080/tcp tomcat9
[root@xiaoyequ ~]# docker exec -it tomcat9 /bin/bash # 进入容器
root@01e8d5cae8f8:/usr/local/tomcat# cd webapps
root@01e8d5cae8f8:/usr/local/tomcat/webapps# ls # 查看是否存在 docs文件夹
ROOT docs examples host-manager manager
root@01e8d5cae8f8:/usr/local/tomcat/webapps# curl localhost:8080/docs # 可以看到 docs 返回的内容
root@01e8d5cae8f8:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@01e8d5cae8f8:/usr/local/tomcat/webapps# rm -rf docs # 删除它
root@01e8d5cae8f8:/usr/local/tomcat/webapps# curl localhost:8080/docs # 再次访问返回404
创建一个新的镜像
当前运行的 tomcat 实例就是一个没有docs的容器,我们使用它为模板 commit 一个没有docs的 tomcat 新镜像, tomcat02
[root@xiaoyequ ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01e8d5cae8f8 tomcat "catalina.sh run" 22 minutes ago Up 22 minutes 0.0.0.0:3344->8080/tcp tomcat9
commit的时候,容器的名字不能有大写,否则报错:invalid reference format
[root@xiaoyequ ~]# docker commit -a="xiaoyequ" -m="no tomcat docs" 01e8d5cae8f8 tomcat02:1.0
sha256:57d6e3382b24e2d221958c2b2104024dc01b174ec1aec2dcfdde57cb43567055
查看,我们自己提交的镜像已经OK了!
[root@xiaoyequ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat02 1.0 57d6e3382b24 39 seconds ago 649MB
redis latest 235592615444 3 days ago 104MB
tomcat latest 2eb5a120304e 3 days ago 647MB
nginx latest 4392e5dad77d 10 days ago 132MB
portainer/portainer latest cd645f5a4769 11 days ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 2 months ago 791MB
centos latest 470671670cac 4 months ago 237MB
测试运行 tomcat02
这个时候,我们的镜像都是可以使用的,大家可以启动原来的tomcat,和我们新的tomcat02来 测试看看!
docker run -it -p 3344:8080 tomcat02:1.0
[root@xiaoyequ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c04be653acdf tomcat02:1.0 "catalina.sh run" About a minute ago Up About a minute 0.0.0.0:3344->8080/tcp magical_davinci
[root@xiaoyequ ~]# docker exec -it c04be653acdf /bin/bash
root@c04be653acdf:/usr/local/tomcat# cd webapps
root@c04be653acdf:/usr/local/tomcat/webapps# ls
ROOT examples host-manager manager
如果你想要保存你当前的状态,可以通过commit,来提交镜像,方便使用,类似于 VM 中的快照!