Docker(十二)[网络管理-跨主机容器通信]

Docker-网络管理-跨主机容器通信

Docker网络管理:

  1. 端口映射
  2. 网络模式

1.网络拓扑

在这里插入图片描述

2.主机信息

序号 系统信息 宿主机 网关 安装软件 安装并启动容器
1 Linux version 5.3.0-46-generic (buildd@lcy01-amd64-013) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #38~18.04.1-Ubuntu SMP Tue Mar 31 04:17:56 UTC 2020 192.168.200.11 192.168.200.2 1.net-tools
2.bridge-utils
ubuntu-test1,ubuntu-test2
2 192.168.200.12 ubuntu-test-3,utuntu-test-4
3 192.168.200.13 ubuntu-test5,ubuntu-test6

3.软件安装部署

1.宿主机一[192.168.200.11]

1.net-tools

sudo apt install -y net-tools

2.bridge-utils

sudo apt install -y bridge-utils

2.宿主机二[192.168.200.12]

1.net-tools

sudo apt install -y net-tools

2.bridge-utils

sudo apt install -y bridge-utils

3.宿主机三[192.168.200.13]

1.net-tools

sudo apt install -y net-tools

2.bridge-utils

sudo apt install -y bridge-utils

4.下载ubuntu镜像

1.宿主机一[192.168.200.11]

docker pull ubuntu
docker images

在这里插入图片描述

2.宿主机二[192.168.200.12]

docker pull ubuntu
docker images

在这里插入图片描述

3.宿主机三[192.168.200.13]

docker pull ubuntu
docker images

在这里插入图片描述

5.宿主机定制网卡

1.宿主机一[192.168.200.11]

1.网卡信息配置备份

Ubuntu 18.04LTS采用netplan进行网络管理,netplan资料

sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.backup

如果报错没有这个文件,为了防止/etc/netplan/没有*.yaml后缀的文件,执行如下创建一个:

sudo netplan generate 

一般是有/etc/netplan/01-network-manager-all.yaml这个文件的。

2.编辑配置

sudo vim /etc/netplan/01-network-manager-all.yaml

修改内容如下:

# Let NetworkManager manage all devices on this system
network:
  version: 2 # 版本号,固定为2
  renderer: networkd # 支持networkd和NetworkManager,NetworkManager管理系统中所有的网络设备
  ethernets: # 设备类型:以太网(局域网)
    ens33: # ens33网络设备的配置:根据ubuntu执行ifconfig拿到对应的ens33,名称不固定
      dhcp4: false # IPv4关闭DHCP
      dhcp6: false # IPv6关闭DHCP
      nameservers: # 设置DNS服务器和搜索域
        addresses: # 与相似的IPv4或IPv6地址的列表
          - 223.5.5.5
          - 223.6.6.6
          - 114.114.114.114
          - 114.114.114.115
          - 119.29.29.29
          - 182.254.116.116
          - 8.8.8.8
  bridges: # 设备类型:桥接网络
    br0: # 网桥br0
      interfaces: [ens33] #网桥br0对应的设备列表,将ens33添加到网桥
      dhcp4: false # IPv4关闭DHCP
      addresses: [192.168.200.11/24] # 添加静态地址及子网的位数,对于虚拟设备(网桥,绑定,VLAN),如果未配置地址且DHCP被禁用,则该接口可能仍处于联机状态,但无法从网络寻址。
      gateway4: 192.168.200.2 # 将IPv4网关地址配置。这也需要设置addresses,所以address和gateway是成对配置
      nameservers: # 设置DNS服务器和搜索域
        addresses: # 与相似的IPv4或IPv6地址的列表
          - 192.168.200.2 # 设置为网关的IP
      parameters: # 网桥参数
        stp: false # 定义网桥不使用生成树协议,
        forward-delay: 0 # 指定网桥在进入转发状态之前将保持在“监听”和“学习”状态的时间为0秒
    docker0: #追加之前的,如果需要都加上
      dhcp4: true

