docker官網高階文章 高階網路 上篇

2021-07-02 05:08:46 字數 4920 閱讀 7659

當dockerworker開始時,它會建立乙個名為虛擬介面docker0主機上。

它隨機選擇從定義的私有範圍內的位址和子網rfc 1918中沒有的主機上使用,並分配給docker0

docker做出的選擇172.17.42.1/1616位掩碼提供65,534位址的主機和容器-當我開始幾分鐘前,例如。

使用分配給該容器的ip位址,以避免衝突的arp生成的mac位址,使用範圍從02:42:ac:11:00:0002:42:ac:11:ff:ff

注:本文介紹了先進的網路配置和選項docker。

在大多數情況下,你不需要這些資訊。

如果你正在尋找上手docker網路的乙個簡單的解釋,並介紹了容器鏈結的概念看到docker使用者指南 。

docker0不是普通的介面。

這是乙個虛擬乙太網橋連線到它的任何其他網路介面之間自動**資料報。

這使容器都與主機和彼此通訊。

每次docker建立乙個容器,它建立了乙個對「同行」介面,就像是管道的兩端 - 傳送乙個資料報上的其它將被接收。

它給同行容器成為其乙個eth0介面,並保持其他同行,具有獨特的名稱,比如vethaqi2qt,在主機的命名空間。

通過結合每veth*介面docker0橋,docker建立虛擬子網主機和每docker容器之間共享。

這個檔案的剩餘部分解釋一切,你可以使用docker的選擇和方式 - 高階情況 - 原料linux網路命令來調整,補充,或完全替代docker的預設網路配置。

下面是與網路有關的docker命令列選項的快速列表,如果它可以幫助你在下面找到你正在尋找的部分。

一些網路命令列選項只能提供給docker伺服器啟動時,一旦執行不能改變:

有跡象表明,可以在啟動時或可提供的兩個網路選項docker run時呼叫。

當在啟動時提供,設定為預設值docker run,如果沒有指定的選項將在以後使用:

最後,一些網路選項只能打**時提供docker run,因為他們指定具體的東西乙個容器:

以下各節中解決在該移動大致從最簡單到最複雜的命令的所有的上述課題。

如何docker提供每個容器與主機名和dns配置,而無需建立與裡面寫的主機名的自定義影象?

其關鍵是要覆蓋三個重要/etc容器與虛擬檔案,它可以寫入新的資料裡面的檔案。

您可以通過執行看到這個mount乙個容器內:

$$ mount

.../

dev/

disk/by

-uuid

/1fec

...ebdf on

/etc

/hostname type ext4

.../

dev/

disk/by

-uuid

/1fec

...ebdf on

/etc

/hosts type ext4

.../

dev/

disk/by

-uuid

/1fec

...ebdf on

/etc

/resolv

.conf type ext4

......

這種安排使得docker做這樣讓聰明的事情resolv.conf最新的所有容器,當主機收到了dhcp新配置後。

如何docker保持容器內,這些檔案的具體細節可以改變從乙個dockerworker的版本下,所以你應該離開這個檔案本身單獨使用以下docker選項來代替。

四種不同的選擇會影響容器的網域名稱服務。

至於dns設定,在沒有任何的--dns=ip_address...--dns-search=domain...選項,docker使每個容器的/etc/resolv.conf看起來像/etc/resolv.conf(在所在主機的docker守護程式執行)。

當建立容器的/etc/resolv.conf,守護程序過濾掉所有的本地主機ip位址nameserver的主機的原始檔案條目。

過濾是必要的,因為在主機上的所有本地主機位址是從容器的網路不可達。

這種過濾後,如果沒有更多nameserver留在容器的條目/etc/resolv.conf檔案,守護程序增加了公共dns谷歌網域名稱伺服器(8.8.8.8和8.8.4.4)到容器的dns配置。

如果ipv6的對守護程序啟用,市民ipv6的dns谷歌網域名稱伺服器也將加入(2001:4860:4860 :: 8888和2001:4860:4860 :: 8844)。

:如果您需要訪問主機的本地主機解析,您必須修改dns服務的主機上對非本地主機位址可達從容器內聽。

