溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

常用的跨主機Docker容器互通方法有哪些

發(fā)布時間:2021-11-05 14:30:53 來源:億速云 閱讀:146 作者:iii 欄目:web開發(fā)

本篇內容主要講解“常用的跨主機Docker容器互通方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“常用的跨主機Docker容器互通方法有哪些”吧!

現(xiàn)在提到容器,可能很容易想到的就是Kubernates,確實它很火,也很強大,但是對于規(guī)模非常小,容器不多的小環(huán)境,Kubernetes  就顯得比較累贅了,直接使用Docker  Compose拉取一個小環(huán)境,這種使用方式,也有不少用戶在使用;本篇通過實戰(zhàn),來介紹兩種,在不使用類似Kubernetes容器管理平臺的下,實現(xiàn)跨主機Docker容器之間互通的方法;

基礎環(huán)境準備

安裝Docker

在能訪問公網(wǎng)且DNS正常的情況下,將下面的代碼,直接復制并在docker-host-01,docker-host-02上執(zhí)行,即可完成Docker安裝。

#卸載原有docker環(huán)境及依賴,并安裝必要的包 yum remove docker-latest-logrotate docker-logrotate docker-selinux docker-engine yum install -y yum-utils   device-mapper-persistent-data   lvm2  #使用阿里云安裝源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg yum makecache fast yum -y install docker-ce  #安裝完成啟動Docker systemctl start docker systemctl enable docker systemctl status docker

下載演示鏡像

Docker官方在https://hub.docker.com/中提供了很多鏡像,你可以根據(jù)自己的需要選擇并下載,也可以自行安裝Docker鏡像倉庫,此處我就直接下載使用docker  hub中提供的centos官方鏡像進行后續(xù)演示;

[root@docker-host-01 ~]# docker pull centos

鏡像在兩臺Docker主機中都下載,當然如果網(wǎng)速慢的話,可以下載一個,然后使用docker save 打包鏡像,將鏡像傳到第二臺機器上,在用docker  load導入鏡像。方法很多,適合你的才是最好的。

鏡像下載完成,使用docker images命令查看。

[root@docker-host-01 ~]# docker images REPOSITORY         TAG                 IMAGE ID           CREATED             SIZE centos             latest             470671670cac        3 days ago         237MB

通過直接路由方式實現(xiàn)跨主機Docker容器通信

常用的跨主機Docker容器互通方法有哪些

直接路由這種方式操作起來比較簡單,對Docker原生網(wǎng)絡改變最小,只需要互相指定對方的路由即可完成跨主機Docker容器之間的互通;

主機配置及IP信息

基礎環(huán)境需要準備兩臺主機,系統(tǒng)可以是CentOS,Ubuntu;需要能支持安裝Docker,本實戰(zhàn)文檔中使用的主機信息如下;

主機名IP配置容器網(wǎng)段

主機名 IP  配置  容器網(wǎng)段 docker-host-01  192.168.61.132  2核4G內存,50G硬盤    172.16.200.0/24 docker-host-02  192.168.61.135  2核4G內存,50G硬盤    172.16.201.0/24

調整Docker網(wǎng)絡配置

Docker安裝完之后,默認會創(chuàng)建一個docker0的網(wǎng)橋,啟動的Docker容器網(wǎng)段是172.17.0.1/16,如果不做調整,兩臺Docker主機上的容器,就可能出現(xiàn)IP地址沖突,所以我們先將默認docker0網(wǎng)橋的地址按【主機配置及IP信息】中規(guī)劃的進行調整。

在docker-host-01中創(chuàng)建/etc/docker/daemon.json文件,內容如下

[root@docker-host-01 ~]# cat /etc/docker/daemon.json {  "bip": "172.16.200.1/24" }

重啟docker服務

[root@docker-host-01 ~]# systemctl restart docker

完成重啟后,再看docker0的IP,已經調整完成了;

