容器數據卷
可以參考這篇作者的文檔加深理解。https://www.cnblogs.com/evan-liang/p/12372371.html
數據卷是docker容器內數據持久化使用的常見方式。
什麼是容器數據卷?
數據卷是經過特殊設計的目錄,可以繞過聯合文件系統(UFS),為一個或者多個容器提供訪問,數據卷
設計的目的,在於數據的永久存儲,它元全獨立於容器的生存週期,
因此,docker不會在容器刪除時刪
除其掛載的數據卷,也不會存在類似的對容器引用的數據進行處理,同一個數據卷可
以只支持多個容器的訪問。
數據卷的特點:
1.數據卷在容器啓動時初始化,如果容器使用的鏡像在掛載點包含了數據,這些數據會被拷貝到新初始
化的數據卷中
2.數據卷可以在容器之間共享和重用
3.可以對數據卷裏的內容直接進行修改中
4.數據卷的變化不會影像鏡像的更新
5.卷會一直存在,即使掛載數據卷的容器已經被刪除
數據卷掛載支持三種方式,tmpfs、volume、mount
tmpfs 非數據持久化方式。將數據卷掛載到宿主機內存中。建議只用於測試使用。
mount 將宿主機的目錄掛載到容器裏,操作權限在宿主機。
volume 將宿主機的目錄與容器目錄做綁定映射,操作權限在容器。
因docker官方強烈推薦使用volume,所以下面只敍述volume的用法
新建tomcat鏡像
[root@test-kylin ~]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
4b3ffd8ccb52: Pull complete
751f17092206: Pull complete
ce5f352694d8: Pull complete
4f4fb700ef54: Pull complete
1fd412807b1d: Pull complete
60905800dee0: Pull complete
fae8c29c75e2: Pull complete
Digest: sha256:1fb0037abb88abb3ff2fbeb40056f82f616522a92f1f4f7dc0b56cdb157542db
Status: Downloaded newer image for tomcat:latest
在宿主機上新建掛載目錄
[root@test-kylin /]# mkdir ~/data
[root@test-kylin data]# ll
總用量 0
[root@test-kylin data]#
啓動容器並掛載volume
[root@test-kylin data]# docker run -itd -p 8080 -v ~/data:/usr/local/tomcat/webapps --name tomcat-volume tomcat
724ba0ea46baa33208eaeddd2824c7188c9618384201dd0e54f4394e411ea72b
[root@test-kylin data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
724ba0ea46ba tomcat "catalina.sh run" 18 seconds ago Up 17 seconds 0.0.0.0:32768->8080/tcp tomcat-volume
[root@test-kylin data]#
命令格式:
-d 後台啓動 -p 宿主機端口:容器應用端口 --name 容器命名
-v 宿主機docker目錄:容器數據目錄 將容器的數據卷映射到宿主機docker目錄裏,做數據持久化。
容器啓動成功,我們查看下容器數據卷的掛載關係
[root@test-kylin ~]# docker inspect tomcat-volume
"Mounts": [ { "Type": "bind", "Source": "/root/data", "Destination": "/usr/local/tomcat/webapps", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
從容器元數據信息裏找到mount這段信息,説明容器的數據卷跟宿主機的docker目錄已建立掛載關係。
測試volume
容器創建好了,進去容器裏啓動下tomcat,看看能不能訪問
[root@test-kylin data]# docker exec -it tomcat-volume /bin/bash
root@724ba0ea46ba:/usr/local/tomcat# cd bin
root@724ba0ea46ba:/usr/local/tomcat/bin# ll
total 412
drwxr-xr-x 2 root root 4096 Oct 13 23:09 ./
drwxr-xr-x 1 root root 30 Oct 13 23:09 ../
-rw-r--r-- 1 root root 32198 Oct 10 13:57 bootstrap.jar
-rwxr-xr-x 1 root root 21179 Oct 13 23:09 catalina.sh*
-rw-r--r-- 1 root root 1664 Oct 10 13:57 catalina-tasks.xml
-rwxr-xr-x 1 root root 2007 Oct 13 23:09 ciphers.sh*
-rw-r--r-- 1 root root 26670 Oct 10 13:57 commons-daemon.jar
-rw-r--r-- 1 root root 215448 Oct 10 13:57 commons-daemon-native.tar.gz
-rwxr-xr-x 1 root root 1932 Oct 13 23:09 configtest.sh*
-rwxr-xr-x 1 root root 8329 Oct 13 23:09 daemon.sh*
-rwxr-xr-x 1 root root 1975 Oct 13 23:09 digest.sh*
-rwxr-xr-x 1 root root 3392 Oct 13 23:09 makebase.sh*
-rwxr-xr-x 1 root root 1980 Oct 13 23:09 migrate.sh*
-rwxr-xr-x 1 root root 3951 Oct 13 23:09 setclasspath.sh*
-rwxr-xr-x 1 root root 1912 Oct 13 23:09 shutdown.sh*
-rwxr-xr-x 1 root root 1914 Oct 13 23:09 startup.sh*
-rw-r--r-- 1 root root 51028 Oct 10 13:57 tomcat-juli.jar
-rwxr-xr-x 1 root root 4610 Oct 13 23:09 tool-wrapper.sh*
-rwxr-xr-x 1 root root 1918 Oct 13 23:09 version.sh*
root@724ba0ea46ba:/usr/local/tomcat/bin# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /opt/java/openjdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
root@724ba0ea46ba:/usr/local/tomcat/bin# exit
exit
[root@test-kylin data]#
[root@test-kylin data]# docker network inspect bridge
"Containers": {
"724ba0ea46baa33208eaeddd2824c7188c9618384201dd0e54f4394e411ea72b": { "Name": "tomcat-volume", "EndpointID": "90d4b6e73d4d3c7fd5c171d68427830497b0b9b2d5b815f273e47750b21142d0", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" }
[root@test-kylin data]# curl http://172.17.0.3:8080
<!doctype html>HTTP Status 404 – Not Found
HTTP Status 404 – Not Found
Type
Description
Apache Tomcat/11.0.13
[root@test-kylin data]#
哦豁。訪問報錯http404。。來看看容器webapps裏有沒有內容
[root@test-kylin data]# docker exec -it tomcat-volume /bin/bash
root@724ba0ea46ba:/usr/local/tomcat# cd webapps
root@724ba0ea46ba:/usr/local/tomcat/webapps# ll
total 0
root@724ba0ea46ba:/usr/local/tomcat/webapps#
哦。這就解釋通上面404的原因了,那。我找個tomcat的安裝包,把webapps裏的內容上傳到宿主機~/data目錄
[root@test-kylin data]# ll
總用量 4
drwxr-xr-x 16 root root 4096 11月 8 12:08 docs
drwxr-xr-x 7 root root 99 11月 8 12:08 examples
drwxr-xr-x 6 root root 79 11月 8 12:08 host-manager
drwxr-xr-x 6 root root 114 11月 8 12:08 manager
drwxr-xr-x 3 root root 223 11月 8 12:08 ROOT
[root@test-kylin data]#
這時候,去容器的webapps目錄裏看看,這些文件有了沒
[root@test-kylin data]# docker exec -it tomcat-volume /bin/bash
root@724ba0ea46ba:/usr/local/tomcat#
root@724ba0ea46ba:/usr/local/tomcat# cd webapps
root@724ba0ea46ba:/usr/local/tomcat/webapps# ll
total 4
drwxr-xr-x 7 root root 81 Nov 8 04:07 ./
drwxr-xr-x 1 root root 42 Oct 13 23:09 ../
drwxr-xr-x 16 root root 4096 Nov 8 04:08 docs/
drwxr-xr-x 7 root root 99 Nov 8 04:08 examples/
drwxr-xr-x 6 root root 79 Nov 8 04:08 host-manager/
drwxr-xr-x 6 root root 114 Nov 8 04:08 manager/
drwxr-xr-x 3 root root 223 Nov 8 04:08 ROOT/
root@724ba0ea46ba:/usr/local/tomcat/webapps#
容器的webapps目錄裏有了,,,這時候再去訪問tomcat
[root@test-kylin data]# curl http://172.17.0.3:8080
<head> <meta charset="UTF-8" /> <title>Apache Tomcat/11.0.13</title> <link href="favicon.ico" rel="icon" type="image/x-icon" /> <link href="tomcat.css" rel="stylesheet" type="text/css" /> </head> <body> <p class="copyright">Copyright ©1999-2025 Apache Software Foundation. All Rights Reserved</p> </body>
訪問成功。。。
那我在容器裏新增文件,看看宿主機會不會新增。。
[root@test-kylin data]# docker exec -it tomcat-volume /bin/bash
root@724ba0ea46ba:/usr/local/tomcat# cd webapps
root@724ba0ea46ba:/usr/local/tomcat/webapps# cat < index.html
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
](http://nginx.org/">nginx.org.
)Commercial support is available at
nginx.com.
](http://nginx.com/">nginx.com.
)
Thank you for using nginx.
EOF
root@724ba0ea46ba:/usr/local/tomcat/webapps#
root@724ba0ea46ba:/usr/local/tomcat/webapps# ll|grep index
-rw-r----- 1 root root 616 Nov 8 04:30 index.html
root@724ba0ea46ba:/usr/local/tomcat/webapps#
創建好了。。現在看看宿主機裏
root@724ba0ea46ba:/usr/local/tomcat/webapps# exit
exit
[root@test-kylin data]# ll|grep index
-rw-r----- 1 root root 616 11月 8 12:30 index.html
[root@test-kylin data]#
測試成功。
如果我不想讓人直接從容器裏做變更呢?是否可以設置訪問權限?
[root@test-kylin data]# docker run -itd -p 8080 -v ~/data:/usr/local/tomcat/webapps:ro --name tomcat-volume tomcat
這樣就好了。。現在只能從在宿主機裏做變更。。
刪除容器看看宿主機volume狀態
[root@test-kylin data]# docker rm -f tomcat-volume
tomcat-volume
[root@test-kylin data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@test-kylin data]#
看看宿主機的數據卷目錄還好嗎?
[root@test-kylin data]# ll
總用量 8
drwxr-xr-x 16 root root 4096 11月 8 12:08 docs
drwxr-xr-x 7 root root 99 11月 8 12:08 examples
drwxr-xr-x 6 root root 79 11月 8 12:08 host-manager
-rw-r----- 1 root root 616 11月 8 12:30 index.html
drwxr-xr-x 6 root root 114 11月 8 12:08 manager
drwxr-xr-x 3 root root 223 11月 8 12:08 ROOT
[root@test-kylin data]#
完好無損。
啓動一個新的容器掛載原有數據卷
我新建一個容器訪問上一步我新增的index.html文件,看看能不能訪問到
[root@test-kylin data]# docker run -itd -p 8080 -v ~/data:/usr/local/tomcat/webapps --name tomcat-volume-new tomcat
207a7dffd62ceb0c4f08e694da6057e51c89f2277014aa4b335bb26465b83401
[root@test-kylin data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
207a7dffd62c tomcat "catalina.sh run" 4 seconds ago Up 2 seconds 0.0.0.0:32769->8080/tcp tomcat-volume-new
[root@test-kylin data]# docker network inspect bridge
"Containers": { "207a7dffd62ceb0c4f08e694da6057e51c89f2277014aa4b335bb26465b83401": { "Name": "tomcat-volume-new", "EndpointID": "857cf4be66f1a8dad4071822b24b43fe34a2e0e3031ce15b7dbd32db55f8d5b3", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }
[root@test-kylin data]# docker exec -it tomcat-volume-new /bin/bash
root@207a7dffd62c:/usr/local/tomcat# cd webapps
root@207a7dffd62c:/usr/local/tomcat/webapps# ll
total 8
drwxr-xr-x 7 root root 99 Nov 8 04:28 ./
drwxr-xr-x 1 root root 42 Oct 13 23:09 ../
drwxr-xr-x 16 root root 4096 Nov 8 04:08 docs/
drwxr-xr-x 7 root root 99 Nov 8 04:08 examples/
drwxr-xr-x 6 root root 79 Nov 8 04:08 host-manager/
-rw-r----- 1 root root 616 Nov 8 04:30 index.html
drwxr-xr-x 6 root root 114 Nov 8 04:08 manager/
drwxr-xr-x 3 root root 223 Nov 8 04:08 ROOT/
root@207a7dffd62c:/usr/local/tomcat/webapps# cd ../bin
root@207a7dffd62c:/usr/local/tomcat/bin# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /opt/java/openjdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
root@207a7dffd62c:/usr/local/tomcat/bin#
root@207a7dffd62c:/usr/local/tomcat/bin# exit
exit
[root@test-kylin data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
207a7dffd62c tomcat "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:32769->8080/tcp tomcat-volume-new
[root@test-kylin data]#
[root@test-kylin data]# curl http://172.17.0.2:8080/index.html
<!doctype html>HTTP Status 404 – Not Found
HTTP Status 404 – Not Found
Type
Message
Description
Apache Tomcat/11.0.13
[root@test-kylin data]#
[root@test-kylin data]#
嗚呼。。報錯http404。。去補習下tomcat知識去
Tomcat認為:
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">webapps</font>目錄下的每一個文件夾都是一個獨立的Web應用webapps/
├── ROOT/ ← 這是一個應用 (項目名: "")
├── docs/ ← 這是一個應用 (項目名: "docs")
├── examples/ ← 這是一個應用 (項目名: "examples")
├── manager/ ← 這是一個應用 (項目名: "manager")
└── myapp/ ← 這是一個應用 (項目名: "myapp")
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">http://localhost:8080/</font>→ 找<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">ROOT</font>這個特殊應用
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">http://localhost:8080/docs/</font>→ 找<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">docs</font>應用
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">http://localhost:8080/examples/</font>→ 找<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">examples</font>應用
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">http://localhost:8080/myapp/</font>→ 找<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">myapp</font>應用當你把
<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">index.html</font>直接扔在<font style="color:rgb(15, 17, 21);background-color:rgb(235, 238, 242);">webapps</font>根目錄下時:webapps/
├── ROOT/
├── docs/
├── examples/
├── index.html ← ❌ Tomcat:這貨是誰?不屬於任何應用!
Tomcat內心OS:"這個index.html是哪家的孩子?沒爹沒媽的,我不知道該用哪個應用的配置來處理它!"
突然覺得我被AI罵了。。還罵的好髒。。好吧,那我在宿主機上把index.html移動到ROOT目錄裏
[root@test-kylin data]# mv index.html ROOT/
[root@test-kylin data]# docker exec -it tomcat-volume-new /bin/bash
root@207a7dffd62c:/usr/local/tomcat# cd webapps/ROOT
root@207a7dffd62c:/usr/local/tomcat/webapps/ROOT# ll index.html
-rw-r----- 1 root root 616 Nov 8 04:30 index.html
root@207a7dffd62c:/usr/local/tomcat/webapps/ROOT#
檢查完畢。重新訪問
[root@test-kylin data]# curl http://172.17.0.2:8080/index.html
Welcome to nginx!
[root@test-kylin data]#
訪問成功。。
數據卷容器
什麼是數據卷容器?
一個掛載數據卷的容器,其它容器通過掛載它的數據卷實現資源共享,那麼,這個掛載數據卷的容器就叫數據卷容器。
新建數據卷容器並測試
[root@test-kylin data]# docker run -itd --name volume_container --volumes-from tomcat-volume tomcat
3c551e905506d30cd46eb2edf5ddc2a6242220789949bada7118d485587d0ccf
[root@test-kylin data]#
[root@test-kylin data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c551e905506 tomcat "catalina.sh run" 10 seconds ago Up 9 seconds 8080/tcp volume_container
61ee6e8f0e86 tomcat "catalina.sh run" 6 minutes ago Up 6 minutes 0.0.0.0:32770->8080/tcp tomcat-volume
[root@test-kylin data]#
[root@test-kylin data]# docker exec -it volume_container /bin/bash
root@3c551e905506:/usr/local/tomcat#
root@3c551e905506:/usr/local/tomcat# cd webapps/ROOT
root@3c551e905506:/usr/local/tomcat/webapps/ROOT# ll
total 148
drwxr-xr-x 3 root root 241 Nov 8 06:57 ./
drwxr-xr-x 7 root root 81 Nov 8 06:57 ../
-rw-r--r-- 1 root root 7089 Nov 8 04:08 asf-logo-wide.svg
-rw-r--r-- 1 root root 713 Nov 8 04:08 bg-button.png
-rw-r--r-- 1 root root 1918 Nov 8 04:08 bg-middle.png
-rw-r--r-- 1 root root 1401 Nov 8 04:08 bg-nav.png
-rw-r--r-- 1 root root 3103 Nov 8 04:08 bg-upper.png
-rw-r--r-- 1 root root 21630 Nov 8 04:08 favicon.ico
-rw-r----- 1 root root 616 Nov 8 04:30 index.html
-rw-r--r-- 1 root root 12239 Nov 8 04:08 index.jsp
-rw-r--r-- 1 root root 6470 Nov 8 04:08 RELEASE-NOTES.txt
-rw-r--r-- 1 root root 5584 Nov 8 04:08 tomcat.css
-rw-r--r-- 1 root root 67795 Nov 8 04:08 tomcat.svg
drwxr-xr-x 2 root root 21 Nov 8 04:08 WEB-INF/
root@3c551e905506:/usr/local/tomcat/webapps/ROOT#
root@3c551e905506:/usr/local/tomcat/bin# exit
exit
[root@test-kylin data]# docker network inspect bridge
"Containers": {
"3c551e905506d30cd46eb2edf5ddc2a6242220789949bada7118d485587d0ccf": { "Name": "volume_container", "EndpointID": "12c82a4fc6caa210367b567ec1f5616974f86789ac9956968594622a294a1a24", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": ""
},
[root@test-kylin data]# curl http://172.17.0.3:8080/index.html
Welcome to nginx!
我新建了一個容器volume_container,在這個新容器裏做了跟原數據卷容器一樣的操作,測試成功。
嘗試在新容器裏新增一個文件,看看數據卷容器裏會不會新增。
root@3c551e905506:/usr/local/tomcat/webapps# mkdir myapp
root@3c551e905506:/usr/local/tomcat/webapps/myapp# cat < abc.txt
hahaha! I'm alive!
EOF
root@3c551e905506:/usr/local/tomcat/webapps/myapp# ll abc.txt
-rw-r----- 1 root root 19 Nov 8 07:30 abc.txt
root@3c551e905506:/usr/local/tomcat/webapps/myapp#
root@3c551e905506:/usr/local/tomcat/webapps/myapp# exit
exit
[root@test-kylin data]# ll myapp/abc.txt
-rw-r----- 1 root root 19 11月 8 15:30 myapp/abc.txt
[root@test-kylin data]#
root@61ee6e8f0e86:/usr/local/tomcat# ll webapps/myapp/abc.txt
-rw-r----- 1 root root 19 Nov 8 07:30 webapps/myapp/abc.txt
root@61ee6e8f0e86:/usr/local/tomcat#
在新容器裏abc.txt,宿主機跟數據卷容器裏都新增了。
容器互聯
容器一跟容器二可以聯通。
[root@test-kylin data]# docker run -itd --name test1 alpine
3526c2bf7cac1b0c72a4872f7ea8beebb2632af1b2c843a28515d2aa08942a52
[root@test-kylin data]#
[root@test-kylin data]# docker run -itd --name test2 alpine
bd8cece942a46f7328d137d3a40a407a9282b287004a89e2be19464daa915455
[root@test-kylin data]#
[root@test-kylin data]# docker run -itd --name test3 --link test2:webtest1 alpine
87ecd764075f5ba37d78d8840ef460022f6a4fccb3366881d84347acb3f1d0d0
[root@test-kylin data]#
[root@test-kylin data]# docker run -itd --name test4 --link test1:webtest2 alpine
2737b6db02cd03c4194704e930209a4aad06f1e99f68d6863ec1bfef8b1edf05
[root@test-kylin data]#
[root@test-kylin data]# docker run -itd --name test5 --link test3:webtest3 alpine
bf39f8e1c930f33f8afcf0dd4f9e274369483702df9b387becf7af2ddc2abc81
[root@test-kylin data]#
[root@test-kylin data]# docker run -itd --name test6 --link test4:webtest4 alpine
26e573e445280b639cd8091e1d66a7169a0771dcefd420454387ea34c27d5bdb
[root@test-kylin data]#
這麼一通操作下來,理論上test1到test6之間都是可以互相連通的。
先記一下幾個容器的IP
[root@test-kylin data]# docker exec -it test1 /bin/sh
/ # ip a
28: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
/ #
由上可知,容器test1的IP是172.17.0.2,容器test2的IP是172.17.0.3,以此類推到test6。
下面用test1試試聯通效果
[root@test-kylin data]# docker exec -it test1 /bin/sh
/ #
/ # ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.180 ms
^C
--- 172.17.0.3 ping statistics ---
4 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.072/0.136/0.180 ms
/ # ping 172.17.0.4
PING 172.17.0.4 (172.17.0.4): 56 data bytes
64 bytes from 172.17.0.4: seq=0 ttl=64 time=0.081 ms
^C
--- 172.17.0.4 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.081/0.146/0.211 ms
/ # ping 172.17.0.5
PING 172.17.0.5 (172.17.0.5): 56 data bytes
64 bytes from 172.17.0.5: seq=0 ttl=64 time=0.084 ms
^C
--- 172.17.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.070/0.125/0.188 ms
/ # ping 172.17.0.6
PING 172.17.0.6 (172.17.0.6): 56 data bytes
64 bytes from 172.17.0.6: seq=0 ttl=64 time=0.082 ms
^C
--- 172.17.0.6 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.082/0.149/0.208 ms
/ # ping 172.17.0.7
PING 172.17.0.7 (172.17.0.7): 56 data bytes
64 bytes from 172.17.0.7: seq=0 ttl=64 time=0.082 ms
^C
--- 172.17.0.7 ping statistics ---
4 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.082/0.112/0.154 ms
/ #
結果如上。test1確實可以聯通所有容器。
我們還可以這麼做,讓兩個容器的名稱做綁定,類似於虛擬機的/etc/host域名解析操作。
上面的操作,容器test3跟test2綁定,test4跟test1綁定,test5跟test3綁定,test6跟test4綁定。
[root@test-kylin data]# docker exec -it test4 /bin/sh
/ #
/ # ping test1
PING test1 (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.077 ms
^C
--- test1 ping statistics ---
4 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.068/0.072/0.077 ms
/ #
/ # ping test2
ping: bad address 'test2'
/ #
[root@test-kylin data]# docker exec -it test6 /bin/sh
/ #
/ # ping test4
PING test4 (172.17.0.5): 56 data bytes
64 bytes from 172.17.0.5: seq=0 ttl=64 time=0.078 ms
^C
--- test4 ping statistics ---
4 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.068/0.097/0.147 ms
/ #
上面突然有個想法,test4跟test1綁定,test6跟test4綁定,可不可以實現套娃操作,讓test6跟test1連通。
[root@test-kylin data]# docker exec -it test6 /bin/sh
/ #
/ # ping test4
PING test4 (172.17.0.5): 56 data bytes
64 bytes from 172.17.0.5: seq=0 ttl=64 time=0.078 ms
^C
--- test4 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.068/0.097/0.147 ms
/ #
/ # ping test1
ping: bad address 'test1'
/ #
測試結果表明,這個操作不可行。。