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 中的快照!