在这里插入图片描述
保存并退出
尝试将新的netplan配置应用于正在运行的系统,自动回滚

sudo netplan try

将当前的netplan配置应用到正在运行的系统

sudo netplan apply

在这里插入图片描述

2.宿主机二[192.168.200.12]

1.网卡信息配置备份

Ubuntu 18.04LTS采用netplan进行网络管理,netplan资料

sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.backup

如果报错没有这个文件,为了防止/etc/netplan/没有*.yaml后缀的文件,执行如下创建一个:

sudo netplan generate 

一般是有/etc/netplan/01-network-manager-all.yaml这个文件的。

2.编辑配置

sudo vim /etc/netplan/01-network-manager-all.yaml

修改内容如下:

# Let NetworkManager manage all devices on this system
network:
  version: 2 # 版本号,固定为2
  renderer: networkd # 支持networkd和NetworkManager,NetworkManager管理系统中所有的网络设备
  ethernets: # 设备类型:以太网(局域网)
    ens33: # ens33网络设备的配置:根据ubuntu执行ifconfig拿到对应的ens33,名称不固定
      dhcp4: false # IPv4关闭DHCP
      dhcp6: false # IPv6关闭DHCP
      nameservers: # 设置DNS服务器和搜索域
        addresses: # 与相似的IPv4或IPv6地址的列表
          - 223.5.5.5
          - 223.6.6.6
          - 114.114.114.114
          - 114.114.114.115
          - 119.29.29.29
          - 182.254.116.116
          - 8.8.8.8
  bridges: # 设备类型:桥接网络
    br0: # 网桥br0
      interfaces: [ens33] #网桥br0对应的设备列表,将ens33添加到网桥
      dhcp4: false # IPv4关闭DHCP
      addresses: [192.168.200.12/24] # 添加静态地址及子网的位数,对于虚拟设备(网桥,绑定,VLAN),如果未配置地址且DHCP被禁用,则该接口可能仍处于联机状态,但无法从网络寻址。
      gateway4: 192.168.200.2 # 将IPv4网关地址配置。这也需要设置addresses,所以address和gateway是成对配置
      nameservers: # 设置DNS服务器和搜索域
        addresses: # 与相似的IPv4或IPv6地址的列表
          - 192.168.200.2 # 设置为网关的IP
      parameters: # 网桥参数
        stp: false # 定义网桥不使用生成树协议,
        forward-delay: 0 # 指定网桥在进入转发状态之前将保持在“监听”和“学习”状态的时间为0秒
    docker0: #追加之前的,如果需要都加上
      dhcp4: true

在这里插入图片描述
保存并退出
尝试将新的netplan配置应用于正在运行的系统,自动回滚

sudo netplan try

将当前的netplan配置应用到正在运行的系统

sudo netplan apply

在这里插入图片描述

3.宿主机三[192.168.200.13]

1.网卡信息配置备份

Ubuntu 18.04LTS采用netplan进行网络管理,netplan资料

sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/01-network-manager-all.yaml.backup

如果报错没有这个文件,为了防止/etc/netplan/没有*.yaml后缀的文件,执行如下创建一个:

sudo netplan generate 

一般是有/etc/netplan/01-network-manager-all.yaml这个文件的。

2.编辑配置

sudo vim /etc/netplan/01-network-manager-all.yaml

修改内容如下:

