Docker-网络管理-跨主机容器通信
- 1.网络拓扑
- 2.主机信息
- 3.软件安装部署
- 4.下载ubuntu镜像
- 5.宿主机定制网卡
- 6.docker配置网桥
- 1.宿主机一[192.168.200.11]
- 2.宿主机二[192.168.200.12]
- 3.宿主机三[192.168.200.13]
- 7.容器部署
- 8.跨主机容器测试
- 9.总结
Docker网络管理:
- 端口映射
- 网络模式
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