溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

docker容器如何實(shí)現(xiàn)跨主機(jī)通信

發(fā)布時(shí)間:2020-06-11 20:18:32 來源:億速云 閱讀:394 作者:元一 欄目:云計(jì)算

什么是docker

docker是一個(gè)開源的應(yīng)用容器引擎,開發(fā)者可以打包自己的應(yīng)用到容器里面,然后遷移到其他機(jī)器的docker應(yīng)用中,可以實(shí)現(xiàn)快速部署。如果出現(xiàn)的故障,可以通過鏡像,快速恢復(fù)服務(wù)。

docker安裝

環(huán)境準(zhǔn)備

操作系統(tǒng):CentOS 7.6.1810

軟件源:阿里云鏡像(在阿里云鏡像站上面可以找到docker-ce的軟件源,使用國(guó)內(nèi)的源速度比較快)

安裝docker-ce

如果沒有物理機(jī),可以先使用虛擬機(jī)進(jìn)行學(xué)習(xí)。操作系統(tǒng)安裝,跳過(網(wǎng)上教程很多)。

1、安裝依賴

docker依賴于系統(tǒng)的一些必要的工具,可以提前安裝。

yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加軟件源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安裝docker-ce

yum clean all yum makecache fastyum -y install docker-ce

4、啟動(dòng)服務(wù)

通過systemctl啟動(dòng)服務(wù)

systemctl start docker

5、查看安裝版本

這樣子就安裝成功了,啟動(dòng)服務(wù)以后可以使用docker version查看一下當(dāng)前的版本。

一、準(zhǔn)備工作
跨主機(jī)需要兩個(gè)獨(dú)立的網(wǎng)卡:
server1和server2添加網(wǎng)卡

docker容器如何實(shí)現(xiàn)跨主機(jī)通信
docker容器如何實(shí)現(xiàn)跨主機(jī)通信
docker容器如何實(shí)現(xiàn)跨主機(jī)通信

[root@localhost ~]# ip addr show   查看網(wǎng)卡是否添加成功

docker容器如何實(shí)現(xiàn)跨主機(jī)通信
添加成功。

macvlan本身是linxu kernel的模塊,本質(zhì)上是一種網(wǎng)卡虛擬化技術(shù)。其功能是允許在同一個(gè)物理網(wǎng)卡上虛擬出多個(gè)網(wǎng)卡,通過不同的MAC地址在數(shù)據(jù)鏈路層進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的轉(zhuǎn)發(fā),一塊網(wǎng)卡上配置多個(gè) MAC 地址(即多個(gè) interface),每個(gè)interface可以配置自己的IP,Docker的macvlan網(wǎng)絡(luò)實(shí)際上就是使用了Linux提供的macvlan驅(qū) 動(dòng)。因?yàn)槎鄠€(gè)MAC地址的網(wǎng)絡(luò)數(shù)據(jù)包都是從同一塊網(wǎng)卡上傳輸,所以需要打開網(wǎng)卡的混雜模式ip link set eth2 promisc on。

打開server1和server2的ens37網(wǎng)卡的混雜模式,在server1和server2上運(yùn)行以下命令:
[root@localhost ~]# ip link set ens37 promisc  on
[root@localhost ~]# ip addr show ens37              #查看promiscm功能是否打開

docker容器如何實(shí)現(xiàn)跨主機(jī)通信
docker容器如何實(shí)現(xiàn)跨主機(jī)通信
注意:如果不開啟混雜模式,會(huì)導(dǎo)致macvlan網(wǎng)絡(luò)無法訪問外界
具體在不使用vlan時(shí),表現(xiàn)為無法ping通路由,無法ping通同一網(wǎng)絡(luò)內(nèi)其他主機(jī)
在兩臺(tái)主機(jī)上各創(chuàng)建macvlan網(wǎng)絡(luò)
創(chuàng)建macvlan網(wǎng)絡(luò)不同于橋接模式,需要指定網(wǎng)段和網(wǎng)關(guān)(因?yàn)橐WC跨主機(jī)上網(wǎng)段和網(wǎng)關(guān)是相同的),并且都得是真實(shí)存在的
[root@localhost ~]# docker network create -d macvlan --subnet 172.16.36.0/24 --gateway 172.16.36.254 -o parent=ens37 macvlan       #創(chuàng)建名為macvlan的網(wǎng)絡(luò)
[root@localhost ~]# docker network ls        #查看本地網(wǎng)絡(luò)信息

docker容器如何實(shí)現(xiàn)跨主機(jī)通信

創(chuàng)建docker容器
server1:
[root@localhost ~]# docker run -it --name vm01 --network=macvlan --ip=172.16.36.101 centos
[root@1f89fd5f37ff /]# ip addr

docker容器如何實(shí)現(xiàn)跨主機(jī)通信

[root@1f89fd5f37ff /]# ping 172.16.36.100

docker容器如何實(shí)現(xiàn)跨主機(jī)通信
server2:
[root@localhost ~]# docker run -it --name vm02 --network=macvlan --ip=172.16.36.100 centos
[root@e8da7e4ef2b3 /]# ip addr

docker容器如何實(shí)現(xiàn)跨主機(jī)通信

[root@e8da7e4ef2b3 /]# ping 172.16.36.101

docker容器如何實(shí)現(xiàn)跨主機(jī)通信

跨主機(jī)通信就這樣配置完了。

DNS設(shè)置

跨主機(jī)通信設(shè)置成功后,容器可能需要上網(wǎng)進(jìn)行資料下載。所以現(xiàn)在進(jìn)行DNS設(shè)置,配置如下:
修改daemon.json文件,文件所在路徑為/etc/docker/下,文件添加以下內(nèi)容:
"dns" :[
"172.16.1.1",
"202.96.128.166"
]
docker容器如何實(shí)現(xiàn)跨主機(jī)通信
注:安裝軟件為docker的直接修改daemon.json文件,安裝軟件為docker-ce的需要?jiǎng)?chuàng)建daemon.json文件。

測(cè)試:
docker容器如何實(shí)現(xiàn)跨主機(jī)通信

補(bǔ)充:

在使用過程中,發(fā)現(xiàn)重啟宿主主機(jī)后,macvlan模式會(huì)自動(dòng)關(guān)閉,導(dǎo)致使用該功能的容器之間無法通信。
docker容器如何實(shí)現(xiàn)跨主機(jī)通信
docker容器如何實(shí)現(xiàn)跨主機(jī)通信
未發(fā)現(xiàn)PROMISC狀態(tài)是 UP,
需要手動(dòng)開啟promisc功能,才能恢復(fù)通信。
[root@localhost ~]# ip link set ens37 promisc on                 #開啟promisc功能
[root@localhost ~]# ip addr show ens37                 #查看網(wǎng)卡ens37的網(wǎng)卡信息
[root@localhost ~]# docker exec -it vm02 /bin/bash          #登錄容器
[root@8cb8828007cf /]# ping 172.16.36.100          #連通性測(cè)試
docker容器如何實(shí)現(xiàn)跨主機(jī)通信

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI