目录
一、Docker网络
1. Docker网络实现原理
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网络的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。
2. Docker网桥
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run创建容器时通过-p或-P参数来启用,访问容器的时候就通过[宿主机IP]:[容器端口]访问容器
[root@docker ~]# docker run -d --name test1 -P nginx
##-P自动生成端口
[root@docker ~]# docker run -d --name test2 -p 43000:80 nginx
##使用固定的43000端口
分别访问这两个端口
3. Docker的网络模式
网络模式 | 说明 |
---|---|
Host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。 |
None | 该模式关闭了容器的网络功能。 |
Bridge | 默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个Docker0虚拟网桥,通过docker0网桥以及iptables nat表配置与宿主机通信。 |
自定义网络 | 自定义网络后,可指定容器IP |
4. 查看容器网络
安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、none、host。
5.创建网络
使用docker run创建Docker容器时,可以用--net或--network选项指定容器的网络模式
● host模式:使用--net=host指定
● none模式:使用--net=none指定
● container模式:使用--net=container:NAME_or_ID指定
● bridge模式:使用--net=bridge指定,默认设置,可省略
6. 网络模式详解
6.1 host模式
相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。 Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。 一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。