docker容器的五种网络介绍

     容器如果离开了网络,就是一个密闭的盒子。Docker 初期的网络功能并不是很完善,随着不断的演化,目前 docker 的网络已经大大加强。
docker自带的网络:
    当docker安装成功后,就会创建三种网络。
    可以使用docker network ls进行查看:

[root@localhost docker]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b4946b871004        bridge              bridge              local
8937b1719dd3        host                host                local
cb961b2e8932        none                null                local

创建容器时可以通过–net指定网络,对于bridge而言,默认是主机挂载在主机的docker0上的。

[root@localhost docker]# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:bfff:fed8:47ca  prefixlen 64  scopeid 0x20<link>
        ether 02:42:bf:d8:47:ca  txqueuelen 0  (Ethernet)
        RX packets 7230  bytes 75931861 (72.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8948  bytes 74624356 (71.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

查看某种网络的具体信息,可以使用docker network inspect net-name。
docker允许用户自定义的三种网络:
     1、桥接,系统默认的桥接是docker0,如果你想将多个容器隔离在一个新的容器中,可以使用一下命令:

docker network create --drive bridge mybridgenet

然后再创建容器时就可以使用–net将容器挂载到mybridgenet中。

     2、overlay网络,该网络是一种虚拟交换技术,主要解决不同IP地址段之间的网络通讯问题。Docker 使用的 overlay 技术是 VXLAN,借助于 libnetwork 来实现的。Overlay 网络需要一个 K-V 的服务来存储相关的主机信息,目前 Docker 支持的 K-V 存储服务有 Consul,Etcd 和 ZooKeeper,其中 Consul和 Etcd 都是用 Go 来进行开发的,ZooKeeper 是用 Java 开发的,由于 Go 的原生跨平台型,Consul
就成为了默认的发现服务。
     对于 Overlay,主机还必须开放 UDP/4789 和 TCP/UDP/7946,分别用作数据通道和控制通道。

  • nat网络。(默认,一般容器的网络都是172.17.0.1/16)
  • 和宿主机共享网络,host网络
  • none:容器内只有本地回环地址。
  • container网络(两个容器共享一个网络)
  • overlay网络:跨主机容器之间互通
    nat网络:

[root@localhost docker]# docker run -it --name vm1 busybox
/ # 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
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
/ # ping www.baidu.com
PING www.baidu.com (39.156.66.14): 56 data bytes
64 bytes from 39.156.66.14: seq=0 ttl=127 time=102.502 ms
^C

host网络:

[root@localhost docker]# docker run -it --name vm1 --net=host busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:00:59:1b brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.124/24 brd 192.168.0.255 scope global ens33

None网络:只有一个回环地址

[root@localhost docker]# docker run -it --name vm1 --net=none busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

container网络:

[root@localhost docker]# docker run -it --name vm1  busybox sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
[root@localhost ~]# docker run -it --name vm2 --net=container:vm1 busybox sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

overlay网络请查看下面四篇文章
docker overlay网络跨主机通信——路由机制打通网络
docker overlay网络跨主机通信——使用(OVS)打通网络
docker overlay网络跨主机通信——使用flannel来打通网络
docker overlay网络跨主机通信——使用Quagga来实现自动学习路由

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值