Docker的网络管理(二)

一、Host模型

Host模型是使用宿主机网络对外提供服务,它本身并没有固定的IP地址。它的IP地址与宿主机的IP相同。
在这里插入图片描述
从上图可以看到,Host网络没有IP相关的配置信息。

命令格式:

$ docker run --net=host -itd --name [容器名称] [镜像名称]

例如:

$ docker run --net=host -itd --name nginx-test nginx
$ docke ps

运行效果:
在这里插入图片描述
从图上可以看出,PORTS列为空。也就是说,该容器没有与宿主机做端口映射。

但是,当我们查看网络状态发现,启动容器之后,宿主机的80端口被占用了。当关闭容器后,宿主机的80端口号会被释放。
在这里插入图片描述
查看host网络的配置信息,可以看到我们刚刚创建的容器。
在这里插入图片描述
如果要在宿主机客户端访问容器服务,可以通过宿主机的IP直接访问。例如:
在这里插入图片描述

二、None模型

None模型是一个自由度比较高的网络模式,它可以最大化的自定义我们想要的网络。如果使用None网络模型,创建容器的时候系统不会为容器配置任何网络。因此,需要我们自己手动进行配置。

命令格式:

$ docker run  --net-none -itd --name [容器名称] [镜像名称]

例如:

$ docker run --net=none -itd --name nginx-test nginx

上面命令在创建容器时候指定的网络类型为none。

$ docker inspect nginx-test

运行效果:
在这里插入图片描述
从图上看出,容器中没有保存任何的网络配置信息。

$ netstat -tnulp

运行效果:
在这里插入图片描述
从图上也没有看到80端口的网络启动。

所以,如果要访问None网络类型的容器服务,需要将Docker容器配置到和宿主机同一个网段,同时还要指定容器的IP地址

例如:自定义容器网络和宿主机为同一网段,容器ip可以指定。这里需要安装一个网桥管理软件bridge-utils。

第一步:安装网桥管理软件。

$ sudo apt-get install bridge-utils -y

第二步:配置网卡。

# 先备份配置文件
$ sudo cp /etc/network/interfaces /etc/network/interfaces-old
# 再修改配置文件
$ sudo vim /etc/network/interfaces

添加以下内容:

auto br0
iface br0 inet static
address 192.168.31.20
netmask 255.255.255.0
gateway 192.168.31.1
dns-nameservers 8.8.8.8
bridge_ports ens33

第三步:重启网络服务。

$ service networking restart

第四步:配置docker。

这里请参考上一章节中“自定义网桥”部分的内容。

第五步:验证dns服务。

$ ping baidu.com

如果执行ping命令失败,那么表示dns解析没有配置好,需要我们进行dns的配置。如果命令执行成功,可以省略该步骤的操作。

# sudo vim /etc/resolv.conf

添加以下内容:

nameserver 223.5.5.5
nameserver 114.114.114.114
nameserver 8.8.8.8

然后再执行以下命令重启网络即可。

$ sudo /etc/init.d/networking restart

第五步:创建容器,指定网络类型为none,并把宿主机的/etc/apt文件挂载到容器的/home/etc目录下。

$ docker run -itd --net=none --name ubuntu-test -v /etc/apt/:/home/etc/ ubuntu /bin/bash

第六步:指定容器IP。

# 安装pipework(链接:https://pan.baidu.com/s/1_fk2OxPLenK614V9fbuWfw 提取码:c1kx )
# 下载完成后,把压缩包拷贝到虚拟机中,并解压缩
$ unzip pipework-master.zip
# 解压完成后,把pipework文件拷贝到bin目录下
$ sudo cp pipework-master/pipework /usr/local/bin
# 指定容器IP,IP地址必须要与宿主机同一个网段,否则容器无法访问网络
$ sudo pipework br0 ubuntu-test 192.168.31.129/24@192.168.31.1
# 进入容器
$ docker exec -it ubuntu-test /bin/bash
# 删除容器的sources.list文件
root@xxx:/# rm /etc/apt/sources.list
# 将/home/etc/sources.list文件拷贝到/etc/apt目录下
root@xxx:/# cp /home/etc/sources.list /etc/apt/
# 更新软件源
root@xxx:/# apt-get update
# 安装ping命令
root@xxx:/# apt-get install inetutils-ping -y
# 安装ifconfig命令
root@xxx:/# apt-get install net-tools -y
# 测试
root@xxx:/# ping [宿主机IP]

三、跨主机容器通信

在这里插入图片描述

3.1 主机网络配置

第一步:创建网桥(请参考上一章节“自定义网桥”部分)

第二步:配置网卡

$ sudo vim /etc/network/interfaces

添加以下内容:

# 主机1
auto br0
iface br0 inet static
address 192.168.31.20
netmask 255.255.255.0
gateway 192.168.31.1
dns-nameservers 8.8.8.8
bridge_ports ens33

# 主机2
auto br0
iface br0 inet static
address 192.168.31.30
netmask 255.255.255.0
gateway 192.168.31.1
dns-nameservers 8.8.8.8
bridge_ports ens33

第三步:docker配置网桥

vim /etc/default/docker

添加以下内容:

#主机1
DOCKER_OPTS="-b=br0 --fixed-cidr=192.168.31.99/26"
#主机2
DOCKER_OPTS="-b=br0 --fixed-cidr=192.168.31.170/26"

其中,-b 用来指定容器连接的网桥名字;–fixed-cidr用来限定为容器分配的IP地址范围。

第四步:创建服务依赖文件

$ 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

第五步:重启服务

# 重新加载配置文件
$ systemctl daemon-reload
# 重启宿主机
$ sudo reboot
# 重启网络
$ sudo /etc/init.d/networking restart

第六步:检查dns

$ ping baidu.com

如果ping失败,那么修改resolve.conf文件。

$ sudo vim /etc/resolv.conf

然后添加内容:

nameserver 223.5.5.5
nameserver 114.114.114.114
nameserver 8.8.8.8

添加完保存退出。再次重启网络。

$ sudo /etc/init.d/networking restart

3.2 容器网络配置

第一步:在不同宿主机上分别创建两个容器。

#主机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

 #主机2                                   
$ 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

第二步:启动四个会话,在每一个会话中进入一个容器。

#主机1
$docker exec -it ubuntu-test1 /bin/bash
$docker exec -it ubuntu-test2 /bin/bash

#主机2
$docker exec -it ubuntu-test3 /bin/bash
$docker exec -it ubuntu-test4 /bin/bash

第三步:为每个容器安装ping命令和ifconfig命令。

# 1.更新/etc/apt/目录下的sources.list文件
root@xxx:/# rm /etc/apt/sources.list
root@xxx:/# cp /home/etc/sources.list /etc/apt/
# 2.容器内部进行软件源更新
root@xxx:/# apt-get update
# 3.容器内部安装ping命令
root@xxx:/# apt-get install inetutils-ping -y
# 4.容器内部安装ifconfig命令
root@xxx:/# apt-get install net-tools -y

执行完上面所有步骤后,进行相关测试。这里主要测试宿主机中容器之间的网络通信,以及不同宿主机容器之间的网络通信。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值