利用pipework爲docker容器設置固定IP

利用pipework爲docker容器設置固定IP

標籤: dockerpipeworkip


 分類:

雲計算(8) 

      今天介紹如何在redhat/centos7系列機器上使用pipework爲docker啓動的容器指定一個固定ip,我們知道默認情況下,docker會使用

bridge網絡模式爲每一個啓動的容器動態分配一個IP,以172.17.0.1爲網關,172.17.0.2,172.17.0.3依次類推作爲容器的ip,這樣也算是

每個容器有了ip,當下次啓動多個容器的時候IP還是會按照這種方式分配,表面上還是一個固定IP的方式,但是這種方式對容器啓動順序

有嚴格的要求。還有一種方式就是通過人爲指定IP的方式,這種方式就是今天講的利用pipework爲容器指定IP。

    啓動容器時可以通過--net=none指定容器網絡模式。有四種網絡模式可以選擇:host,container,none,bridge(默認),如果不設置這個參數,

那麼默認就是bridge的模式,採用dhcp的方式分配IP。使用pipework爲容器指定ip,對宿主機有要求,需要宿主機有網橋,對redhat7可以

使用yum install bridge-utils來安裝網橋,安裝完成之後設置網橋的IP就可以了。

    下面一步一步來通過pipework爲docker容器指定ip(前提是機器上已經安裝了docker服務,並且服務開啓,有鏡像可使用):

    第一步、安裝網橋設備;

     yum install -y bridge-utils

    安裝完畢即可在命令行下通過brctl 命令查看網橋

    第二步、設置網絡地址,我們假定宿主機是固定IP,並設置了網關;

    vi /etc/sysconfig/network-scripts/ifcfg-eno16777728

    TYPE=Ethernet
    BOOTPROTO=none
    DEFROUTE=yes 
    PEERROUTES=yes
    PEERDNS=yes
    NAME=eno16777728
    UUID=00f2e830-ed07-4ace-9e54-56a325e3a690
    ONBOOT=yes
    #IPADDR0=192.168.61.150
    #PREFIX0=24
    #GATEWAY0=192.168.61.2
    #DNS1=192.168.61.2
    HWADDR=00:0C:29:F7:22:81
    BRIDGE="br-ex"

     vi /etc/sysconfig/network-scripts/ifcfg-br-ex

     TYPE=Bridge
     BOOTPROTO=static
     IPADDR=192.168.61.150
     NETMASK=255.255.255.0
     GATEWAY=192.168.61.2
     PREFIX=24
     DNS1=192.168.61.2
     NAME=br-ex
     ONBOOT=yes
     DEVICE=br-ex

    以上修改即爲設置IP,設置完畢可以通過命令service network restart重啓網絡

   [root@docker ~]# brctl show
   bridge name     bridge id               STP enabled     interfaces
   br-ex           8000.000c29f72281       no              eno16777728
                                                                               veth1pl90365
   docker0         8000.0242dda719e2       no

    

  第三步、啓動docker容器並指定網絡模式爲none


   [root@docker ~]# docker images
   REPOSITORY            TAG                IMAGE ID               CREATED                        SIZE
   docker.io/zookeeper   latest              19604ac4a163        Less than a second ago   143 MB
   redis                           latest               07818b5b6de8        8 hours ago                      482.9 MB

   [root@docker ~]# docker run -it -d --net=none --name ip-test redis /bin/bash

   [root@docker ~]# docker ps
   CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
     4190f301a367        redis               "/bin/bash"         55 minutes ago      Up 55 minutes                           ip-test

   

    第四步、獲取pipework可執行程序


    [root@docker ~]# git clone https://github.com/jpetazzo/pipework.git

    [root@docker ~]# cd pipework/
    [root@docker pipework]# ls
    docker-compose.yml  doctoc  LICENSE  pipework  pipework.spec  README.md

    [root@docker ~]# cd ..

    [root@docker ~]# cp -rp pipework/pipework /usr/local/bin


    第五步、設置docker容器IP


    [root@docker ~]# pipework br-ex ip-test 192.168.61.100/[email protected]


    第六步、驗證IP設置是否正確


    [root@docker ~]# ping 192.168.61.100
    PING 192.168.61.100 (192.168.61.100) 56(84) bytes of data.
    64 bytes from 192.168.61.100: icmp_seq=1 ttl=64 time=0.206 ms
    64 bytes from 192.168.61.100: icmp_seq=2 ttl=64 time=0.081 ms
    ^C
    --- 192.168.61.100 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 0.081/0.143/0.206/0.063 ms


    補充:


    1、設置宿主機網橋IP地址的時候就是將原來網卡eno16777728的固定IP地址設置到br-ex網橋上,把網卡eno16777728IP和網關子網掩碼

等都註釋掉。有的機器上網卡可能叫eno16777736,根據具體網卡來修改配置文件。

    2、網橋br-ex的名字可以隨便叫,叫br0也可以,就是對應配置文件名稱就必須是ifcfg-br0,類型爲Bridge。

    3、網橋設置的網關,我的機器是192.168.61.2,這個是安裝虛擬機時vm默認設置的,有的機器網關爲192.168.xx.1,最後對docker容器設置

IP時需要指定192.168.xx.yy/[email protected],@後面就是指定宿主機的網關,這裏一定要注意,否則網絡不通。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章