(四)docker进阶学习2-docker网络通信和隔离(Linux虚拟化从入门到精通)

CONTENTS

1、容器之间网络通信

2、docker网络模式修改

3、网络隔离,独立ip配置


1、容器之间网络通信

(1)通常情况下Docker使用网桥(bridge)与NAT进行通信,通信模式可以参考下图

(2)我们可以查看安装docker的服务器的ip,有一张docker0的网卡,可以理解它就是docker容器之间通信的网桥 。我们之前创建的docker默认的网关都指向它,

比如我们运行一个tomcat的容器,查看它的详细信息:

docker run --name tomcat -p 80:8080 -d tomcat:v1 
docker inspect tomcat

 

(3)默认我们创建的容器之间是可以互相通信的,因为它们都指向同一个网桥。例如我运行两个容器,测试它们之间的连通性。默认是互通的。

(4)容器访问外部网络其实是在防火墙上做了SNAT转换。外部网络访问容器是做DNAT转换。这个在防火墙规则上可以看到。

#SNAT
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

#DNAT
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80

 

2、docker网络模式修改

(1)docker进程网络修改(以下可以作为了解,现实中也很少用到)

  • -b, --bridge=" ”          指定Docker 使用的网桥设备,默认情况下Docker 会自动创建和使用docker0 网桥设备,通过此参数可以使用已经存在的设备
  • --bip 指定Docker0的IP和掩码,使用标准的CIDR 形式,如10.10.10.10/24
  • --dns 配置容器的DNS,在启动Docker 进程是添加,所有容器全部生效
     

(2)docker容器网络修改

  1. --dns 用于指定启动的容器的DNS
  2. --net 用于指定容器的网络通讯方式,有以下四个值(最常用还是前两个,可以自己尝试下)

         ➢bridge:Docker 默认方式,网桥模式

         ➢none:容器没有网络栈

         ➢container:使用其它容器的网络栈,Docker容器会加入其它容器的network namespace

         ➢host:表示容器使用Host 的网络,没有自己独立的网络栈。容器可以完全访问Host 的网络,不安全
 

(3)docker端口暴露 -p/P选项说明

  • -p    :<ContainerPort>                   将制定的容器端口映射至主机所有地址的一个动态端口
  • -p   <HostPort>:<ContainerPort>  映射至指定的主机端口
  • -p    <IP>::<ContainerPort>             映射至指定的主机的IP 的动态端口
  • -p     <IP>:<HostPort>:<ContainerPort>映射至指定的主机IP的主机端口
  • -P (大)p:                                            暴露所需要的所有端口
     

(4)docker0网桥的网络地址配置(这个也可以了解,很少去修改这个的)

 

 

3、网络隔离,独立ip配置

(1)常见的网络配置命令:

docker network ls    #查看当前可用的网络类型

docker network create -d 类型 namespace     
                       类型有:overlay network
                               bridge network(常见的)

(2)实现网络隔离

比如我们现在要创建两个容器,使他们之间互相隔离,那么我们就要线创建两个不同namespace的网络,然后运行两个容器指向不同namespace的网络便可实现隔离。如下:

docker network ls
docker network create -d bridge LAMP
docker network create -d bridge LNMP

 

(3)建立网桥进行主机间通信

docker0这个网桥并不能让外界主机与docker之间进行通信,你可以试一下,真机ping一下docker是ping不通的

下面我们就建立网桥使之具有独立的ip,实现与外界主机通信。

1)编辑网卡配置文件

cp ifcfg-ens37 ifcfg-br0

#编辑ens37网卡文件
vim ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
BRIDGE=br0
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPV6_PRIVACY=no

#编辑网桥文件
vim ifcfg-br0 

TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=10.1.1.100
prefix=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0
DEVICE=br0
ONBOOT=yes
IPV6_PRIVACY=no

#重启网络
systemctl restart network

 2)利用pipework工具设置容器ip地址

yum install git -y
git clone https://github.com/jpetazzo/pipework
cp pipework/pipework /usr/local/bin/
chmod a+x /usr/local/bin/pipework 
docker run --name tomcat3 --net=none -d tomcat:v1 
pipework br0 tomcat3 10.1.1.200/24

3)现在外界主机就可以和容器实现通信了

并且可以访问到tomcat: 


完成今日份打卡!欧力给!

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核的无脸man~

你的鼓励是我创作的最大功力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值