Docker容器互相連接三種實(shí)現(xiàn)方法詳解
docker容器間的互連通信有三種方法:
- docker內(nèi)部網(wǎng)絡(luò):不夠靈活強(qiáng)大,不推薦
- docker networking:1.9或更新版本,推薦使用
- docker鏈接:1.9之前版本適用。
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開(kāi)頭命名,
通過(guò)把每個(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)的弊端:
- 要在容器的應(yīng)用程序里對(duì)另一個(gè)容器的IP地址做硬編碼;
- 容器重啟后,IP地址可能會(huì)改變;
- 不夠方便和靈活。
2.docker networking
容器之間的連接用網(wǎng)絡(luò)創(chuàng)建。
允許用戶創(chuàng)建自己的網(wǎng)絡(luò),容器通過(guò)這個(gè)網(wǎng)絡(luò)互相通信;
可以跨越不同的宿主機(jī)來(lái)通信,網(wǎng)絡(luò)配置也更靈活;
可以在無(wú)需更新連接的情況下,停止、啟動(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)行的容器,
并通過(guò)/etc/hosts文件將這些容器的地址保存到本地DNS中,
網(wǎng)絡(luò)內(nèi)的任何主機(jī)都可以使用hostname或hostname.netname的形式來(lái)被解析訪問(wèn),
如果任何一個(gè)容器重啟了,其IP地址會(huì)自動(dòng)在/etc/hosts文件中更新,
測(cè)試中發(fā)現(xiàn)/etc/hosts文件中好像沒(méi)有新增其他容器的地址,但也能互相ping通;
一個(gè)容器可以同時(shí)加入多個(gè)網(wǎng)絡(luò),所以可以創(chuàng)建非常復(fù)雜的網(wǎng)絡(luò)模型;
- docker network create 創(chuàng)建一個(gè)網(wǎng)絡(luò)
- docker network inspect 查看網(wǎng)絡(luò)的詳細(xì)信息
- docker network ls 列出當(dāng)前系統(tǒng)中的所有網(wǎng)絡(luò)
- docker network connect 將已有容器連接到一個(gè)網(wǎng)絡(luò)
- docker network disconnect 從網(wǎng)絡(luò)中斷開(kāi)一個(gè)容器
- docker network rm 刪除一個(gè)或多個(gè)網(wǎng)絡(luò)
- docker network prune 刪除所有未使用的網(wǎng)絡(luò)
3.docker鏈接
在鏈接過(guò)程中要引用到容器的名字,且只能工作于同一臺(tái)宿主機(jī)中。
在docker run啟動(dòng)容器時(shí)用參數(shù) --link 創(chuàng)建兩個(gè)容器間的 客戶-服務(wù) 鏈接,
需要兩個(gè)參數(shù),一個(gè)是鏈接容器的名字,一個(gè)是鏈接的別名,即 --link redis:db,
被鏈接的容器是服務(wù),鏈接讓服務(wù)容器能夠和客戶容器通信,
客戶容器可直接訪問(wèn)服務(wù)容器的任意公開(kāi)端口,所以服務(wù)容器的端口不需要對(duì)本地宿主機(jī)公開(kāi),相對(duì)更加安全;
可以把多個(gè)客戶容器鏈接到同一個(gè)服務(wù)容器,也可通過(guò)指定多次--link來(lái)鏈接到多個(gè)服務(wù)容器,
docker在容器的/etc/hosts文件和包含鏈接信息的環(huán)境變量里寫(xiě)入鏈接信息;
無(wú)論采用哪種方式,都可以創(chuàng)建一個(gè)Web應(yīng)用程序棧,包含以下組件:
- 一個(gè)Web服務(wù)器容器
- 一個(gè)Redis數(shù)據(jù)庫(kù)容器
- 兩個(gè)容器間的一個(gè)安全鏈接
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker swarm 集群創(chuàng)建過(guò)程
通過(guò)docker swarm 工具將一臺(tái)或者多臺(tái)安裝了docker的服務(wù)器組成一個(gè)完整的集群,該集群中的node節(jié)點(diǎn)可以通過(guò)Leader節(jié)點(diǎn)管理,這篇文章主要介紹了docker swarm 集群創(chuàng)建,需要的朋友可以參考下2024-03-03Docker快速部署國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例
本文主要介紹了Docker快速部署國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07docker中修改mysql最大連接數(shù)及配置文件的實(shí)現(xiàn)
這篇文章主要介紹了docker中修改mysql最大連接數(shù)及配置文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-125款超好用的開(kāi)源 Docker工具強(qiáng)烈推薦
這篇文章主要介紹了5款超好用的開(kāi)源 Docker工具強(qiáng)烈推薦,這5個(gè)工具非常實(shí)用,有需要同學(xué)可以學(xué)習(xí)下2021-03-03生產(chǎn)環(huán)境中安全運(yùn)行Docker容器
本文是一篇譯文,給大家詳細(xì)介紹如何在生產(chǎn)環(huán)境中安全運(yùn)行Docker容器,有需要的小伙伴可以參考下2017-01-01Windows?Server?2016中文版安裝docker的詳細(xì)步驟
因業(yè)務(wù)需要所以需要安裝Docker,但是在途中遇到了一些問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于Windows?Server?2016中文版安裝docker的詳細(xì)步驟,需要的朋友可以參考下2022-07-07Linux環(huán)境下安裝docker環(huán)境(親測(cè)無(wú)坑)
大家好,本篇文章主要講的是Linux環(huán)境下安裝docker環(huán)境(親測(cè)無(wú)坑),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12