『現學現忘』Docker基礎 — 27、Docker映象的commit操作

繁華似錦Fighting發表於2022-03-21

1、commit命令作用

在執行的容器中,並在映象的基礎上做了一些修改,我們希望儲存起來,封裝成一個新的映象,方便我們以後使用,也就是提交容器副本,使之成為一個新的映象。

即:docker commit,從容器建立一個新的映象。

例如:

我們以Tomcat映象為例,執行啟動Tomcat映象後得到Tomcat容器,我們在Tomcat容器中做了一些自定義的設計或者修改,使此時的Tomcat容器成為符合我們需求的容器,之後就可以通過docker commit命令提交生成一個新的Tomcat映象,也就是生成一個符合我們使用需求的Tomcat映象,再下次在使用Tomcat容器時,直接使用我們自定義的新Tomcat映象即可。

2、commit命令說明

命令格式如下:

docker commit -m="提交的描述資訊" -a="作者" 容器ID 要建立的目標映象名:[標籤名]

OPTIONS說明:

  • -a:提交的映象作者;
  • -c:使用Dockerfile指令來建立映象;
  • -m:提交時的說明文字;
  • -p:在commit時,將容器暫停。

3、示例演示

我們通過示例加深對映象操作和理解。

步驟1:檢視本地Docker映象

[root@192 ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
centos                latest    300e315adb2f   3 months ago   209MB

步驟2:下載Tomcat映象到本地

[root@192 ~]# docker pull tomcat:9.0
9.0: Pulling from library/tomcat
b9a857cbf04d: Pull complete 
d557ee20540b: Pull complete 
3b9ca4f00c2e: Pull complete 
667fd949ed93: Pull complete 
661d3b55f657: Pull complete 
511ef4338a0b: Pull complete 
a56db448fefe: Pull complete 
00612a99c7dc: Pull complete 
326f9601c512: Pull complete 
c547db74f1e1: Pull complete 
Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0

[root@192 ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
tomcat                9.0       040bdb29ab37   2 months ago   649MB
centos                latest    300e315adb2f   3 months ago   209MB

步驟3:啟動容器

執行命令:docker run -it --name tomcat123 -p 8888:8080 tomcat:9.0(注意該命令最後不要加/bin/bash

-p用法可以看前面的Docker安裝Tomcat容器的練習)

如下圖:

image

提示:-P大P的用法如下:

image

也可以執行命令:docker run -d -p 6666: 8080 tomcat:9.0,進行Tomcat容器的後臺啟動。

步驟4:對Tomcat映象進行修改

把Tomcat中webapps.dist目錄中的內容,全部拷貝到webapps目錄中。

我們在XShell中新建一個視窗,進入Tomcat容器,進行修改。

# 進入Tomcat容器中
[root@192 ~]# docker exec -it tomcat123 /bin/bash
root@d60ed0bff852:/usr/local/tomcat# 

# webapps.dist目錄中的內容,全部拷貝到webapps目錄中。
root@d60ed0bff852:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@d60ed0bff852:/usr/local/tomcat# ls -l webapps
total 4
drwxr-xr-x.  3 root root  223 Mar 18 05:02 ROOT
drwxr-xr-x. 15 root root 4096 Mar 18 05:02 docs
drwxr-xr-x.  7 root root   99 Mar 18 05:02 examples
drwxr-xr-x.  6 root root   79 Mar 18 05:02 host-manager
drwxr-xr-x.  6 root root  114 Mar 18 05:02 manager

說明:

因為發現預設Tomcat的webapps目錄中是沒有應用,這是映象的原因,官方的映象預設webapps下面是沒有檔案的。

所以通過上面的操作,當我們啟動Tomcat映象的時候,就可以訪問到Tomcat的歡迎介面了。(具體可看前面的Docker安裝Tomcat容器的練習)

步驟5:提交映象

將我們操作過的Tomcat容器通過commit提交為一個新的映象,我們以後就使用我們修改過的映象即可。

命令如下:

docker commit -m="提交的描述資訊" -a="作者" 容器ID 要建立的目標映象名:[標籤名]

示例:

# 退出Tomcat容器
root@d60ed0bff852:/usr/local/tomcat# exit
exit

# 執行docker commit 提交生成新的tomcat映象
[root@192 ~]# docker commit -m="add webapps App" -a="sunwukong" d60ed0bff852 tomcat123:1.0
sha256:e42c33552c6c3df7587f254803a0c1b4a686ff78d9f5e28aed0a94a3c91b22a4
[root@192 ~]# 

# 檢視本地Docker映象
[root@192 ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED              SIZE
tomcat123             1.0       e42c33552c6c   About a minute ago   653MB
tomcat                9.0       040bdb29ab37   2 months ago         649MB
centos                latest    300e315adb2f   3 months ago         209MB

我們可以看到本地Docker映象多可以一個tomcat123映象,且是1.0版本。

也可以發現tomcat123映象的大小為653MB,比原先的Tomcat映象649MB多了幾兆。

提示:

docker commit -m="add webapps App" -a="sunwukong" d60ed0bff852 tomcat123:1.0

命令的最後tomcat123:1.0為自定義的映象名和版本,也可以在前面加入Namespace的,也就如abc/tomcat123:1.0,這個abc就叫Namespace。你就可以想象於Java中,類前面的包名。我們拉取映象的時候也經常會看到一些這樣命名的包,如用到過的portainer/portainer工具。

關於Namespace名稱空間,以後會詳細講解。

步驟6:啟動自定義的Tomcat映象

執行命令:docker run -it -p 8888:8080 tomcat123:1.0

這裡提示一下,如果需要讓外部訪問容器的服務,一定要進行埠對映。

直接在外部瀏覽器中訪問,如下:

image

可以直接顯示Tomcat服務的歡迎介面。

到了這裡大概才算是入門Dokcer!

相關文章