# Let NetworkManager manage all devices on this system
network:
  version: 2 # 版本号,固定为2
  renderer: networkd # 支持networkd和NetworkManager,NetworkManager管理系统中所有的网络设备
  ethernets: # 设备类型:以太网(局域网)
    ens33: # ens33网络设备的配置:根据ubuntu执行ifconfig拿到对应的ens33,名称不固定
      dhcp4: false # IPv4关闭DHCP
      dhcp6: false # IPv6关闭DHCP
      nameservers: # 设置DNS服务器和搜索域
        addresses: # 与相似的IPv4或IPv6地址的列表
          - 223.5.5.5
          - 223.6.6.6
          - 114.114.114.114
          - 114.114.114.115
          - 119.29.29.29
          - 182.254.116.116
          - 8.8.8.8
  bridges: # 设备类型:桥接网络
    br0: # 网桥br0
      interfaces: [ens33] #网桥br0对应的设备列表,将ens33添加到网桥
      dhcp4: false # IPv4关闭DHCP
      addresses: [192.168.200.13/24] # 添加静态地址及子网的位数,对于虚拟设备(网桥,绑定,VLAN),如果未配置地址且DHCP被禁用,则该接口可能仍处于联机状态,但无法从网络寻址。
      gateway4: 192.168.200.2 # 将IPv4网关地址配置。这也需要设置addresses,所以address和gateway是成对配置
      nameservers: # 设置DNS服务器和搜索域
        addresses: # 与相似的IPv4或IPv6地址的列表
          - 192.168.200.2 # 设置为网关的IP
      parameters: # 网桥参数
        stp: false # 定义网桥不使用生成树协议,
        forward-delay: 0 # 指定网桥在进入转发状态之前将保持在“监听”和“学习”状态的时间为0秒
    docker0: #追加之前的,如果需要都加上
      dhcp4: true

在这里插入图片描述
保存并退出
尝试将新的netplan配置应用于正在运行的系统,自动回滚

sudo netplan try

将当前的netplan配置应用到正在运行的系统

sudo netplan apply

在这里插入图片描述

6.docker配置网桥

1.宿主机一[192.168.200.11]

1.配置docker文件

1.备份源文件

sudo cp /etc/default/docker /etc/default/docker.backup

2.在/etc/default/docker末尾追加

sudo sh -c 'echo DOCKER_OPTS=\"-b=br0 --fixed-cidr=192.168.200.80/26\" >> /etc/default/docker'
参数 说明
-b 指定容器连接的网桥名字
–fixed-didr 限定为容器分配的IP地址范围
192.168.200.80/26 地址范围:192.168.200.64~192.168.200.127

在这里插入图片描述
网段的计算可以参考

https://www.sojson.com/convert/subnetmask.html

3.确认

cat /etc/default/docker

在这里插入图片描述

2. systemctl使用docker文件

1. 创建服务依赖文件

创建目录

sudo mkdir -p /etc/systemd/system/docker.service.d

创建文件

sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf

添加内容

[Service]
EnvironmentFile=-/etc/default/docker 
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

2.重载服务配置文件

sudo systemctl daemon-reload

第一次配置的时候需要重启linux虚拟机:

sudo reboot

在这里插入图片描述

3.重启docker

sudo systemctl restart docker

4.验证

ifconfig -a

在这里插入图片描述

brctl show

在这里插入图片描述

ping www.baidu.com -c 10

在这里插入图片描述

2.宿主机二[192.168.200.12]

1.配置docker文件

1.备份源文件

sudo cp /etc/default/docker /etc/default/docker.backup

2.在/etc/default/docker末尾追加

sudo sh -c 'echo DOCKER_OPTS=\"-b=br0 --fixed-cidr=192.168.200.140/26\" >> /etc/default/docker'
参数 说明
-b 指定容器连接的网桥名字
–fixed-didr 限定为容器分配的IP地址范围
192.168.200.140/26 地址范围:192.168.200.128~192.168.200.191

在这里插入图片描述
网段的计算可以参考

https://www.sojson.com/convert/subnetmask.html

3.确认

cat /etc/default/docker

在这里插入图片描述

2. systemctl使用docker文件

1. 创建服务依赖文件

创建目录

sudo mkdir -p /etc/systemd/system/docker.service.d

创建文件

sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf

添加内容

[Service]
EnvironmentFile=-/etc/default/docker 
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

2.重载服务配置文件

sudo systemctl daemon-reload

第一次配置的时候需要重启linux虚拟机:

sudo reboot

在这里插入图片描述

