高级网络配置

---恢复内容开始---

本章将介绍 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 服务启动的时候才能配置,而且不能马上生效。

  • -b BRIDGE 或 --bridge=BRIDGE 指定容器挂载的网桥
  • --bip=CIDR 定制 docker0 的掩码
  • -H SOCKET... 或 --host=SOCKET... Docker 服务端接收命令的通道
  • --icc=true|false 是否支持容器之间进行通信
  • --ip-forward=true|false 请看下文容器之间的通信
  • --iptables=true|false 是否允许 Docker
  • --mtu=BYTES 容器网络中的 MTU

 

  • --dns=IP_ADDRESS... 使用指定的DNS服务器
  • --dns-search=DOMAIN... 指定DNS搜索域
  • -h HOSTNAME 或 --hostname=HOSTNAME 配置容器主机名
  • --link=CONTAINER_NAME:ALIAS 添加到另一个容器的连接
  • --net=bridge|none|container:NAME_or_ID|host 配置容器的桥接模式
  • -p SPEC 或 --publish=SPEC 映射容器端口到宿主主机
  • -P or --publish-all=true|false 映射容器所有端口到宿主主机

容器访问控制

容器的访问控制,主要通过 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

容器之间访问

 

 

 

容器之间相互访问,需要两方面的支持。

  • 容器的网络拓扑是否已经互联。默认情况下,所有容器都会被连接到 docker0 网桥上。
  • 本地系统的防火墙软件 -- iptables 是否允许通过。

容器之间的访问暂时忽略吧,默认都是允许访问的,可以使用本地的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 服务启动的时候才能配置,而且不能马上生效。

  • -b BRIDGE 或 --bridge=BRIDGE 指定容器挂载的网桥
  • --bip=CIDR 定制 docker0 的掩码
  • -H SOCKET... 或 --host=SOCKET... Docker 服务端接收命令的通道
  • --icc=true|false 是否支持容器之间进行通信
  • --ip-forward=true|false 请看下文容器之间的通信
  • --iptables=true|false 是否允许 Docker
  • --mtu=BYTES 容器网络中的 MTU

 

  • --dns=IP_ADDRESS... 使用指定的DNS服务器
  • --dns-search=DOMAIN... 指定DNS搜索域
  • -h HOSTNAME 或 --hostname=HOSTNAME 配置容器主机名
  • --link=CONTAINER_NAME:ALIAS 添加到另一个容器的连接
  • --net=bridge|none|container:NAME_or_ID|host 配置容器的桥接模式
  • -p SPEC 或 --publish=SPEC 映射容器端口到宿主主机
  • -P or --publish-all=true|false 映射容器所有端口到宿主主机

容器访问控制

容器的访问控制,主要通过 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

容器之间访问

 

 

 

容器之间相互访问,需要两方面的支持。

  • 容器的网络拓扑是否已经互联。默认情况下,所有容器都会被连接到 docker0 网桥上。
  • 本地系统的防火墙软件 -- iptables 是否允许通过。

 

 

 

原文地址:https://www.cnblogs.com/python-cat/p/11676527.html