[root@docker-host-01 ~]# ifconfig docker0 docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500       inet 172.16.200.1 netmask 255.255.255.0 broadcast 172.16.200.255       inet6 fe80::42:b3ff:fef9:1cc1 prefixlen 64 scopeid 0x20<link>       ether 02:42:b3:f9:1c:c1 txqueuelen 0 (Ethernet)       RX packets 2916 bytes 121276 (118.4 KiB)       RX errors 0 dropped 0 overruns 0 frame 0       TX packets 3115 bytes 10870567 (10.3 MiB)       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

使用同樣的方法,調整docker-host-02主機上的的docker網(wǎng)絡。

創(chuàng)建并進入Docker容器

在docker-host-01中執(zhí)行下面命令創(chuàng)建容器并查看IP和網(wǎng)關信息。

[root@docker-host-01 ~]# docker run --name host-01-docker -it centos /bin/bash [root@6cb01044fda8 /]# yum install -y net-tools #安裝工具查看ip和網(wǎng)關 [root@6cb01044fda8 /]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500       inet 172.16.200.2 netmask 255.255.255.0 broadcast 172.16.200.255       ether 02:42:ac:10:c8:02 txqueuelen 0 (Ethernet)       RX packets 3168 bytes 10876332 (10.3 MiB)       RX errors 0 dropped 0 overruns 0 frame 0       TX packets 2970 bytes 165058 (161.1 KiB)       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@6cb01044fda8 /]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         172.16.200.1    0.0.0.0         UG    0      0        0 eth0 172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

如上,創(chuàng)建了一個名為host-01-docker  的容器,容器的ip是172.16.200.2/24,網(wǎng)關是172.16.200.1;同理在docker-host-02中也執(zhí)行上述命令;

[root@docker-host-02 ~]# docker run --name host-02-docker -it centos /bin/bash [root@f52ed4088844 /]# yum install -y net-tools [root@f52ed4088844 /]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500       inet 172.16.201.2 netmask 255.255.255.0 broadcast 172.16.201.255       ether 02:42:ac:10:c9:02 txqueuelen 0 (Ethernet)       RX packets 3436 bytes 10890638 (10.3 MiB)       RX errors 0 dropped 0 overruns 0 frame 0       TX packets 3159 bytes 175122 (171.0 KiB)       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0  [root@f52ed4088844 /]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         172.16.201.1    0.0.0.0         UG    0      0        0 eth0 172.16.201.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

host-02-docker容器的ip是172.16.201.2/24,網(wǎng)關是172.16.201.1;此時我們直接在host-01-docker容器里面去ping  host-02-docker容器的IP 172.16.201.2 肯定是不通的。

常用的跨主機Docker容器互通方法有哪些

添加互通路由

原理非常簡單,就是通過互相指定到達對方容器的路由;

  1. 在docker-host-01主機添加到172.16.201.0/24網(wǎng)段的路由,指向docker-host-02的IP:192.168.61.135; 

  2. 在docker-host-02主機添加到172.16.200.0/24網(wǎng)段的路由,指向docker-host-01的IP:192.168.61.132; 


docker-host-01主機上的操作如下

