Creating a Docker network

Docker 网络介绍

默认提供 bridge、host、none、overlay、maclan 和 Network plugins 这几种网络模式,运行容器时可以通过–network 参数设置具体使用那一种模式

  • bridge:这是Docker默认的网络驱动,此模式会为每一个容器分配Network Namespace和设置IP等,并将容器连接到一个虚拟网桥上。如果未指定网络驱动,这默认使用此驱动

  • host: 此网络驱动直接使用宿主机的网络

  • none: 此驱动不构造网络环境。采用了none 网络驱动,那么就只能使用loopback网络设备,容器只能使用127.0.0.1的本机网络

  • overlay: 此网络驱动可以使多个Docker daemons连接在一起,并能够使用swarm服务之间进行通讯。也可以使用overlay网络进行swarm服务和容器之间、容器之间进行通讯

  • macvlan: 此网络允许为容器指定一个MAC地址,允许容器作为网络中的物理设备,这样Docker daemon就可以通过MAC地址进行访问的路由。对于希望直接连接网络网络的遗留应用,这种网络驱动有时可能是最好的选择

  • Network plugins: 可以安装和使用第三方的网络插件。可以在Docker Store或第三方供应商处获取这些插件

在默认情况,Docker 使用 bridge 网络模式,bridge 网络驱动的示意图如下,此文以bridge 模式对 Docker 的网络进行说明

Docker Container Networking

  1. bridge网络的构建过程
    安装Docker时,创建一个名为 docke0 的虚拟网桥,虚拟网桥使用“10.0.0.0 -10.255.255.255 “、”172.16.0.0-172.31.255.255″和“192.168.0.0——192.168.255.255”这三个私有网络的地址范围
    通过 ifconfig 命令可以查看 docker0 网桥的信息:

bridge网络

通过 docker network inspect bridge 可以查看网桥的子网网络范围和网关:

inspect bridge

  1. 运行容器时,在宿主机上创建虚拟网卡 veth pair 设备,veth pair 设备是成对出现的,从而组成一个数据通道,数据从一个设备进入,就会从另一个设备出来
    将veth pair设备的一端放在新创建的容器中,命名为eth0;另一端放在宿主机的docker0中,以veth为前缀的名字命名。通过 brctl show 命令查看放在docker0中的veth pair设备

veth pair

  1. 外部访问
    bridge 的 docker0 是虚拟出来的网桥,因此无法被外部的网络访问。因此需要在运行容器时通过 -p 和 -P 参数对将容器的端口映射到宿主机的端口。实际上 Docker 是采用 NAT的方式,将容器内部的服务监听端口与宿主机的某一个端口 port 进行绑定,使得宿主机外部可以将网络报文发送至容器

创建 Docker 网络

Bridge networks是docker中最常见的网络类型,

  1. 创建一个bridge网络

    $ docker network create --driver bridge szer1

    image.png

  2. 查看网络详情

    $ docker network inspect szer1

    image.png
    image.png

  3. 将webserver容器运行在新创建的网络
    --network指定网络

    docker run -it --rm -p 80:80 --network szer1 --mount source=szer1,destination=/usr/share/nginx/html --name web webserver
  4. 查看szer1网络下运行的容器

    $ docker network inspect szer1

image.png

点赞(0)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部