Docker 网络管理--网络创建和通信

本文探讨Docker的网络管理,重点讲解如何创建网络以及容器间的通信。通过学习,您可以理解Docker网络的基本概念,并能实现容器在不同网络间的通信。
摘要由CSDN通过智能技术生成
一、网络驱动

docker可以通过创建虚拟网卡,通过虚拟网卡转发到宿主机网卡和外部进行通信。除此之外,也可以不创建自己的虚拟网卡而是直接和宿主机共
用网卡直接占用宿主机IP和端口的方式和外部进行通信。docker的网络驱动是可插拔的,默认情况下存在以下几种网络模式:

1、桥接网络模式(bridge): 这是docker默认的网络驱动程序,如果在创建驱动程序时未指定驱动程序类型,默认便是bridge模式。
当你的应用程序是在同一个主机部署独立容器时,推荐使用桥接网络模式。连接到同一桥接网络的容器可以互相通信,对不同桥接网络的容器则无法直接相互通信。

2、覆盖网络模式(overlay):覆盖网络模式可以将不同的Dockerd守护进程连接在一起,该网络模式支持集群容器之间相互通信,
以及集群和某个单机版独立容器直接相互通信,或不同Dockerd守护进程的独立容器之间进行通信。该网络模式使用场景比较广泛,通常集群部署时会使用该模式。

3、主机网络模式(host):如果某个容器需要访问主机的某个服务,那么需要配置主机网络模式,该模式直接占用主机的网络端口和网卡资源。
也就是说docker网络并非隔离而是直接和宿主机共享资源,就好像应用是直接在宿主机上运行一样。但是其它(例如存储,进程命名空间和用户命名空间)相对宿主机隔离的。
该模式仅适用于Docker 17.06及更高版本的swarm服务。

4、MAC网络模式(macvlan):Macvlan网络允许您为容器分配MAC地址,使其显示为网络上的物理设备。Docker守护程序通过其MAC地址将流量路由到容器。
macvlan 使用场景在于如果希望直接连接到物理网络时,使用驱动程序有时是最佳选择,而不是通过Docker宿主机的网络堆栈进行路由。

5、禁用网络模式(none): 禁用容器所有网络。通常与自定义网络驱动程序一起使用。none不适用于群组服务。

6、其它模式(网络插件):可以使用Docker安装和使用第三方网络插件


[root@localhost7C ~]# docker network create  -d 
bridge   macvlan   overlay  

[root@localhost7C ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
796c38ad861b        bridge              bridge              local
00e08763c06a        host                host                local
0bf2813ea139        none                null                local

使用场景
下面我们总结下不同场景建议使用的网络模式:
1、当您需要多个容器在同一个Docker宿主机上进行通信时,使用自定义的桥接网络模式(bridge)是最佳选择。
2、当容器网络堆栈不应与Docker主机隔离但又希望隔离容器的其他方面(cgroup,unix file system)时,使用主机网络模式(host)是最佳选择。
3、当您需要在不同Docker守护进程上运行的容器进行通信时,或者当多个应用程序使用swarm服务协同工作时,覆盖网络模式(overlay)是最佳选择。
4、当您从VM设置迁移或需要容器看起来像网络上的物理主机时,Macvlan网络是最佳的,这样每个主机都具有唯一的MAC地址。
5、另外如果以上模式都不能满足您的需求是,可以查找第三方网络插件进行集成。


例:使用下面的命令创建一个基于bridge driver的自定义网络:
[root@localhost7C ~]# docker  network create -d bridge --subnet 172.27.0.0/16 --gateway 172.27.0.1 zzhz
b3a5712a5391eff8db290b25893e88a496432d54c63df050efb05c44ccbf938f

[root@localhost7C ~]# docker network ls 
NETWORK ID          NAME                DRIVER              SCOPE
796c38ad861b        bridge              bridge              local
00e08763c06a        host                host                local
0bf2813ea139        none                null                local
b3a5712a5391        zzhz                bridge              local

[root@localhost7C ~]# ip a
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:cd:40:f8:77 brd ff:ff:ff:ff:ff:ff
    inet 10.100.0.1/24 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:cdff:fe40:f877/64 scope link 
       valid_lft forever preferred_lft forever
21: br-b3a5712a5391: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:ac:d8:d7:4a brd ff:ff:ff:ff:ff:ff
    inet 172.27.0.1/16 scope global br-b3a5712a5391
       valid_lft forever preferred_lft forever
[root@localhost7C ~]# brctl  show
bridge name                bridge id        STP enabled    interfaces
br-b3a5712a5391        8000.0242acd8d74a    no        
docker0                8000.0242cd40f877    no        
virbr0                8000.525400fbc09b    yes        virbr0-nic


[root@localhost7C ~]# route  -n
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.80.2    0.0.0.0         UG    100    0        0 eth0
10.100.0.0      0.0.0.0         255.255.255.0   U     0      0        0 docker0
172.27.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-b3a5712a5391

[root@localhost7C ~]# docker run  -it  -d  --name centosA --network zzhz   centos-base:v1 

[root@localhost7C ~]# docker exec  -it  centosA bash
[root@833c8730e36d /]# ip a
22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:1b:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.27.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe1b:2/64 scope link 
       valid_lft forever preferred_lft forever

二、网络通信

1.容器之间的通信和互联
即在同一个宿主机上的容器之间可以通过自定义的容器名称相互访问,比如一个业务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值