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 是否允许通过。

     

     

     

  • 相关阅读:
    ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考
    ASP.NET Core 中文文档 第四章 MVC(3.1)视图概述
    ASP.NET Core 中文文档 第四章 MVC(2.3)格式化响应数据
    ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
    ASP.NET Core 中文文档 第四章 MVC(2.1)模型绑定
    ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
    mysql 解除正在死锁的状态
    基于原生JS的jsonp方法的实现
    HTML 如何显示英文单、双引号
    win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)
  • 原文地址:https://www.cnblogs.com/python-cat/p/11676527.html
Copyright © 2011-2022 走看看