CentOS 7.x 下Docker桥接网络配置

docker默认提供了一个隔离的内网环境,启动时会建立一个docker0的虚拟网卡,每个容器都是连接到docker0网卡上的。而docker0的ip段为172.17.0.1,如果想让容器与宿主机同一网段的其他机器之间相互访问,就必须在启动docker的时候将某个端口映射到宿主机的端口。如果这样,大家会发现很麻烦,而且在企业里面也没这么使用的,比较弱。

大家应该知道KVM的桥接网络非常方便,其实docker也比较方便,只是不是docker自带的桥接而已,接下来讲解centos7下如何快速实现docker容器桥接网络,并为容器分配外网IP。

物理机的IP:192.168.1.7 网关:192.168.1.1

  1. 停止docker服务;
    systemctl stop docker

  2. 新建桥接网卡br0;
    brctl addbr br0
    ip link set dev br0 up

  3. 为br0分配物理网络中的IP地址;
    这里可直接用宿主机的IP,接下来会清空宿主机的IP。
    ip addr add 192.168.1.7/24 dev br0

  4. 将宿主机网卡的IP清空,并将宿主机网卡挂至br0上;
    ip addr del 192.168.1.7/24 dev eth0
    brctl addif br0 eth0 # 将宿主机eth0网卡挂到br0上

  5. 删除原路由,并为br0设置路由
    ip route del default
    ip route add default via 192.168.1.1 dev br0

  6. 设置docker服务启动参数
    vim /etc/sysconfig/docker-network,其他系统可能在/etc/sysconfig/docker下。
    改成如下行即可:

    DOCKER_NETWORK_OPTIONS="-b=br0"
    
  1. 启动docker服务
    systemctl docker start

  2. 删除docker0网卡

    $ ip link set dev docker0 down  #先关闭docker0网卡
    $ brctl delbr docker0           #再删除
    
  3. 安装pipework
    git clone https://github.com/jpetazzo/pipework
    cp ./pipework/pipework /usr/local/bin/

  4. 启动容器并设置网络
    docker run -itd --net=none --name=mycentos cgy/mycentos:v1 /bin/bash

  5. 为mycentos容器设置一个与桥接物理网络同地址段的 ip/掩码@网关
    pipework br0 mycentos 192.168.1.10/[email protected]

  6. 进入容器查看IP
    docker exec -it mycentos /bin/bash
    如下图:

    CentOS 7.x 下Docker桥接网络配置_第1张图片
    image.png

以上2~5步通过命令行新建的桥接网卡br0,在服务器重启后就会失效,要想永久生效,就需要创建网卡配置文件了。如下 :

  1. 新建br0的网卡配置文件;
    vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.7
GATEWAY=192.168.1.1
PREFIX=24
NM_CONTROLLED=no
DNS1=8.8.8.8
  1. 修改eth0网卡配置文件:
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
UUID="5c013315-95d6-4f08-a61d-1b8340a9cb94"
DEVICE="eth0"
ONBOOT="yes"
BRIDGE=br0      # 表示桥接至br0网卡上
  1. 重启网卡
    systemctl restart network

你可能感兴趣的:(CentOS 7.x 下Docker桥接网络配置)