1. 程式人生 > >為Docker容器設定固定IP實現網路聯通(2)——通過Python指令碼實現並解決pipework缺陷

為Docker容器設定固定IP實現網路聯通(2)——通過Python指令碼實現並解決pipework缺陷

題記

前面已經提到通過使用pipework方式,為容器設定固定IP,但是該方法有一個問題就是如果我們的容器例項重啟,設定的固定IP會丟失,這顯然回事一件令人頭疼的事情,如果我們重啟後IP依然保持設定的,豈不是一件很好的事情,接下來我們就介紹一下如何完成這個需求。


通過這個圖可以看到,與上一篇使用pipework架構基本類似,本次只是用了一個網絡卡,而且我只建立了一個容器例項C1,相關環境可以參考上一篇介紹。

--------------------------------------------------------------------------------------

宗旨:專注於"GIS+"前沿技術的研究與交流,將雲端計算技術、大資料技術、容器技術、物聯網與GIS進行深度融合,探討"GIS+"技術和行業解決方案

轉載說明:文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!

--------------------------------------------------------------------------------------


1、為容器伺服器設定br0網橋,該網橋寫入到配置檔案裡面,dns-nameservers如果需求可以新增

[email protected]:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#auto eth0
#iface eth0 inet static
#       address 10.0.0.11
#       netmask 255.255.255.0
auto br0
iface br0 inet static
address 192.168.14.225
netmask 255.255.255.0
gateway 192.168.14.254
bridge_ports eth0
bridge_stp off

2、安裝相應的包檔案

#安裝pip
apt-get install python-pip python-dev build-essential
 
#安裝docker python的api
pip install docker-py 

3、啟動一個容器例項

[email protected]:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[email protected]
:~# docker run -i -t --name test1 --net=none ubuntu:14.04 /bin/bash [email protected]:/# [email protected]:/# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever

我們需要修改相關的配置檔案,新增需要設定的容器例項資訊

[email protected]:~# cd docker-static-ip-master/
[email protected]:~/docker-static-ip-master# ls
containers.cfg  duration.py  README.md
[email protected]:~/docker-static-ip-master# cat containers.cfg
#<container-id>,<bridge-name>,<ipaddress/netmask>,<gateway>
[email protected]:~/docker-static-ip-master# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
443b6fa7416a        ubuntu:14.04        "/bin/bash"         3 minutes ago       Exited (0) 3 minutes ago                       test1
[email protected]:~/docker-static-ip-master#
[email protected]:~/docker-static-ip-master# echo "443b6fa7416a,br0,192.168.14.243/24,192.168.14.254" >> containers.cfg
[email protected]:~/docker-static-ip-master# python duration.py

5、檢視資訊(在容器例項)

[email protected]:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
7: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 3a:9d:3b:13:89:db brd ff:ff:ff:ff:ff:ff
    inet 192.168.14.243/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::389d:3bff:fe13:89db/64 scope link
       valid_lft forever preferred_lft forever

在容器例項測試連線

[email protected]:/# ping 192.168.14.254
PING 192.168.14.254 (192.168.14.254) 56(84) bytes of data.
64 bytes from 192.168.14.254: icmp_seq=1 ttl=255 time=22.5 ms
64 bytes from 192.168.14.254: icmp_seq=2 ttl=254 time=2.00 ms
^C
--- 192.168.14.254 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 2.005/12.282/22.559/10.277 ms
[email protected]:/# ping 192.168.14.225
PING 192.168.14.225 (192.168.14.225) 56(84) bytes of data.
64 bytes from 192.168.14.225: icmp_seq=1 ttl=64 time=0.127 ms
64 bytes from 192.168.14.225: icmp_seq=2 ttl=64 time=0.104 ms
^C
--- 192.168.14.225 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.104/0.115/0.127/0.015 ms

在宿主機檢視資訊

[email protected]:~# ifconfig br0
br0       Link encap:Ethernet  HWaddr 00:0c:29:d3:5a:fe
          inet addr:192.168.14.225  Bcast:192.168.14.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed3:5afe/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7139 errors:0 dropped:0 overruns:0 frame:0
          TX packets:976 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:552522 (552.5 KB)  TX bytes:123821 (123.8 KB)

[email protected]:~# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c29d35afe       no              eth0
                                                        tap1923
docker0         8000.02427810a053       no
[email protected]:~# ping 192.168.14.243
PING 192.168.14.243 (192.168.14.243) 56(84) bytes of data.
64 bytes from 192.168.14.243: icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from 192.168.14.243: icmp_seq=2 ttl=64 time=0.065 ms
64 bytes from 192.168.14.243: icmp_seq=3 ttl=64 time=0.100 ms
^C
--- 192.168.14.243 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.033/0.066/0.100/0.027 ms

在我的筆記本測試連線
C:\Users\Administrator>ping 192.168.14.243

正在 Ping 192.168.14.243 具有 32 位元組的資料:
來自 192.168.14.243 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.14.243 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.14.243 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.14.243 的回覆: 位元組=32 時間<1ms TTL=64

192.168.14.243 的 Ping 統計資訊:
    資料包: 已傳送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 0ms,最長 = 0ms,平均 = 0ms

6、重啟容器例項,測試IP

[email protected]:/# [email protected]:~#
[email protected]:~# docker stop 443b6fa7416a
443b6fa7416a
[email protected]:~# docker start 443b6fa7416a
443b6fa7416a
[email protected]:~# docker exec -it 443b6fa7416a /bin/bash
[email protected]:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 4e:ef:ea:8d:0a:30
          inet addr:192.168.14.243  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::4cef:eaff:fe8d:a30/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:30 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2364 (2.3 KB)  TX bytes:578 (578.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

[email protected]:/# ping 192.168.14.225
PING 192.168.14.225 (192.168.14.225) 56(84) bytes of data.
64 bytes from 192.168.14.225: icmp_seq=1 ttl=64 time=0.160 ms
64 bytes from 192.168.14.225: icmp_seq=2 ttl=64 time=0.113 ms
64 bytes from 192.168.14.225: icmp_seq=3 ttl=64 time=0.113 ms
^C
--- 192.168.14.225 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.113/0.128/0.160/0.025 ms
[email protected]:/#

--------------------------------------------------------------------------------------

宗旨:專注於"GIS+"前沿技術的研究與交流,將雲端計算技術、大資料技術、容器技術、物聯網與GIS進行深度融合,探討"GIS+"技術和行業解決方案

轉載說明:文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!

--------------------------------------------------------------------------------------