---恢复内容开始---html
本章将介绍 Docker 的一些高级网络配置和选项。web
当 Docker 启动时,会自动在主机上建立一个 docker0 虚拟网桥,其实是 Linux 的一个docker
bridge,能够理解为一个软件交换机。它会在挂载到它的网口之间进行转发。json
同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给服务器
docker0 接口。好比典型的 172.17.42.1 ,掩码为 255.255.0.0 。此后启动的容器内的网口网络
也会自动分配一个同一网段( 172.17.0.0/16 )的地址。测试
当建立一个 Docker 容器的时候,同时会建立了一对 veth pair 接口(当数据包发送到一个spa
接口时,另一个接口也能够收到相同的数据包)。这对接口一端在容器内,即 eth0 ;另3d
一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT )。经过这种code
方式,主机能够跟容器通讯,容器之间也能够相互通讯。Docker 就建立了在主机和全部容器
之间一个虚拟共享网络。
快速配置指南
下面是一个跟 Docker 网络相关的命令列表。
其中有些命令选项只有在 Docker 服务启动的时候才能配置,并且不能立刻生效。
容器访问控制
容器的访问控制,主要经过 Linux 上的 iptables 防火墙来进行管理和实现。
容器访问外部网络
容器要想访问外部网络,须要本地系统的转发支持。在Linux 系统中,检查转发是否打开
#net.ipv4.ip_forward = 1为打开转发,0为关闭转发 [gyy@lx-usc-03-209~]$sudo sysctl -a |grep net.ipv4.ip_forward net.ipv4.ip_forward = 1
容器之间访问
容器之间相互访问,须要两方面的支持。
容器之间的访问暂时忽略吧,默认都是容许访问的,可使用本地的iptables来进行访问控制
自定义网桥
除了默认的 docker0 网桥,用户也能够指定网桥来链接各个容器。在启动 Docker 服务的时候,使用 -b BRIDGE 或 --bridge=BRIDGE 来指定使用的网桥。
若是服务已经运行,那须要先中止服务,并删除旧的网桥。
$ sudo systemctl stop docker $ sudo ip link set dev docker0 down $ sudo brctl delbr docker0
而后建立一个网桥 bridge0
$ sudo brctl addbr bridge0 $ sudo ip addr add 192.168.5.1/24 dev bridge0 $ sudo ip link set dev bridge0 up
查看确认网桥建立并启动。
[root@localhost ~]# ip addr show bridge0 115: bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether 96:1f:b3:5b:e7:2b brd ff:ff:ff:ff:ff:ff inet 192.168.5.1/24 scope global bridge0 valid_lft forever preferred_lft forever inet6 fe80::941f:b3ff:fe5b:e72b/64 scope link valid_lft forever preferred_lft forever
在 Docker 配置文件 /etc/docker/daemon.json 中添加以下内容,便可将 Docker 默认桥接到建立的网桥上
*****已测试 无论用,docker0网卡会自动生成,容器默认仍是连的docker0网桥
{ "bridge": "bridge0", }
#临时使用命令删除的docker0网桥会自动生成
[root@localhost network-scripts]# brctl show bridge name bridge id STP enabled interfaces br-016e93959d0a 8000.0242d160379c no bridge0 8000.000000000000 no docker0 8000.0242f73f8106 no [root@localhost network-scripts]# docker run -d -p80:80 -v /data/:/var/www/html --hostname web1 --name web1-server1 06292 98559157ae8eded010d02662f2590a45323de8256dd17c37392d29554bf6a87a [root@localhost network-scripts]# brctl show bridge name bridge id STP enabled interfaces br-016e93959d0a 8000.0242d160379c no bridge0 8000.000000000000 no docker0 8000.0242f73f8106 no veth176c620
---恢复内容结束---
本章将介绍 Docker 的一些高级网络配置和选项。
当 Docker 启动时,会自动在主机上建立一个 docker0 虚拟网桥,其实是 Linux 的一个
bridge,能够理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机分配一个本地未占用的私有网段(在 RFC1918 中定义)中的一个地址给
docker0 接口。好比典型的 172.17.42.1 ,掩码为 255.255.0.0 。此后启动的容器内的网口
也会自动分配一个同一网段( 172.17.0.0/16 )的地址。
当建立一个 Docker 容器的时候,同时会建立了一对 veth pair 接口(当数据包发送到一个
接口时,另一个接口也能够收到相同的数据包)。这对接口一端在容器内,即 eth0 ;另
一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 vethAQI2QT )。经过这种
方式,主机能够跟容器通讯,容器之间也能够相互通讯。Docker 就建立了在主机和全部容器
之间一个虚拟共享网络。
快速配置指南
下面是一个跟 Docker 网络相关的命令列表。
其中有些命令选项只有在 Docker 服务启动的时候才能配置,并且不能立刻生效。
容器访问控制
容器的访问控制,主要经过 Linux 上的 iptables 防火墙来进行管理和实现。
容器访问外部网络
容器要想访问外部网络,须要本地系统的转发支持。在Linux 系统中,检查转发是否打开
#net.ipv4.ip_forward = 1为打开转发,0为关闭转发 [gyy@lx-usc-03-209~]$sudo sysctl -a |grep net.ipv4.ip_forward net.ipv4.ip_forward = 1
容器之间访问
容器之间相互访问,须要两方面的支持。