Docker 容器的网络有五种模式:java
模式名称 | 功能 | 是否支持多主机 | 南北向通讯机制 | 东西向通讯机制 |
---|---|---|---|---|
bridge | 默认设置,为容器建立独立的网络命名空间,容器具备独立的网卡等全部单独的网络栈。若是在容器运行时不加 --net 参数,就默认采用这种网络模式。 | 否 | 宿主机端口绑定 | 经过Linux bridge |
host | 没有独立的网络环境,直接使用宿主机的 ip 和端口。 | 是 | 按宿主机网络通讯 | 按宿主机网络通讯 |
none | 为容器建立独立网络命名空间,但不为它作任何网络配置,容器中只有lo,用户能够在此基础上,对容器网络作任意定制。 | 否 | 没法通讯 | 经过link通讯 |
container | 指定一个容器与其共享 IP 和端口 | 否 | 宿主机端口绑定 | 经过link通讯 |
自定义 | Docker 1.9版本之后新增的特性,容许容器使用第三方的网络实现或者建立单独的bridge 网络,提供网络隔离能力。 | 按网络实现而定 | 按网络实现而定 | 按网络实现而定 |
注:南北向通讯指容器与宿主机外界的访问机制,东西向通讯机制指同一宿主机上,与其余容器相互访问的机制。nginx
在自定义网络模式下,用户能够建立一个新的 Bridge 、Overlay 或 Macvlan 网络。与 Bridge 不一样 Overlay 和 Macvlan 网络主要用于建立跨主机访问。docker
Bridge
网络是 Docker
中最经常使用的网络类型,建立一个 Bridge
网络的语法以下:安全
docker network create --driver bridge --subnet 网络ip段 --gateway 网关IP --ip 指定静态IP 网络段名称
注:网络
--driver bridge
是默认项,能够不显示写出来--ip
必须配合 --subnet
参数一块儿使用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 Swarm
是 Docker
本身的容器本地集群解决方案。
使用默认 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