Docker基础学习(8)-容器的网络互联

容器的网络互联
一、 设置容器的网络模式
模式配置选项–net=说明
bridge模 式bridge或不写默认模式,使用本地的Docker0的网络提供
host模式host与宿主机共用network namespace,没有自己的ip和网卡,而是使用宿主机的ip和端口,但是文件系统和进程还是单独隔离的
container模式container:NAMEorID与一个存在的容器共享network namespace,没有自己的ip和网卡,与指定容器共享,但是文件系统和进程还是单独隔离
none模式none容器具备自己的network namespace,但是没有网卡和ip,需要单独设置
1、 Bridge模式
docker run -itd ---net=bridge --name c1 -h c1 centos:7 /bin/bash 

image-20200504110731913

2、 Host模式
docker run -it --net=host --name c2 -h c2 centos:7 /bin/bash 

image-20200504111635734

3、 Container模式
#创建新容器关联到上面的容器
docker run -itd --net=container:c1 --name c3 centos:7 /bin/bash 
#注意 不要指定主机名,-h和Container的网络模式冲突,会报错
#docker: Error response from daemon: conflicting options: hostname and the network mode.
#进入新容器c3发现主机名为c1。ip也和c1相同。

image-20200504114221527

4、 None模式
docker run -it --net=none --name=c4 -h c4 centos:7 /bin/bash

image-20200504135013092

二、 使用link实现容器互联
先删除前面实验的c1、c2
docker rm -f c1 c2
1、 创建容器c1,网络畅通
docker run -itd --name c1 centos:7 /bin/bash
2、 创建容器c2,连接到c1
#--link <name or id>:alias
#其中,name或id是源容器的name或id,alias是源容器在link下的别名。二者可以相同。
#与之通讯靠别名
docker run -itd --name c2 --link c1:c1 centos:7 /bin/bash 

测试一下 是可以ping通“c1”的,并且hosts中有一条c1的记录

image-20200504140557316

三、 容器跨主机互联
实验准备

docker1关机,完整克隆虚拟机docker2

主机名主机地址Docker0实验容器
docker1192.168.200.200172.17.0.1/24d1
docker2192.168.200.201172.17.1.1/24d2

因此要重新设置docker1上的网桥Docker0地址,docker2上的主机名、IP、网桥Docker0地址

docker1上

修改Docker0地址(docker0默认是172.17.0.1/16
/etc/docker/daemon.json文件的{}中添加,注意 前一项后面加逗号,

"bip":"172.17.0.1/24"

docker2上

修改主机名

hostnamectl set-hostname docker2

修改IP(如果用DHCP,不需要改

sed -i 's/IPADDR=.*/IPADDR=192.168.200.201/' /etc/sysconfig/network-scripts/ifcfg-eth0

修改Docker0地址
/etc/docker/daemon.json文件的{}中添加,注意 前一项后面加逗号,

"bip":"172.17.1.1/24"

重启docker

 systemctl daemon-reload
 systemctl restart docker 

在这里插入图片描述

分别在两台物理机docker1、docker2上创建容器d1、d2(网络模式bridge默认使用Docker0

[root@docker1 ~]# docker run -itd --name d1 centos:7 /bin/bash
[root@docker1 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' d1
172.17.0.3

[root@docker2 ~]# docker run -itd --name d2 centos:7 /bin/bash
[root@docker2 ~]# docker inspect -f '{{.NetworkSettings.IPAddress}}' d2
172.17.1.3

可以看到二者不在同一网络,现在是ping不通的

1、 添加路由,实现Docker1物理机上的容器和Docker2物理机上的容器互通
#找不到route命令则yum install net-tools
#查看路由表 route -n
#写错需要删除的话route del -net 172.17.0.0/24
[root@docker1 ~]# route add -net 172.17.1.0/24 gw 192.168.200.201
#告诉电脑 要去172.17.1.0/24网段,就先找192.168.200.201
[root@docker2 ~]# route add -net 172.17.0.0/24 gw 192.168.200.200

一般情况下,到这里后就可以ping通了

image-20200504165235788

image-20200504164009979

如果两个容器还无法ping通,就设置如下防火墙规则

2、 设置防火墙规则

docker1上

#清空防火墙nat表的其他规则 
iptables -t nat -F POSTROUTING
#从172.17.0.0/24发往其他网段(非172.17.0.0/16)时做地址转换 。!取反
iptables -t nat -A POSTROUTING -s 172.17.0.0/24 ! -d 172.17.0.0/16 -j MASQUERADE 
#允许Docker2主机上的容器访问我
iptables -A FORWARD -s 172.17.1.0/24 -d 172.17.0.0/24 -j ACCEPT

docker2上配置同理

iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE iptables -A FORWARD -s 172.17.0.0/24 -d 172.17.1.0/24 -j ACCEPT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值