docker容器通信參數(shù)使用及l(fā)ink參數(shù)介紹
link機(jī)制介紹
同一個宿主機(jī)上的多個docker容器之間如果想進(jìn)行通信,可以通過使用容器的ip地址來通信,也可以通過宿主機(jī)的ip加上容器暴露出的端口號來通信,前者會導(dǎo)致ip地址的硬編碼,不方便遷移,并且容器重啟后ip地址會改變,除非使用固定的ip,后者的通信方式比較單一,只能依靠監(jiān)聽在暴露出的端口的進(jìn)程來進(jìn)行有限的通信。通過docker的link機(jī)制可以通過一個name來和另一個容器通信,link機(jī)制方便了容器去發(fā)現(xiàn)其它的容器并且可以安全的傳遞一些連接信息給其它的容器。docker run --link可以用來鏈接2個容器,使得源容器(被鏈接的容器)和接收容器(主動去鏈接的容器)之間可以互相通信,本質(zhì)是接收容器的/etc/hosts會添加關(guān)于源容器的dns解析,接收容器可以通過容器名/容器id/alias訪問源容器,并且接收容器可以獲取源容器的一些數(shù)據(jù),如源容器的環(huán)境變量。該機(jī)制的局限是dns解析只是單項(xiàng)的,接收容器只能dns解析源容器,而源容器無法dns解析接收容器。
link使用
格式
--link <name or id>:alias
其中,name和id是源容器的name和id,alias是源容器在link下的別名
1、link 參數(shù)作用
同一個宿主主機(jī)上的多個docker容器之間如果需要進(jìn)行通信,第一種最容易想到的方式就是使用容器自身的ip地址、宿主主機(jī)的ip+容器暴露出的端口號來通信,我們知道默認(rèn)情況下docker重新run后,對應(yīng)的IP地址就會改變,這樣如果兩個容器之間通信就會變得非常麻煩,每次都要修改通信的IP地址。這個時候 --link參數(shù)就派上大用場了,它會給要鏈接的容器設(shè)定一個通信的別名,即使重啟后IP地址發(fā)生了改變,依然可以正常通信。
2、命令格式
docker run -d --name myname--link toname:alisname -p 本地端口:容器端口 鏡像名稱
參數(shù)說明:
-- name:新容器名詞
-- link:目標(biāo)容器名稱:別名
-p: 本地端口:容器端口
3、link原理
--link的原理就是在/etc/hosts里面添加了一個alias的名稱
4、測試案例
首先啟動一個tomcat01的容器
docker run -itd --name tomcat01 -p 8100:8080 tomcat:8.5.38
docker ps 獲取容器的id d92f947ea54f
獲取單個容器 ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' d92f947ea54f
啟動一個nginx容器設(shè)置與tomcat01連通
docker run -itd --name nginx01 --link tomcat01 nginx
進(jìn)入容器內(nèi)部查看 etc/hosts配置文件
docker exec -it nginx01 /bin/bash #進(jìn)入容器內(nèi)部 apt update && apt install -y iproute2 # 安裝ping命令 cat /etc/hosts #查看配置文件 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.4 tomcat01 d92f947ea54f 172.17.0.6 70aa4c7dde72
測試nginx01 ping tomcat01
docker exec -it nginx01 ping tomcat01 PING tomcat01 (172.18.0.2): 56 data bytes 64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.102 ms 64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.093 ms 64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.110 ms 64 bytes from 172.18.0.2: icmp_seq=3 ttl=64 time=0.073 ms
5、link參數(shù)注意事項(xiàng)
- 使用link參數(shù)建立的容器所鏈接的主機(jī)需要處于運(yùn)行狀態(tài)
- 所鏈接的容器也必須是運(yùn)行狀態(tài)
- 使用link選項(xiàng)鏈接的主機(jī)ip不需要固定,因?yàn)槊看涡陆ㄈ萜鞫紩z查所鏈接容器的ip,并在/etc/hosts里生成新的alias 名稱對應(yīng)的ip
到此這篇關(guān)于docker容器通信參數(shù) --link參數(shù)介紹的文章就介紹到這了,更多相關(guān)docker容器通信link內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力
這篇文章主要介紹了Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10局域網(wǎng)內(nèi)部署 Docker Registry(推薦)
本文將從創(chuàng)建單機(jī)的 Docker Registry 開始,逐步完成局域網(wǎng)內(nèi)可用的 Docker Registry 的創(chuàng)建,并重點(diǎn)解釋如何使用 IP 地址訪問 Registry 的方法2017-05-05docker安裝elasticsearch和kibana的方法步驟
這篇文章主要介紹了docker安裝elasticsearch和kibana的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式
這篇文章主要介紹了docker拷貝文件到主機(jī)及導(dǎo)入導(dǎo)出容器及運(yùn)行導(dǎo)出容器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05Springboot使用docker-compose實(shí)現(xiàn)動態(tài)配置過程
這篇文章主要介紹了Springboot使用docker-compose實(shí)現(xiàn)動態(tài)配置全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03手把手教你docker部署(使用docker-compose)教程
使用 Docker Compose 可以輕松、高效的管理容器,下面這篇文章主要給大家介紹了關(guān)于手把手教你docker部署(使用docker-compose)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01docker 容器添加指定網(wǎng)絡(luò)地址的方法實(shí)現(xiàn)
Docker容器運(yùn)行的時候默認(rèn)會自動分配一個默認(rèn)網(wǎng)橋所在網(wǎng)段的IP地址,本文主要介紹了docker容器添加指定網(wǎng)絡(luò)地址的方法實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-01-01