(1)commit命令作用
在運(yùn)行的容器中,并在鏡像的基礎(chǔ)上做了一些修改,我們希望保存起來,封裝成一個(gè)新的鏡像,方便我們以后使用,也就是提交容器副本,使之成為一個(gè)新的鏡像。
即:docker commit,從容器創(chuàng)建一個(gè)新的鏡像。
例如:
我們以Tomcat鏡像為例,運(yùn)行啟動(dòng)Tomcat鏡像后得到Tomcat容器,我們?cè)赥omcat容器中做了一些自定義的設(shè)計(jì)或者修改,使此時(shí)的Tomcat容器成為符合我們需求的容器,之后就可以通過docker commit命令提交生成一個(gè)新的Tomcat鏡像,也就是生成一個(gè)符合我們使用需求的Tomcat鏡像,再下次在使用Tomcat容器時(shí),直接使用我們自定義的新Tomcat鏡像即可。
(2)commit命令說明
命令格式如下:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要?jiǎng)?chuàng)建的目標(biāo)鏡像名:[標(biāo)簽名]
OPTIONS說明:
-
-a:提交的鏡像作者; -
-c:使用Dockerfile指令來創(chuàng)建鏡像; -
-m:提交時(shí)的說明文字; -
-p:在commit時(shí),將容器暫停。
(3)示例演示
我們通過示例加深對(duì)鏡像操作和理解。
步驟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:啟動(dòng)容器
執(zhí)行命令:docker run -it --name tomcat123 -p 8888:8080 tomcat:9.0(注意該命令最后不要加/bin/bash)
(-p用法可以看前面的Docker安裝Tomcat容器的練習(xí))
如下圖:

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

也可以執(zhí)行命令:docker run -d -p 6666: 8080 tomcat:9.0,進(jìn)行Tomcat容器的后臺(tái)啟動(dòng)。
步驟4:對(duì)Tomcat鏡像進(jìn)行修改
把Tomcat中webapps.dist目錄中的內(nèi)容,全部拷貝到webapps目錄中。
我們?cè)赬Shell中新建一個(gè)窗口,進(jìn)入Tomcat容器,進(jìn)行修改。
# 進(jìn)入Tomcat容器中
[root@192 ~]# docker exec -it tomcat123 /bin/bash
root@d60ed0bff852:/usr/local/tomcat#
# webapps.dist目錄中的內(nèi)容,全部拷貝到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
說明:
因?yàn)榘l(fā)現(xiàn)默認(rèn)Tomcat的webapps目錄中是沒有應(yīng)用,這是鏡像的原因,官方的鏡像默認(rèn)webapps下面是沒有文件的。
所以通過上面的操作,當(dāng)我們啟動(dòng)Tomcat鏡像的時(shí)候,就可以訪問到Tomcat的歡迎界面了。(具體可看前面的Docker安裝Tomcat容器的練習(xí))
步驟5:提交鏡像
將我們操作過的Tomcat容器通過commit提交為一個(gè)新的鏡像,我們以后就使用我們修改過的鏡像即可。
命令如下:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要?jiǎng)?chuàng)建的目標(biāo)鏡像名:[標(biāo)簽名]
示例:
# 退出Tomcat容器
root@d60ed0bff852:/usr/local/tomcat# exit
exit
# 執(zhí)行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鏡像多可以一個(gè)tomcat123鏡像,且是1.0版本。
也可以發(fā)現(xiàn)tomcat123鏡像的大小為653MB,比原先的tomcat鏡像649MB多了幾兆。
提示:
docker commit -m="add webapps App" -a="sunwukong" d60ed0bff852 tomcat123:1.0命令的最后
tomcat123:1.0為自定義的鏡像名和版本,也可以在前面加入Namespace的,也就如abc/tomcat123:1.0,這個(gè)abc就叫Namespace,就相當(dāng)與Java中,類前面的包名。我們拉取鏡像的時(shí)候也經(jīng)常會(huì)看到一些這樣命名的包,如用到過的portainer/portainer工具。關(guān)于Namespace命名空間,以后會(huì)詳細(xì)講解。
步驟6:啟動(dòng)自定義的Tomcat鏡像
執(zhí)行命令:docker run -it -p 8888:8080 tomcat123:1.0
這里提示一下,如果需要讓外部訪問容器的服務(wù),一定要進(jìn)行端口映射。
直接在外部瀏覽器中訪問,如下:

可以直接顯示Tomcat服務(wù)的歡迎界面。
到了這里才算是入門Dokcer!