你可能不知道會發生什麼,當主機的/etc/resolv.conf檔案的更改。

docker守護程序有乙個檔案更改通知活躍,將監視更改到主機的dns配置。

:檔案更改通知依靠linux核心的inotify特性。

因為這個功能是目前覆蓋檔案系統驅動程式不相容,使用docker守護「疊加」將無法利用/etc/resolv.conf的自動更新功能。

當主機檔案的更改,停止所有容器,有乙個匹配resolv.conf到主機會立即更新到這個最新的主機配置。

這是執行時主機配置變化將需要停止並開始回公升,由於缺乏設施,以確保原子寫入主機改變容器resolv.conf檔案容器執行時。

如果容器的resolv.conf已被編輯,因為它啟動時使用的預設配置,無需更換會嘗試,因為它會覆蓋由容器進行更改。

如果該選項(--dns--dns-search)已被用來修改預設主機配置,則替換更新的主機的/etc/resolv.conf不會發生為好。

注意:這是在執行前建立容器/etc/resolv.conf更新功能,在docker1.5.0:這些容器不會收到更新主機時resolv.conf檔案的更改。

只有在docker1.5.0建立及以上容器將利用這個自動更新功能。

乙個容器是否可以跟世界是由兩個因素決定。

是主機願意**ip分組?

這是由管轄ip_forward系統引數。

包只能容器之間傳遞,如果這個引數是1

通常你會簡單地離開了dockerworker的伺服器的預設設定--ip-forward=true和docker會去設定ip_forward1的時候,你的伺服器啟動。

要檢查設定或開啟手動:

$ sysctl net

.ipv4

.conf

.all

.forwarding

net.

ipv4

.conf

.all

.forwarding =0

$ sysctl net.

ipv4

.conf

.all

.forwarding=1

$ sysctl net.

ipv4

.conf

.all

.forwarding

net.

ipv4

.conf

.all

.forwarding

=1

許多使用docker將要ip_forward要上,至少使容器和更廣闊的世界之間的溝通成為可能 。

可能還需要進行跨容器的溝通,如果你是在乙個多橋設定。

難道你iptables讓這個特殊的聯絡?

docker將永遠不會更改你的系統iptables規則,如果你設定--iptables=false,當守護程式啟動。

否則,docker伺服器將追加**規則的docker過濾器鏈。

docker不會刪除或修改任何預先存在的規則docker過濾器鏈。

這允許使用者事先建立需要進一步限制訪問容器的任何規則。

docker的**規則允許所有的外部源ip位址在預設情況下。

僅允許乙個特定的ip或網路訪問的容器中,插入乙個否定規則在頂部docker濾波器鏈。

例如,以限制外部訪問,使得只有源ip 8.8.8.8可以訪問的容器,以下規則可以新增:

$ iptables 

-i docker

-i ext_if !-

s 8.8

.8.8

-j drop

.............................................

筆記 lxf官網物件導向高階程式設計

正常情況下,當我們定義了乙個class,建立了乙個class的例項後,我們可以給該例項繫結任何屬性和方法,這就是動態語言的靈活性。class student object pass 然後,嘗試給例項繫結乙個屬性 s student s.name michael 動態給例項繫結乙個屬性 print s...

10 10 010 簡介 官網 官網翻譯

netty是 乙個非同步事件驅動的網路應用程式框架,用於快速開發可維護的高效能協議伺服器和客戶端。netty是乙個nio客戶端伺服器框架,可以快速輕鬆地開發協議伺服器和客戶端等網路應用程式。它極大地簡化並簡化了tcp和udp套接字伺服器等網路程式設計。快速簡便 並不意味著最終的應用程式會受到可維護性...

中級篇 docker官網介紹(四)

從docker官網了解docker的歷史,為了保證文章的質量,多增加了截圖,想讓各位老鐵看的比較爽 docker官網介紹 docker安裝官網 最早的docker版本都是從1.0慢慢的累積到1.13,在2017年3月份docker的版本發生了變化變成了版本2017.03版本,也形成了ce和ee版本,...