Commit 鏡像

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章