zoukankan      html  css  js  c++  java
  • 高级网络配置

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

    本章将介绍 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 是否允许通过。

     

     

     

  • 相关阅读:
    大二实习使用的技术汇总(下)
    【JSP】JSTL使用core标签总结(不断更新中)
    凸包---HDU 2202
    poj
    [MFC]MFC中OnDraw与OnPaint的区别
    PHP 自动生成导航网址的最佳方法 v20130826
    汉语-词语-调料:百科
    汉语-词语-味觉:百科
    汉语-词语-本源:百科
    un-人物-企业家-迈纳·基思:百科
  • 原文地址:https://www.cnblogs.com/python-cat/p/11676527.html
Copyright © 2011-2022 走看看