[root@docker-host-01 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33 [root@docker-host-01 ~]# route add -net 172.16.201.0/24 gw 192.168.61.135 [root@docker-host-01 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 172.16.201.0    192.168.61.135  255.255.255.0   UG    0      0        0 ens33 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33

docker-host-02主機上的操作如下

[root@docker-host-02 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.201.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33 [root@docker-host-02 ~]# route add -net 172.16.200.0/24 gw 192.168.61.132 [root@docker-host-02 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.200.0    192.168.61.132  255.255.255.0   UG    0      0        0 ens33 172.16.201.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33

驗證在docker-host-01主機上的Docker容器中,ping  docker-host-02中的Docker容器IP:172.16.201.2

常用的跨主機Docker容器互通方法有哪些

最后,需要注意一點,通過路由打通跨主機Docker容器之間的  網(wǎng)絡,必須確保Docker宿主機是在相同的網(wǎng)段;

通過橋接到Docker宿主機網(wǎng)絡實現(xiàn)跨主機Docker容器通信

常用的跨主機Docker容器互通方法有哪些

將Docker容器網(wǎng)絡直接橋接到Docker宿主機網(wǎng)絡里面,

容器通信過程中不在需要NAT的轉換,優(yōu)點是性能提升,容器及Docker宿主機IP統(tǒng)一管理;缺點是,容器及Docker宿主機IP統(tǒng)一管理之后帶來的IP地址分配變復雜了;下面就來實戰(zhàn)一下這種場景。

主機配置及IP信息

基礎環(huán)境需要準備兩臺主機,系統(tǒng)可以是CentOS,Ubuntu;需要能支持安裝Docker,本實戰(zhàn)文檔中使用的主機信息如下;

主機名IP配置容器網(wǎng)段

docker-host-01192.168.61.1322核4G內存,50G硬盤192.168.61.64/27

docker-host-02192.168.61.1352核4G內存,50G硬盤192.168.61.96/27

調整Docker宿主機網(wǎng)橋

默認情況下docker0,是不與物理接口連接了,Docker宿主機的IP地址也是配置在物理接口上的,現(xiàn)在需要把物理接口添加到docker0網(wǎng)橋中,并把IP地址配置到docker0上;具體操作如下

在docker-host-01上,創(chuàng)建并編輯docker配置文件,bip表示網(wǎng)橋接口的地址,配置為Docker宿主機  IP,fixed-cidr配置的是分配給docker容器的IP地址,這個地方需要注意,每臺宿主機上不能重復,否則會IP地址沖突。

[root@docker-host-01 ~]# cat /etc/docker/daemon.json {   "bip": "192.168.61.132/24",  "fixed-cidr": "192.168.61.64/27",  "default-gateway": "192.168.61.1" }

重啟docker服務,重啟完成后,192.168.61.132已經被配置到docker0上了

[root@docker-host-01 ~]# systemctl restart docker [root@docker-host-01 ~]# ifconfig docker0 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500       inet 192.168.61.132 netmask 255.255.255.0 broadcast 192.168.61.255       inet6 fe80::42:b3ff:fef9:1cc1 prefixlen 64 scopeid 0x20<link>       ether 02:42:b3:f9:1c:c1 txqueuelen 0 (Ethernet)       RX packets 6420 bytes 308080 (300.8 KiB)       RX errors 0 dropped 0 overruns 0 frame 0       TX packets 6373 bytes 21761327 (20.7 MiB)       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

將物理接口添加到docker0網(wǎng)橋中,同時清空物理網(wǎng)卡上的IP ,注意必須兩條命令一起執(zhí)行,否則會斷網(wǎng)。

[root@docker-host-01 ~]# brctl addif docker0 ens33&&ifconfig ens33  0.0.0.0

注意:網(wǎng)橋配置,如果需要永久保存,需要通過配置文件的方式配置

檢查網(wǎng)橋信息

[root@docker-host-01 ~]# brctl show bridge name     bridge id               STP enabled     interfaces docker0         8000.0242b3f91cc1       no             ens33

創(chuàng)建并進入Docker容器

在docker-host-01中創(chuàng)建容器并查看容器ip是192.168.61.64

[root@docker-host-01 ~]# docker run -it centos /bin/bash [root@811f01405906 /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever 12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default   link/ether 02:42:c0:a8:3d:40 brd ff:ff:ff:ff:ff:ff link-netnsid 0   inet 192.168.61.64/24 brd 192.168.61.255 scope global eth0       valid_lft forever preferred_lft forever

在docker-host-02中創(chuàng)建容器并查看容器ip是192.168.61.96

[root@docker-host-02 ~]# docker run -it centos /bin/bash [root@7940a9efcf6a /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever 4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default   link/ether 02:42:c0:a8:3d:60 brd ff:ff:ff:ff:ff:ff link-netnsid 0   inet 192.168.61.96/24 brd 192.168.61.255 scope global eth0       valid_lft forever preferred_lft forever

驗證在docker-node-01宿主機的容器中ping docker-node-02宿主機上的容器IP  192.168.61.96,可以ping通驗證沒問題。

常用的跨主機Docker容器互通方法有哪些

直接橋接到Docker宿主機網(wǎng)絡這種方式,打通不通宿主機上的Docker容器,在IP,網(wǎng)段劃分上會比較麻煩,

到此,相信大家對“常用的跨主機Docker容器互通方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

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

AI