美文网首页docker
docker 容器多物理机不同容器通信 pipework

docker 容器多物理机不同容器通信 pipework

作者: lucus_guo | 来源:发表于2017-05-10 16:46 被阅读0次

    1.依赖软件

    • util-linux:实现docker-enter命令
    • pipework:整合Docker的inspect功能,指定Docker容器的IP地址、子网掩码和Gateway

    2. 搭建网桥

    2.1 目的

    将Docker容器中的操作系统,暴露于实体网络中;实现Docker容器在多宿主间的信息交互。

    2.2 删除docker自带的网桥docker0

    Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。

    由于docker0为Docker容器分配的是一个内部地址,所以需要将docker0删除。运行下述命令:

    # 如果docker服务已经运行,需要停止服务
    $ sudo service docker stop
     #停止服务后,运行
    $ sudo ip link set dev docker0 down
    $ sudo brctl delbr docker0
    
    

    2.3 建立新网桥

    建立一个新网桥br0,与宿主的网卡绑定。宿主OS的差异使得新网桥br0建立的过程不同,一下分别就Ubuntu和CentOS为例进行介绍:

    2.3.1 Ubuntu

    仅需要修改/etc/network/interfaces一个文件。
    /etc/network/interfaces原为:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
    address 192.168.1.44
    netmask 255.255.255.0
    gateway 192.168.1.1
    
    

    修改前,建议备份/etc/network/interfaces文件:
    $ sudo cp interfaces interfaces.bak
    建立一个新网桥,原文件改为:

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet manual
    
    auto br0
    iface br0 inet static
    address 192.168.1.2
    netmask 255.255.255.0
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_stp no
    dns-nameserver 192.168.1.1
    
    

    2.3.2 CentOS

    在CentOS系统下,建立一个新网桥共需要操作两个文件:
    /etc/sysconfig/network-scripts/ifcfg-eth0;
    /etc/sysconfig/network-scripts/ifcfg-br0。

    #修改ifcfg-eth0
    #备份:
    $ sudo cp ifcfg-eth0 ifcfg-eth0.bak
    #将ifcfg-eth0的内容改为:
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=none
    TYPE=Ethernet
    BRIDGE=br0
    
    

    新建ifcfg-br0

    $ touch ifcfg-br0
    

    写入

    DEVICE=br0
    TYPE=Bridge
    ONBOOT=yes
    BOOTPROTO=static
    USERCTL=no
    IPADDR=192.168.1.3
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    PREFIX=24
    DELAY=0
    DNS1=192.168.1.1
    
    

    2.3.3 重启宿主

    修改网络参数,重启网络可能不会生效,建议重启宿主。
    至此,新网桥搭建完成。

    3 配置Docker后台进程参数

    此部分工作主要是通过修改docker后台进程参数的方式,关闭网桥,为网络配置进行准备。

    3.1 Docker配置文件位置

    Docker的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致:
    在Ubuntu中的位置是:/etc/default/docker;
    在CentOS中的位置是:/etc/sysconfig/docker

    3.2 Ubuntu

    修改/etc/default/docker文件:

    $ echo 'DOCKER_OPTS="-b=none"' >> /etc/default/docker
    

    3.3 CentOs

    修改/etc/sysconfig/docker-network文件:

    $ echo
    'DOCKER_NETWORK_OPTIONS="-b=none"' > /etc/sysconfig/docker-network
    

    3.4 重启Docker服务

    #至此,完成对Docker后台进程参数的修改,重启Docker服务:
    $ sudo service docker restart
    

    4 测试demo

    经由上文操作,宿主已搭建新的网桥br0,并完成了Docker后台进程参数的设置。此时,可以通过pipework命令配置Docker容器的IP地址、Netmask和Gateway信息。以下用一个示例说明:

    # 使用的镜像为:someOS:v1.0
    # 建立的Docker容器名称为test000
    
    # 启动Docker容器,指定其名称为test000,hostname:test000
    $ sudo docker run –itd -h test000 –-name test000 someOS:v1.0 /bin/bash
    
    # 使用pipework配置容器的网络:
    # IP: 192.168.1.44
    # Netmask: 24
    # Gateway: 192.168.1.1
    $ pipework br0 -i eth0 test000 192.168.1.44/24@192.168.1.1
    #连接容器测试
    $ sudo docker exec -it test000 /bin/bash
    
    

    如果容器test000无法解析域名,可以运行,关闭宿主机防火墙,这点很重要

    $ echo "echo 'nameserver 192.168.1.1' > /etc/resolv.conf" >> ~/.bashrc
    

    并将test000 commit为新的someOS镜像。

    相关文章

      网友评论

        本文标题:docker 容器多物理机不同容器通信 pipework

        本文链接:https://www.haomeiwen.com/subject/nhsgtxtx.html