3.重启docker

sudo systemctl restart docker

4.验证

ifconfig -a

在这里插入图片描述

brctl show

在这里插入图片描述

ping www.baidu.com -c 10

在这里插入图片描述

3.宿主机三[192.168.200.13]

1.配置docker文件

1.备份源文件

sudo cp /etc/default/docker /etc/default/docker.backup

2.在/etc/default/docker末尾追加

sudo sh -c 'echo DOCKER_OPTS=\"-b=br0 --fixed-cidr=192.168.200.200/26\" >> /etc/default/docker'
参数 说明
-b 指定容器连接的网桥名字
–fixed-didr 限定为容器分配的IP地址范围
192.168.200.200/26 地址范围:192.168.200.192~192.168.200.255

在这里插入图片描述
网段的计算可以参考

https://www.sojson.com/convert/subnetmask.html

3.确认

cat /etc/default/docker

在这里插入图片描述

2. systemctl使用docker文件

1. 创建服务依赖文件

创建目录

sudo mkdir -p /etc/systemd/system/docker.service.d

创建文件

sudo vim /etc/systemd/system/docker.service.d/Using_Environment_File.conf

添加内容

[Service]
EnvironmentFile=-/etc/default/docker 
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS

2.重载服务配置文件

sudo systemctl daemon-reload

第一次配置的时候需要重启linux虚拟机:

sudo reboot

在这里插入图片描述

3.重启docker

sudo systemctl restart docker

4.验证

ifconfig -a

在这里插入图片描述

brctl show

在这里插入图片描述

ping www.baidu.com -c 10

在这里插入图片描述

7.容器部署

1.宿主机一[192.168.200.11]

1.创建容器

docker run -itd --name ubuntu-test1 -v /etc/apt/:/home/etc ubuntu /bin/bash
docker run -itd --name ubuntu-test2 -v /etc/apt/:/home/etc ubuntu /bin/bash
docker ps

在这里插入图片描述

2.进入容器

打开一个终端进入ubuntu-test1

docker exec -it ubuntu-test1 /bin/bash

另开一个终端进入ubuntu-test2

docker exec -it ubuntu-test2 /bin/bash

在这里插入图片描述

3.更换软件源配置文件

分别再容器utuntu-test1和容器ubuntu-test2容器执行如下操作

rm /etc/apt/sources.list
cp /home/etc/sources.list /etc/apt/

在这里插入图片描述

4.升级

分别再容器utuntu-test1和容器ubuntu-test2容器执行如下操作

apt update

在这里插入图片描述

5.安装软件

分别再容器utuntu-test1和容器ubuntu-test2容器执行如下操作

容器内部安装ping命令

apt-get install inetutils-ping -y

容器内部安装ifconfig命令

apt-get install net-tools -y

6.测试

1.ping宿主机

ping 192.168.200.11 -c 10

在这里插入图片描述

2.查看网络信息

ifconfig

在这里插入图片描述

2.宿主机二[192.168.200.12]

1.创建容器

docker run -itd --name ubuntu-test3 -v /etc/apt/:/home/etc ubuntu /bin/bash
docker run -itd --name ubuntu-test4 -v /etc/apt/:/home/etc ubuntu /bin/bash
docker ps

在这里插入图片描述

2.进入容器

打开一个终端进入ubuntu-test3

docker exec -it ubuntu-test3 /bin/bash

另开一个终端进入ubuntu-test4

docker exec -it ubuntu-test4 /bin/bash

在这里插入图片描述

3.更换软件源配置文件

分别再容器utuntu-test3和容器ubuntu-test4容器执行如下操作

rm /etc/apt/sources.list
cp /home/etc/sources.list /etc/apt/

在这里插入图片描述

4.升级

分别再容器utuntu-test3和容器ubuntu-test4容器执行如下操作

apt update

在这里插入图片描述

5.安装软件

分别再容器utuntu-test3和容器ubuntu-test4容器执行如下操作

