docker的网络模型

1. Docker本地网络类型

1.1查看支持网络类型

命令:docker network ls
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
fdd674cff650        bridge              bridge              local
6636d7f4632d        host                host                local
c1bf5392fc14        none                null                local
[root@localhost ~]# 

1.2 测试使用各类网络类型

1.2.1 none : 无网络模式

1.2.2 bridge : 默认模式,相当于NAT

在这里插入图片描述
例:
开启两个bridge模式的容器
在容器内安装ping命令:

yum -y install iproute*
开启容器1 并查看容器1的ip地址
[root@localhost ~]# docker run -it --name c_bri1 --network=bridge centos:6.9 /bin/bash
[root@bc2d5e8e36bc /]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0

开启容器2 并查看容器2的ip地址
[root@localhost ~]# docker run -it --name c_bri2 --network=bridge centos:6.9 /bin/bash
[root@b912e313b328 /]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          
容器1与容器2之间可以互相通信
[root@bc2d5e8e36bc /]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.146 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.095 ms

容器1与容器2也可以访问外网
[root@bc2d5e8e36bc /]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148: icmp_seq=1 ttl=127 time=10.1 ms
64 bytes from 220.181.38.148: icmp_seq=2 ttl=127 time=10.2 ms

[root@b912e313b328 /]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148: icmp_seq=1 ttl=127 time=4.91 ms
64 bytes from 220.181.38.148: icmp_seq=2 ttl=127 time=9.75 ms

宿主机与容器12也可以互相通信
[root@localhost ~]# ping 172.17.0.3
PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data.
64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.115 ms
64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.099 ms

[root@localhost ~]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.050 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.085 ms

1.2.3 host : 公用宿主机Network NameSapce

容器和宿主机共用地址和端口
在这里插入图片描述

开启容器1 并查看容器1的ip地址
[root@localhost ~]# docker run -it --name c_host1 --network=host centos:6.9 /bin/bash
[root@localhost /]# ifconfig 
docker0   Link encap:Ethernet  HWaddr 02:42:0B:60:EB:D7  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0
ens32     Link encap:Ethernet  HWaddr 00:50:56:32:32:53  
          inet addr:192.168.153.176  Bcast:192.168.153.255  Mask:255.255.255.0
          lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0    
          
开启容器2 并查看容器2的ip地址
[root@localhost ~]# docker run -it --name c_host2 --network=host centos:6.9 /bin/bash
[root@localhost /]# ifconfig 
docker0   Link encap:Ethernet  HWaddr 02:42:0B:60:EB:D7  
          inet addr:172.17.0.1  Bcast:172.17.255.255  Mask:255.255.0.0        
ens32     Link encap:Ethernet  HWaddr 00:50:56:32:32:53  
          inet addr:192.168.153.176  Bcast:192.168.153.255  Mask:255.255.255.0        
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0    

1.2.4 container:与其他容器公用Network Namespace

在这里插入图片描述

2. Docker跨主机访问-macvlan实现

在这里插入图片描述
  两个容器无法连接外网

在宿主机1上创建macvlan,指定子网和网关、绑定的网络接口,名称
[root@localhost ~]# docker network create --driver macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.254 -o parent=ens32 macvlan_1
4ca73106410269cf790539e21de58090b86462bb0a9857201a17ce2c0724621b
[root@localhost ~]# 
在宿主机2上也创建macvlan,指定子网和网关、绑定的网络接口,名称
[root@localhost ~]# docker network create --driver macvlan --subnet=10.0.0.0/24 --gateway=10.0.0.254 -o parent=ens32 macvlan_1
6304285dbe039e3502db4f14183392f08a1a69018979ca40845113c551699489
[root@localhost ~]# 

在宿主机1上创建容器并查看ip
[root@localhost ~]# docker run -it --network macvlan_1 --ip=10.0.0.1 lamp:1.2  /bin/bash
[root@3283bb277f8b /]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:0A:00:00:01  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0

在宿主机2上创建容器并查看ip
[root@localhost ~]# docker run -it --network macvlan_1 --ip=10.0.0.2 192.168.153.176:5000/frank/centos6.9:v1  /bin/bash
[root@40950af7f564 /]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:0A:00:00:02  
          inet addr:10.0.0.2  Bcast:10.0.0.255  Mask:255.255.255.0

容器间的连通性测试
[root@3283bb277f8b /]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.21 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=3.41 ms

3. Docker 跨主机访问-overlay实现

在这里插入图片描述

3.1 consul简介

Consul是什么?
  Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能:
<1> 服务发现:
  Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。
<2> 健康检查:
  Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。
<3> 键值存储:
  应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP API可以很容易的使用这个组件。
<4> 多数据中心:
  Consul对多数据中心有非常好的支持,这意味着Consul用户不必担心由于创建更多抽象层而产生的多个区域。

3.2 拉取consul镜像

[root@localhost ~]# docker pull consul:latest
latest: Pulling from library/consul
188c0c94c7c5: Pull complete 
17e15e1d587e: Pull complete 
de6d13050091: Pull complete 
2cd9fbb86a8f: Pull complete 
e582f80d6b30: Pull complete 
72b4f4adec89: Pull complete 
Digest: sha256:6729ed37212457d5f10047deac649ff7e055ced4405398d560593fbfa364d854
Status: Downloaded newer image for consul:latest
docker.io/library/consul:latest

3.3 启动 consul 服务

(1)启动 consul 服务,实现网络的统一配置管理
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

consul:kv类型的存储数据库(key:value)
docker01、02上:
vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.100:8500",
  "cluster-advertise": "10.0.0.100:2376"
}

vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.100:8500",
  "cluster-advertise": "10.0.0.101:2376"
}


vim /etc/docker/daemon.json 
vim /usr/lib/systemd/system/docker.service
systemctl daemon-reload 
systemctl restart docker

2)创建overlay网络
docker network create -d overlay --subnet 172.116.0.0/24 --gateway 172.11.0.254  overlay

3)两边启动容器测试
docker run -it --network  overlay   busybox /bin/sh
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://10.0.0.100:8500 --cluster-advertise=10.0.0.100:2376

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值