1、概述
默认创建三种网络,可以通过docker network ls查看
| 网络模式 | 简介 |
|---|---|
| bridge | 为每一个容器分配、设置IP等,并将容器连接到一个docker0的虚拟网桥,默认为该模式。 |
| host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 |
| none | 容器有独立的Network namespace,但没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等。 |
| container | 新创建的容器不会创建自己的网卡和配置自己的IP,和一个指定的容器共享IP、端口范围 |
# 查看网络数据转发是否开启sysctl net.ipv4.conf.all.forwarding
2、网络模式
2.1 bridge
- Docker守护进程创建了一个虚拟以太网桥
docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。 - 默认情况下,守护进程会创建一对对等虚拟设备接口
veth pair,将其中一个接口设置为容器的eth0接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似vethxxx这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网路上。 - 守护进程还会从网桥
docker0的私有地址空间中分配一个IP地址和子网给该容器,并设置docker0的IP地址为容器的默认网关
2.2 host
host网络模式需要在创建容器的时候通过参数--net host或者--network host指定。- 采用
host网络模式的Docker Container,可以直接使用宿主机的Ip地址和外界进行通信,如果宿主机的eth0是一个共有IP,那么容器也拥有这个共有IP。同时容器内服务的端口也可以使用宿主机的端口,无须额外的进行NAT转换。 host网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机和容器直接通信,但是容器的网络缺少隔离性。2.3 none
none网络模式是指禁用网络功能,只有lo(local的缩写)接口,代表127.0.0.1,即localhost本地环回接口。在创建容器的时候通过参数--net none或者--network none指定。none网络模式即不为Docker Container创建任何的网络环境,容器内部只能使用loopback网络设备,不会再有其他的网络资源。可以说none模式为Docker Container做了极少的网络设定,但是俗话说的好“少即是多”,在没有网络配置的情况下,作为Docker开发者,才能在这基础做其他的网络定制开发,这恰巧也体现了Docker设计理念的开放。2.4 container
container网络模式是Docker中一种较为特别的网络模式。在创建容器的时候通过参数--net container:已运行的容器名称|容器ID或者--network container:已运行的容器名称|容器ID指定。- 处于这个模式下的Docker容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

container网络模式即创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表还是隔离的。3、自定义网络
3.1 概述
- 为了保证各容器中应用的安全性,更推荐
使用自定义的网络进行容器管理,以及启用容器名称到IP地址的自动DNS解析。 - 从Docker 1.10版本开始,Docker Daemon实现了一个内嵌的DNS server,使得容器可以直接通过容器名称进行通信。方法很简单,只要在创建容器的时候使用
--name作为容器名称即可。 - 但是使用Docker DNS有个限制:
只能在user-defined网络中使用。也就是说,默认的bridge网络是无法使用DNS的,所以我们需要自定义网络。3.2 创建网络
# 我们可以自定义一个网络# --driver bridge 默认的桥接# --subnet 192.168.0.0/16 子网掩码,IP地址可以从192.168.0.2 到 192.168.255.254# --gateway 192.168.0.1 网关[root@hchost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet# 查看docker网络docker network ls# 查看自定义网络docker network inspect mynet
3.3 连接网络
- 通过
docker network connect 网络名称 容器名称为容器连接新的网络模式
连通之后就是将容器放到mynet网络下
即所谓 的 一个容器,两个IP地址,如 阿里云,有 公网IP和内网IP