容器内部安装ping命令

apt-get install inetutils-ping -y

容器内部安装ifconfig命令

apt-get install net-tools -y

6.测试

1.ping宿主机

ping 192.168.200.12 -c 10

在这里插入图片描述

2.查看网络信息

ifconfig 

在这里插入图片描述

3.宿主机三[192.168.200.13]

1.创建容器

docker run -itd --name ubuntu-test5 -v /etc/apt/:/home/etc ubuntu /bin/bash
docker run -itd --name ubuntu-test6 -v /etc/apt/:/home/etc ubuntu /bin/bash
docker ps

在这里插入图片描述

2.进入容器

打开一个终端进入ubuntu-test5

docker exec -it ubuntu-test5 /bin/bash

另开一个终端进入ubuntu-test6

docker exec -it ubuntu-test6 /bin/bash

在这里插入图片描述

3.更换软件源配置文件

分别再容器utuntu-test5和容器ubuntu-test6容器执行如下操作

rm /etc/apt/sources.list
cp /home/etc/sources.list /etc/apt/

在这里插入图片描述

4.升级

分别再容器utuntu-test5和容器ubuntu-test6容器执行如下操作

apt update

在这里插入图片描述

5.安装软件

分别再容器utuntu-test5和容器ubuntu-test6容器执行如下操作

容器内部安装ping命令

apt-get install inetutils-ping -y

容器内部安装ifconfig命令

apt-get install net-tools -y

6.测试

1.ping宿主机

ping 192.168.200.13 -c 10

在这里插入图片描述

2.查看网路信息

ifconfig

在这里插入图片描述

8.跨主机容器测试

1.宿主机一[192.168.200.11]

1.ubuntu-test1

1.ping 容器ubuntu-test2

ping 192.168.200.65 -c 10

在这里插入图片描述
2.ping 宿主机一[192.168.200.11]

ping 192.168.200.11 -c 10

在这里插入图片描述
3.ping 宿主机二[192.168.200.12]

ping 192.168.200.12 -c 10

在这里插入图片描述
4.ping 宿主机三[192.168.200.13]

ping 192.168.200.13 -c 10

在这里插入图片描述
5.ping 宿主机二[192.168.200.12]的ubuntu-test3,ubuntu-test4

ping 192.168.200.128 -c 10

在这里插入图片描述

ping 192.168.200.129 -c 10

在这里插入图片描述
6.ping 宿主机三[192.168.200.13]的ubuntu-test5,ubuntu-test6

ping 192.168.200.192 -c 10

在这里插入图片描述

ping 192.168.200.193 -c 10

在这里插入图片描述

2.ubuntu-test2

1.ping 容器ubuntu-test1

ping 192.168.200.64 -c 10

在这里插入图片描述
2.ping 宿主机一[192.168.200.11]

ping 192.168.200.11 -c 10

在这里插入图片描述
3.ping 宿主机二[192.168.200.12]

ping 192.168.200.12 -c 10

在这里插入图片描述
4.ping 宿主机三[192.168.200.13]

ping 192.168.200.13 -c 10

在这里插入图片描述
5.ping 宿主机二[192.168.200.12]的ubuntu-test3,ubuntu-test4

ping 192.168.200.128 -c 10

在这里插入图片描述

ping 192.168.200.129 -c 10

在这里插入图片描述
6.ping 宿主机三[192.168.200.13]的ubuntu-test5,ubuntu-test6

ping 192.168.200.192 -c 10

在这里插入图片描述

ping 192.168.200.193 -c 10

在这里插入图片描述

2.宿主机二[192.168.200.12]

1.ubuntu-test3

1.ping 容器ubuntu-test4

ping 192.168.200.129 -c 10

在这里插入图片描述
2.ping 宿主机一[192.168.200.11]

ping 192.168.200.11 -c 10

在这里插入图片描述
3.ping 宿主机二[192.168.200.12]

ping 192.168.200.12 -c 10

