docker中容器間的通信方式:1、利用容器ip訪問(wèn);2、利用宿主機(jī)的“ip:port”訪問(wèn);3、利用link建立連接進(jìn)行通信;4、利用“User-defined networks”進(jìn)行通信。
本教程操作環(huán)境:linux7.3系統(tǒng)、docker-1.13.1版、Dell G3電腦。
Docker中容器間的通信方式有哪些
1.通過(guò)容器ip訪問(wèn)
? ? 容器重啟后,ip會(huì)發(fā)生變化。通過(guò)容器ip訪問(wèn)不是一個(gè)好的方案。
2.通過(guò)宿主機(jī)的ip:port訪問(wèn)
? ? 通過(guò)宿主機(jī)的ip:port訪問(wèn),只能依靠監(jiān)聽(tīng)在暴露出的端口的進(jìn)程來(lái)進(jìn)行有限的通信。
3.通過(guò)link建立連接(官方不推薦使用)
? ? ?運(yùn)行容器時(shí),指定參數(shù)link,使得源容器與被鏈接的容器可以進(jìn)行相互通信,并且接受的容器可以獲得源容器的一些數(shù)據(jù),比如:環(huán)境變量。
#?源容器:mysql docker?run?-itd?--name?test-mysql?-e?MYSQL_ROOT_PASSWORD=root?mysql:5.7 #被鏈接容器?centos docker?run?-itd?--name?test-centos?--link?test-mysql:mysql??centos?/bin/bash #進(jìn)入test-centos docker?exec?-it?test-centos?/bin/bash
直接通過(guò) link的名字或者link時(shí)候取的別名就能進(jìn)入:
通過(guò)link建立連接的容器,被鏈接的容器能 ping 通源容器,反過(guò)來(lái)不行。
在被鏈接的容器上查看環(huán)境變量
被鏈接容器會(huì)繼承源容器的環(huán)境變量信息。
與/etc/hosts中的主機(jī)條目不同,如果重新啟動(dòng)源容器,則不會(huì)自動(dòng)更新存儲(chǔ)在環(huán)境變量中的IP地址。我們建議使用主機(jī)條目 /etc/hosts來(lái)解析鏈接容器的IP地址。
除了環(huán)境變量之外,Docker還將源容器的主機(jī)條目添加到/etc/hosts文件中。
如果重新啟動(dòng)源容器,/etc/hosts鏈接容器上的文件將使用源容器的新IP地址自動(dòng)更新,從而允許鏈接通信繼續(xù)。
4.通過(guò) User-defined networks(推薦)
? ? ?docker network來(lái)創(chuàng)建一個(gè)橋接網(wǎng)絡(luò),在docker run的時(shí)候?qū)⑷萜髦付ǖ叫聞?chuàng)建的橋接網(wǎng)絡(luò)中,這樣同一橋接網(wǎng)絡(luò)中的容器就可以通過(guò)互相訪問(wèn)。
創(chuàng)建網(wǎng)絡(luò)
docker?network?create?test-network
啟動(dòng)容器時(shí),加入創(chuàng)建的網(wǎng)絡(luò)
docker?run?-it?--network?test-network?--network-alias?mysql??-e?MYSQL_ROOT_PASSWORD=123?mysql:5.7
啟動(dòng)被鏈接的容器
?docker?run?-it?--network?test-network?--network-alias?centos??centos?/bin/bash
推薦學(xué)習(xí):《docker視頻教程》