為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+"技術和行業解決方案
轉載說明:文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!
--------------------------------------------------------------------------------------