在这里插入图片描述
4.ping 宿主机三[192.168.200.13]

ping 192.168.200.13 -c 10

在这里插入图片描述
5.ping 宿主机一[192.168.200.11]的ubuntu-test1,ubuntu-test2

ping 192.168.200.64 -c 10

在这里插入图片描述

ping 192.168.200.65 -c 10

在这里插入图片描述
6.ping 宿主机三[192.168.200.13]的ubuntu-test5,ubuntu-test6

ping 192.168.200.192 -c 10

在这里插入图片描述

ping 192.168.200.193 -c 10

在这里插入图片描述

2.ubuntu-test4

1.ping 容器ubuntu-test3

ping 192.168.200.128 -c 10

在这里插入图片描述
2.ping 宿主机一[192.168.200.11]

ping 192.168.200.11 -c 10

在这里插入图片描述
3.ping 宿主机二[192.168.200.12]

ping 192.168.200.12 -c 10

在这里插入图片描述
4.ping 宿主机三[192.168.200.13]

ping 192.168.200.13 -c 10

在这里插入图片描述
5.ping 宿主机一[192.168.200.11]的ubuntu-test1,ubuntu-test2

ping 192.168.200.64 -c 10

在这里插入图片描述

ping 192.168.200.65 -c 10

在这里插入图片描述
6.ping 宿主机三[192.168.200.13]的ubuntu-test5,ubuntu-test6

ping 192.168.200.192 -c 10

在这里插入图片描述

ping 192.168.200.193 -c 10

在这里插入图片描述

3.宿主机三[192.168.200.13]

1.ubuntu-test5

1.ping 容器ubuntu-test6

ping 192.168.200.193 -c 10

在这里插入图片描述
2.ping 宿主机一[192.168.200.11]

ping 192.168.200.11 -c 10

在这里插入图片描述
3.ping 宿主机二[192.168.200.12]

ping 192.168.200.12 -c 10

在这里插入图片描述
4.ping 宿主机三[192.168.200.13]

ping 192.168.200.13 -c 10

在这里插入图片描述
5.ping 宿主机一[192.168.200.11]的ubuntu-test1,ubuntu-test2

ping 192.168.200.64 -c 10

在这里插入图片描述

ping 192.168.200.65 -c 10

在这里插入图片描述
6.ping 宿主机二[192.168.200.12]的ubuntu-test3,ubuntu-test4

ping 192.168.200.128 -c 10

在这里插入图片描述

ping 192.168.200.129 -c 10

在这里插入图片描述

2.ubuntu-test6

1.ping 容器ubuntu-test5

ping 192.168.200.192 -c 10

在这里插入图片描述
2.ping 宿主机一[192.168.200.11]

ping 192.168.200.11 -c 10

在这里插入图片描述
3.ping 宿主机二[192.168.200.12]

ping 192.168.200.12 -c 10

在这里插入图片描述
4.ping 宿主机三[192.168.200.13]

ping 192.168.200.13 -c 10

在这里插入图片描述
5.ping 宿主机一[192.168.200.11]的ubuntu-test1,ubuntu-test2

ping 192.168.200.64 -c 10

在这里插入图片描述

ping 192.168.200.65 -c 10

在这里插入图片描述
6.ping 宿主机二[192.168.200.12]的ubuntu-test3,ubuntu-test4

ping 192.168.200.128 -c 10

在这里插入图片描述

ping 192.168.200.129 -c 10

在这里插入图片描述

9.总结

优点:

配置简单,不依赖第三方软件

缺点:

容器依赖于主机间的网络
容器与主机在同网段,注意ip地址分配
生产中不容易实现、不好管理

更多请参考:

https://docs.docker.com/engine/reference/commandline/docker/

或:

https://docker-doc.readthedocs.io/zh_CN/latest/reference/commandline/cli.html
发布了64 篇原创文章 · 获赞 14 · 访问量 4970

猜你喜欢

转载自blog.csdn.net/weixin_42366378/article/details/105568675