Docker网络模式

1、Docker 网络模式

Docker 容器的网络有五种模式:java

模式名称 功能 是否支持多主机 南北向通讯机制 东西向通讯机制
bridge 默认设置,为容器建立独立的网络命名空间,容器具备独立的网卡等全部单独的网络栈。若是在容器运行时不加 --net 参数,就默认采用这种网络模式。 宿主机端口绑定 经过Linux bridge
host 没有独立的网络环境,直接使用宿主机的 ip 和端口。 按宿主机网络通讯 按宿主机网络通讯
none 为容器建立独立网络命名空间,但不为它作任何网络配置,容器中只有lo,用户能够在此基础上,对容器网络作任意定制。 没法通讯 经过link通讯
container 指定一个容器与其共享 IP 和端口 宿主机端口绑定 经过link通讯
自定义 Docker 1.9版本之后新增的特性,容许容器使用第三方的网络实现或者建立单独的bridge 网络,提供网络隔离能力。 按网络实现而定 按网络实现而定 按网络实现而定

注:南北向通讯指容器与宿主机外界的访问机制,东西向通讯机制指同一宿主机上,与其余容器相互访问的机制。nginx

2、自定义网络模式

在自定义网络模式下,用户能够建立一个新的 Bridge 、Overlay 或 Macvlan 网络。与 Bridge 不一样 Overlay 和 Macvlan 网络主要用于建立跨主机访问。docker

2.1 Bridge 网络

Bridge 网络是 Docker 中最经常使用的网络类型,建立一个 Bridge 网络的语法以下:安全

docker network create --driver bridge --subnet 网络ip段 --gateway 网关IP --ip 指定静态IP 网络段名称

注:网络

  • --driver bridge 是默认项,能够不显示写出来
  • --ip 必须配合 --subnet参数一块儿使用

2.2 Overlay 网络

overlay 网络驱动程序在多个 Docker 守护进程主机之间建立一个分布式网络。这个网络在容许容器链接并进行安全通讯的主机专用网络之上(overlay 覆盖在上面)。Docker 透明地处理每一个 Docker 守护进程与目标容器之间的数据包的路由。分布式

当初始化 swarm 集群(注1)或将一个 Docker 主机加入已经存在的 swarm 集群时,Docker 主机上会建立两个新网络:code

  • 一个称为 ingress 的 overlay 网络
用来处理与 swarm 服务相关的控制和数据流。当建立的 swarm 服务没有链接到用户自定义的 overlay 网络时,这个服务会默认链接到 ingress 网络。
  • 一个称为 docker_gwbridge 的bridge 网络进程

    用来将单个的 Docker 守护进程链接到 swarm 中的其余守护进程。

可使用 docker network create 命令建立用户定义的 overlay网络,就像能够建立用户定义的 bridge 网络同样。服务或容器一次能够链接到多个网络。服务或容器只能经过它们各自链接的网络进行通讯。在建立 overlay网络前,宿主机须要知足以下先决条件:ip

  • 宿主机防火墙指定端口开放路由

    - TCP 端口 2377:用于集群管理通讯
    - TCP 和 UDP 端口 7946:用于节点之间通讯
    - UDP 端口 4789:overlay 网络流量
  • 将宿主机加入到 swarm 集群

    # 将容器初始化为 swarm  集群
    docker swarm init 
    或
    # 将其加入到一个已存在的热情
    docker swarm join

建立 Overlay 网络:

docker network create -d overlay 网络名

要建立能够用于 swarm 服务和独立容器跟其余 Docker 守护进程中运行的独立容器通讯的 overlay 网络,添加 --attachable 标志:

docker network create -d --attachable overlay 网络名

其余选项能够查看 docker network create --help 命令。

注1:Docker SwarmDocker 本身的容器本地集群解决方案。

3、使用指定网络模式建立容器

使用默认 bridge 模式 , --net bridge 能够不用写

docker run -di --name=myNginx   -p 80:80 nginx

使用 host 模式

docker run -di --name=myNginx --net host -p 80:80 nginx

使用 none 模式

docker run -di --name=myNginx --net none  -p 80:80 nginx

使用 container 模式

docker run -di --name=myNginx --net container:指定容器名  -p 80:80 nginx

使用自定义模式

1.建立自定义网段
docker network create --subnet=192.168.0.0/16 mynetwork
2.自定义网络模式建立容器
docker run -di --name=myNginx --net mynetwork -p 80:80 nginx
相关文章
相关标签/搜索