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