国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

詳解docker容器分配靜態IP

2024-09-01 13:50:15
字體:
來源:轉載
供稿:網友

最近因為工作要求需要用學習使用docker,最后卡在了網絡配置這一塊。默認情況下啟動容器的時候,docker容器使用的是bridge策略比如:

docker run -ti ubuntu:latest /bin/bash

等效于

docker run -ti --net=bridge ubuntu:latest /bin/bash

 bridge策略下,docker容器自動為我們分配了一個IP地址,并連接到docker0的網橋上。但這里有一個問題,這個IP地址并不是靜態分配的,這對我們的對容器的實例的網絡管理造成一了些困難。這里筆者并不想直接給出解決方案,因為那樣子并沒有什么卵用,理解原理,一步一步踏實走才是。

相信看過docker介紹的讀者都知道docker是借助于cGroup和namespace技術來實現資源控制和隔離的。在開始之前讀者需要去看一下linux上namespace的使用,本文并不想帶入太多的其它不相關的主題。好了現在假設你已經了解namespace了,那你肯定想知道docker在網絡上是怎么利用namespace來做手腳的。大致過程應該和下面的一致:(下面只是個人猜測,因為筆者并沒有太多時間去研究它的源碼)

1、創建一個Net Namespace  netns1。

2、創建一對veth,將peer加入到netns1,將別一端接入到網橋bridge0中。

3、為這兩個veth分配IP。

4、用netns1啟動容器中的程序比如/bin/bash。

可惜的是,docker run并沒有一個選項讓我們去指定所分配的IP,因為網絡的確是個大難題。那就得自己動手豐衣足食了。

從上面我們知道,docker在網絡這里用到了Net namespace,veth和網橋bridge。注意如果你意圖使用ip netns list去查看docker在啟動容器的時候使用了那個netns,你會失望地發現沒有對應netns。其實并不是沒有,而是docker為了掩蓋一些細節,在做完初始化工作后,docker便將這個netns從/var/run/netns中刪除了,我們完全可以用下面的方式讓它打回原形:

ln -s /proc/${container's pid}/ns/net /var/run/netns/${the's name you want to display}ip netns list

好了,現在說一下我們給容器分配靜態IP的思路:

1、用--net=none方式啟動容器,這樣容器有了自己的namespace(這一步我們無法干預的,so let it go!)

2、獲取容器的進程號PID,然后根據PID將它的Net namespace打回原型。

3、創建一個bridge0,用brctl工具(可以通過安裝bridge-utils工具來實現)。

4、創建一對veth:vethBridge,vethContainer,將peer端vethContainer加入到窗口的Net namespace中,將vethBridge接入到bridge0中:brctl add...

5、設置vethContainer的IP。

6、重啟容器的network service。

下面以我機器為例(deepin 2015 kernel 4.5.0)

1、 啟動容器:

docker,容器,靜態ip,docker設置靜態ip,docker靜態ip

2、獲取容器的進程號:

docker,容器,靜態ip,docker設置靜態ip,docker靜態ip

3、根據進程號將容器的Net namespace打回原型:

docker,容器,靜態ip,docker設置靜態ip,docker靜態ip

4、創建網橋bridge0

docker,容器,靜態ip,docker設置靜態ip,docker靜態ip

5、創建veth,配置對應的veth,最后重啟容器的network service

docker,容器,靜態ip,docker設置靜態ip,docker靜態ip

6、在容器中可以看到靜態分配的IP: 192.168.9.10

docker,容器,靜態ip,docker設置靜態ip,docker靜態ip

注意,現在容器還不能與主機通信,因為主機沒有到bridge的設備,如果需要和主機進行通信的話可以添加一對veth,將一端接入bridge。如果容器需要我外部通信的話,可以通過啟用內核轉發,并在iptables中添加相應的轉發規則。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临夏市| 大洼县| 呼和浩特市| 玛曲县| 忻城县| 河南省| 页游| 昌乐县| 仁怀市| 富裕县| 江门市| 莲花县| 济南市| 嵩明县| 晴隆县| 邢台市| 荔波县| 石阡县| 乌拉特前旗| 西宁市| 临清市| 宁城县| 前郭尔| 东明县| 武定县| 大港区| 霍邱县| 远安县| 郎溪县| 宣威市| 西乡县| 外汇| 黎平县| 新野县| 平江县| 襄城县| 宜州市| 万盛区| 巴彦县| 磐安县| 濉溪县|