您好,登錄后才能下訂單哦!
小編這次要給大家分享的是詳解Docker容器如何互相連接,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
docker容器間的互連通信有三種方法:
1.docker內(nèi)部網(wǎng)絡(luò)
涉及docker自己的網(wǎng)絡(luò)棧。
安裝docker后,系統(tǒng)會(huì)創(chuàng)建一個(gè)新的網(wǎng)絡(luò)接口,名字是docker0,用于連接容器和宿主機(jī),IP范圍是172.16-172.30,
每個(gè)docker容器都會(huì)在這個(gè)接口上分配一個(gè)IP地址。
docker每創(chuàng)建一個(gè)容器就會(huì)創(chuàng)建一組互聯(lián)的網(wǎng)絡(luò)接口,一端是容器里的eth0接口,另一端則在宿主機(jī)以veth開頭命名,
通過把每個(gè)veth接口綁定到docker0網(wǎng)橋,docker創(chuàng)建了一個(gè)虛擬子網(wǎng),這個(gè)子網(wǎng)由宿主機(jī)和所有的docker容器共享,
實(shí)現(xiàn)容器和宿主機(jī)的通信連接,注意只有容器運(yùn)行時(shí)veth接口才存在。
用內(nèi)部網(wǎng)絡(luò)實(shí)現(xiàn)容連互聯(lián)的弊端:
2.docker networking
容器之間的連接用網(wǎng)絡(luò)創(chuàng)建。
允許用戶創(chuàng)建自己的網(wǎng)絡(luò),容器通過這個(gè)網(wǎng)絡(luò)互相通信;
可以跨越不同的宿主機(jī)來通信,網(wǎng)絡(luò)配置也更靈活;
可以在無需更新連接的情況下,停止、啟動(dòng)或者重啟容器;
不必事先創(chuàng)建容器再去連接它,也不必關(guān)心容器的運(yùn)行順序,可以在網(wǎng)絡(luò)內(nèi)部獲得容器名解析和發(fā)現(xiàn);
和docker compose以及swarm進(jìn)行了集成;
在docker網(wǎng)絡(luò)內(nèi)部啟動(dòng)的容器,會(huì)感知到所有在這個(gè)網(wǎng)絡(luò)下運(yùn)行的容器,
并通過/etc/hosts文件將這些容器的地址保存到本地DNS中,
網(wǎng)絡(luò)內(nèi)的任何主機(jī)都可以使用hostname或hostname.netname的形式來被解析訪問,
如果任何一個(gè)容器重啟了,其IP地址會(huì)自動(dòng)在/etc/hosts文件中更新,
測試中發(fā)現(xiàn)/etc/hosts文件中好像沒有新增其他容器的地址,但也能互相ping通;
一個(gè)容器可以同時(shí)加入多個(gè)網(wǎng)絡(luò),所以可以創(chuàng)建非常復(fù)雜的網(wǎng)絡(luò)模型;
3.docker鏈接
在鏈接過程中要引用到容器的名字,且只能工作于同一臺宿主機(jī)中。
在docker run啟動(dòng)容器時(shí)用參數(shù) --link 創(chuàng)建兩個(gè)容器間的 客戶-服務(wù) 鏈接,
需要兩個(gè)參數(shù),一個(gè)是鏈接容器的名字,一個(gè)是鏈接的別名,即 --link redis:db,
被鏈接的容器是服務(wù),鏈接讓服務(wù)容器能夠和客戶容器通信,
客戶容器可直接訪問服務(wù)容器的任意公開端口,所以服務(wù)容器的端口不需要對本地宿主機(jī)公開,相對更加安全;
可以把多個(gè)客戶容器鏈接到同一個(gè)服務(wù)容器,也可通過指定多次--link來鏈接到多個(gè)服務(wù)容器,
docker在容器的/etc/hosts文件和包含鏈接信息的環(huán)境變量里寫入鏈接信息;
無論采用哪種方式,都可以創(chuàng)建一個(gè)Web應(yīng)用程序棧,包含以下組件:
看完這篇關(guān)于詳解Docker容器如何互相連接的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。