導航:首頁 > 網路安全 > 如何設置容器的網路類型

如何設置容器的網路類型

發布時間:2022-05-17 12:43:14

㈠ WINDOWS2003考試提問

1、主頻不低於 550 MHz ;
2、A.「控制面板」中的「電源選項」;
3、C.用戶無法從硬碟上活的超過配額的信息資源,哪怕這些資源是用戶有權訪問的;
4、A;
5、A;
6、B;
7、B;
8、E;
9、B;
10、D;
填空題沒有看明白什麼意思
簡單
一、要使用RIS遠程安裝,網路中必須有DHCP、DNS、Active Directory三種網路服務,而且,只有Windows2000 server以及更新的伺服器操作系統如Windows.NET Server2003 產品家族可以通過運行RIS來對客戶機進行操作系統的遠程安裝。RIS客戶機須要配有PXE網卡,而當客戶機不支持網路引導或者客戶機的網卡不帶有PXE的時候,我們可以使用RIS引導盤來對客戶機實現引導。我們需要在RIS伺服器中存儲Windows XP CD-ROM或Remote Installation Preparation映像,而本文主要講述在RIS伺服器中存儲Windows安裝CD映像的情況. 如果需要實現自動化安裝,存儲應答文件。

操作過程:
一. 配置DNS伺服器
在完成域的創建過程中,完成DNS服務的配置。
二.配置DHCP伺服器
1.依次點擊「開始→設置→控制面板→添加/刪除程序→添加/刪除Windows組件」,用滑鼠左鍵點擊選中對話框的「組件」列表框中的「網路服務」一項,單擊[詳細信息]按鈕,出現帶有具體內容的對話框。
2.在對話框「網路服務的子組件」列表框中勾選「動態主機配置協議(DHCP)」,單擊[確定]按鈕,根據屏幕提示在windows sever 2003的虛擬鏡像盤中復制所需要的程序。重新啟動計算機後,在「開始→程序→管理工具」下就會出現「DHCP」一項,說明DHCP服務安裝成功。
3.DHCP伺服器的授權出於對網路安全管理的考慮,並不是在Windows2003Server中安裝了DHCP功能後就能直接使用,還必須進行授權操作,未經授權操作的伺服器無法提供DHCP服務。
4. 對DHCP伺服器授權操作,依次點擊「開始→程序→管理工具→DHCP」,打開DHCP控制台窗口。2.在控制台窗口中,用滑鼠左鍵點擊選中伺服器名,然後單擊右鍵,在快捷菜單中選中「授權」,此時需要幾分鍾的等待時間。注意:如果系統長時間沒有反應,可以按F5鍵或選擇菜單工具中的「操作」下的「刷新」進行屏幕刷新,或先關閉DHCP控制台,在伺服器名上用滑鼠右鍵點擊。如果快捷菜單中的「授權」已經變為「撤消授權」,則表示對DHCP伺服器授權成功。此時,最明顯的標記是伺服器名前面紅色向上的箭頭變成了綠色向下的箭頭。這樣,這台被授權的DHCP伺服器就有分配IP的權利了。添加IP地址范圍當DHCP伺服器被授權後,還需要對它設置IP地址范圍。通過給DHCP伺服器設置IP地址范圍後,當DHCP客戶機在向DHCP伺服器申請IP地址時,DHCP伺服器就會從所設置的IP地址范圍中選擇一個還沒有被使用的IP地址進行動態分配。
5. 添加IP地址范圍,點擊「開始→程序→管理工具→DHCP」,打開DHCP控制台窗口。選中DHCP伺服器名,在伺服器名上點擊滑鼠右鍵,在出現的快捷菜單中選擇「新建作用域」,在出現的窗口中單擊[下一步]按鈕,在出現的對話框中輸入相關信息,單擊[下一步]按鈕,如圖所示。

6.根據自己網路的實際情況,對各項進行設置,然後單擊[下一步]按鈕,輸入需要排除的IP地址范圍。單擊[下一步]按鈕,在出現的「租約期限」窗口中可以設置IP地址租期的時間值。一般情況下,如果校園網路中的IP地址比較緊張的時候,可以把租期設置短一些,而IP地址比較寬松時,可以把租期設置長一些。設置完後,單擊[下一步]按鈕,出現「配置DHCP選項」窗口。
7.在「配置DHCP選項」窗口中,如果選擇「是,我想現在配置這些選項」,此時可以對DNS伺服器、默認網關、WINS伺服器地址等內容進行設置;如果選擇「否,我想稍後配置這些選項」,可以在需要這些功能時再進行配置。此處,我們選擇前者,單擊[下一步]按鈕。
8.在出現的窗口中,常常輸入網路中路由器的IP地址(即默認網關的IP地址)或是NAT伺服器(網路地址轉換伺服器)的IP地址,如WinRoute、SyGate等。這樣,客戶機從DHCP伺服器那裡得到的IP信息中就包含了默認網關的設定了,從而可以接入Internet。
9.單擊[下一步]按鈕,在此對話框中設置有關客戶機DNS域的名稱,同時輸入DNS伺服器的名稱和IP地址。,然後單擊[添加]按鈕進行確認。單擊[下一步]按鈕,在出現的窗口中進行WINS伺服器的相關設置,設置完後單擊[下一步]按鈕。在新出現的窗口中,選擇「是,我想現在激活此作用域」後,單擊[下一步]按鈕,在出現的窗口中單擊[完成]按鈕,設置結束。此時,就可以在DHCP管理器中看到我們剛剛建好的作用域。如圖示:

三. 配置RIS伺服器
在網路條件符合上述必要條件的前提下,我們要執行的第一步是安裝RIS伺服器:
( 1 ) 進入Windows 2003 server系統,打開"控制面板",雙擊"添加/刪除程序",
點擊"添加/刪除Windows組件"選擇"遠程安裝服務"進行對RIS伺服器組件的安裝,當然,也可以通過開始->程序->管理工具->設置您的伺服器功能進行配置。如圖所示:

(2)完成安裝RIS伺服器組件以後,由於RIS客戶機沒有配PXE網卡,所以需要製作一個RIS引導盤來對客戶機實現引導。
1.關閉windows sever 2003,在虛擬機的開始界面上,選擇「Edit visual machine settings」,在彈出的界面中左框選中「hard disk (SCSI0:0)」,單擊add按鈕,進入虛擬盤製作界面welcome to the add hardware wizard,如下圖所示:

2. 根據向導選擇下一步,在出現的對話框中選擇「hard disk」,單擊下一步,然後選擇「Create a new visual disk」,單擊下一步,在選擇磁碟類型中選擇「SCSI」單擊下一步,分配磁碟大小為8.0G後,單擊下一步,在彈出的specify disk file界面中單擊完成。至此完成虛擬磁碟的創建。
3. 創建簡單卷,使剛剛創建的虛擬盤可用,右擊「我的電腦」—「管理」—「磁碟管理」在剛創建的虛擬盤上,右鍵選擇,創建磁碟初始化向導。如下圖所示:

然後根據磁碟創建向導,完成簡單卷的創建,如下圖:

完成向導後,此時可在我的電腦中出現新建卷(E:)。

4.創建「遠程啟動磁碟」,因為客戶端計算機沒有安裝支持PXE啟動的網路適配器,所以在創建虛擬磁碟的同時還要創建一個「遠程啟動磁碟」。在創建完軟盤之後,在「我的電腦」中將軟盤格式化,並且找到安裝文件 i386 \system32 \reminst /rbfg.exe,然後雙擊啟動遠程啟動磁碟生成器。完成軟盤的創建。如下圖所示:

然後關閉所有的窗口。

( 3 )正在完成安裝RIS伺服器組件以後,通過RISETUP工具來配置伺服器的RIS:
1. 單擊開始->運行,在運行的文本框中輸入RISETUP,單擊確定。Remote Installation Services Setup Wizard將啟動,如下圖所示:

[這個向導可以幫助您創建將要進行遠程安裝所用的文件夾,以及拷貝安裝Windows XP Professional所需要的文件,配置等一下客戶機的Client Installation Wizard(CIW)屏幕以及拷貝CIW文件, 更改注冊表,創建必要的卷等。]
2. 單擊"下一步"按鈕,選擇鏡像文件,繼續配置。
3. Remote Installation Folder Location(遠程安裝文件夾的位置)對話框將出現,這用於定位用於遠程安裝的文件夾,這個文件夾不能建立在系統引導分區中,而且必須在NTFS5(或更高版本)的分區中。在選定用於遠程安裝的文件夾以後,單擊"下一步"以繼續。

4. 系統出現Initial Settings對話框,這里有兩個選項,可以選擇"Respond to Client Computers Requesting Service"來讓伺服器響應請求服務的客戶機。如果同時選擇了"Do not respond to unknown client computers",伺服器便不響應未知的客戶計算機。做出選擇之後,單擊"下一步"繼續。(這一步要注意:激活虛擬光碟機)
5. 系統將會出現Installation Source Files Location對話框,您需要使用這個步驟來制定Windows XP professional專業版分發文件的位置。單擊"下一步",繼續配置,出現Windows Installation Image Folder Name對話框,來確定Windows XP分發文件的文件夾名稱。完成此步驟後,點擊"下一步"繼續。
6. 系統出現"Friendly Description and Help Text"頁面,雖然您可以在這里指定名稱和幫助文本,但是,接受默認的Friendly Description以及Help Text看來是個更方便的方案。單擊"下一步"按鈕繼續。
7. 最後系統將會顯示Review Settings,回顧您所作的設置,檢查無誤後,單擊"完成"。
8. 完成後,系統會按照您指定的配置將安裝文件復制,幾分鍾內即可完成,最後,單擊"關閉"結束配置。 如下圖所示:

至此,完成遠程安裝服務的設置。
9. 完成配置伺服器的RIS之後,需要用DHCP管理器來驗證RIS伺服器並在RIS伺服器中。
(1)選擇開始->程序->管理工具->DHCP ,DHCP Manager將啟動,在框架左邊右鍵單擊您的DHCP伺服器,並從探出的菜單中選擇"Authorize"來驗證RIS伺服器。
驗證結果如下圖所示:
(3)選擇開始->程序->管理工具-> Active Directory活動目錄用戶和計算機,用右鍵單擊想要授權用戶在其中創建計算機賬號的域或者組織單元,系統會彈出菜單,選擇其中的"Delegate Control",在出現的Delegation of Control Wizard中,單擊"下一步",當出現用戶和組對話框時,單擊"添加…"按鈕,將出現選擇用戶、計算機或組的對話框,選中要使用RIS來安裝Windows的計算機用戶或組,單擊"添加…"按鈕,確認全部添加後,單擊"確定"回到Delegation of Control Wizard的用戶和組對話框,單擊"下一步"按鈕,繼續。
(4)在"Tasks to Delegate of Control"中選擇把計算機加入域(Join aComputer to a Domain)復選框,單擊"下一步"繼續。最後確認配置全部正確後,單擊完成。如下圖示:

四. 啟動Windows XP安裝程序
1. 在windows sever 2003系統中,進入組策略-用戶配置-windows設置-遠程安裝服務-選擇選項,雙擊選擇選項,對其設置如下:

2.啟動windows xp professional客戶計算機,並選擇按F12 進入遠程安裝界面。

3.Client Installation Wizard (CIW)被下載到客戶計算機,可以開始安裝Windows XP系統。在Logon對話框中,客戶機用戶必須登陸到域,從而選擇可用的映像來進行安裝。如下圖所示:

4. 然後按照需要選擇"自動安裝(Automatic Setup)"、"定製安裝(Custom Setup)"或者"重新啟動一個以前未完成的安裝"等。這樣,Windows XP安裝程序就成功啟動並開始進行安裝了。

二、
數字簽名原理是對原文做數字摘要和簽名並傳輸原文,在很多場合傳輸的原文是要求保密的,要求對原文進行加密的數字簽名方法如何實現?這里就要涉及到「數字信封」的概念。「電子信封」基本原理是將原文用對稱密鑰加密傳輸,而將對稱密鑰用收方公鑰加密發送給對方。收方收到電子信封,用自己的私鑰解密信封,取出對稱密鑰解密得原文。其詳細過程如下:
(1) 發方A將原文信息進行哈希運算,得一哈希值即數字摘要MD;
(2) 發方A用自己的私鑰PVA,採用非對稱RSA演算法,對數字摘要MD進行加密,即得數字簽名DS;
(3) 發方A用對稱演算法DES的對稱密鑰SK對原文信息、數字簽名SD及發方A證書的公鑰PBA採用對稱演算法加密,得加密信息E;
(4) 發方用收方B的公鑰PBB,採用RSA演算法對對稱密鑰SK加密,形成數字信封DE,就好像將對稱密鑰SK裝到了一個用收方公鑰加密的信封里;
(5) 發方A將加密信息E和數字信封DE一起發送給收方B;
(6) 收方B接受到數字信封DE後,首先用自己的私鑰PVB解密數字信封,取出對稱密鑰SK;
(7) 收方B用對稱密鑰SK通過DES演算法解密加密信息E,還原出原文信息、數字簽名SD及發方A證書的公鑰PBA;
(8) 收方B驗證數字簽名,先用發方A的公鑰解密數字簽名得數字摘要MD;
(9) 收方B同時將原文信息用同樣的哈希運算,求得一個新的數字摘要MD』;
(10)將兩個數字摘要MD和MD』進行比較,驗證原文是否被修改。如果二者相等,說明數據沒有被篡改,是保密傳輸的,簽名是真實的;否則拒絕該簽名。
這樣就做到了敏感信息在數字簽名的傳輸中不被篡改,未經認證和授權的人,看不見原數據,起到了在數字簽名傳輸中對敏感數據的保密作用。

㈡ docker 雲和 docker hub的區別

1. docker version
顯示 Docker 版本信息。
2. docker info
顯示 Docker 系統信息,包括鏡像和容器數。
3. docker search
docker search [options "o">] term
docker search -s django

從 Docker Hub 中搜索符合條件的鏡像。

--automated 只列出 automated build
類型的鏡像;

--no-trunc 可顯示完整的鏡像描述;

-s 40 列出收藏數不小於40的鏡像。

4. docker pull
docker pull [-a "o">] [user/ "o">]name[:tag "o">]
docker pull laozhu/telescope:latest

從 Docker Hub 中拉取或者更新指定鏡像。

-a 拉取所有 tagged 鏡像 。

5. docker login
root@moon:~# docker login
Username: username
Password: ****
Email: [email protected]
Login Succeeded

按步驟輸入在 Docker Hub 注冊的用戶名、密碼和郵箱即可完成登錄。
6. docker logout
運行後從指定伺服器登出,默認為官方伺服器。
7. docker images
docker images [options "o">] [name]

列出本地所有鏡像。其中 [name] 對鏡像名稱進行關鍵詞查詢。

-a 列出所有鏡像(含過程鏡像);

-f 過濾鏡像,如: -f ['dangling=true'] 只列出滿足
dangling=true 條件的鏡像;

--no-trunc 可顯示完整的鏡像ID;

-q 僅列出鏡像ID。

--tree 以樹狀結構列出鏡像的所有提交歷史。

8. docker ps
列出所有運行中容器。

-a 列出所有容器(含沉睡鏡像);

--before="nginx" 列出在某一容器之前創建的容器,接受容器名稱和ID作為參數;

--since="nginx" 列出在某一容器之後創建的容器,接受容器名稱和ID作為參數;

-f [exited=<int>] 列出滿足
exited=<int> 條件的容器;

-l 僅列出最新創建的一個容器;

--no-trunc 顯示完整的容器ID;

-n=4 列出最近創建的4個容器;

-q 僅列出容器ID;

-s 顯示容器大小。

9. docker rmi
docker rmi [options "o">] <image> "o">[image...]
docker rmi nginx:latest postgres:latest python:latest

從本地移除一個或多個指定的鏡像。

-f 強行移除該鏡像,即使其正被使用;

--no-prune 不移除該鏡像的過程鏡像,默認移除。

10. docker rm
docker rm [options "o">] <container> "o">[container...]
docker rm nginx-01 nginx-02 db-01 db-02
sudo docker rm -l /webapp/redis

-f 強行移除該容器,即使其正在運行;

-l 移除容器間的網路連接,而非容器本身;

-v 移除與容器關聯的空間。

11. docker history
docker history "o">[options] <image>

查看指定鏡像的創建歷史。

--no-trunc 顯示完整的提交記錄;

-q 僅列出提交記錄ID。

12. docker start|stop|restart
docker start|stop "p">|restart [options "o">] <container> "o">[container...]

啟動、停止和重啟一個或多個指定容器。

-a 待完成

-i 啟動一個容器並進入交互模式;

-t 10 停止或者重啟容器的超時時間(秒),超時後系統將殺死進程。

13. docker kill
docker kill "o">[options "o">] <container> "o">[container...]

殺死一個或多個指定容器進程。

-s "KILL" 自定義發送至容器的信號

14. docker events
docker events [options "o">]
docker events --since= "s2">"2010"
docker events --until= "s2">"20120310"

從伺服器拉取個人動態,可選擇時間區間。
15. docker save
docker save -i "debian.tar"
docker save > "debian.tar"

將指定鏡像保存成 tar 歸檔文件, docker load 的逆操作。保存後再載入(saved-loaded)的鏡像不會丟失提交歷史和層,可以回滾。

-o "debian.tar" 指定保存的鏡像歸檔。

16. docker load
docker load [options]
docker load < debian.tar
docker load -i "debian.tar"

從 tar 鏡像歸檔中載入鏡像, docker save 的逆操作。保存後再載入(saved-loaded)的鏡像不會丟失提交歷史和層,可以回滾。

-i "debian.tar" 指定載入的鏡像歸檔。

17. docker export
docker export <container>
docker export nginx-01 > export.tar

將指定的容器保存成 tar 歸檔文件, docker import 的逆操作。導出後導入(exported-imported))的容器會丟失所有的提交歷史,無法回滾。
18. docker import
docker import url|- "o">[repository[:tag "o">]]
cat export.tar "p">| docker import - imported-nginx:latest
docker import http://example.com/export.tar

從歸檔文件(支持遠程文件)創建一個鏡像, export 的逆操作,可為導入鏡像打上標簽。導出後導入(exported-imported))的容器會丟失所有的提交歷史,無法回滾。
19. docker top
docker top <running_container> "o">[ps options]

查看一個正在運行容器進程,支持 ps 命令參數。
20. docker inspect
docker instpect nginx:latest
docker inspect nginx-container

檢查鏡像或者容器的參數,默認返回 JSON 格式。

-f 指定返回值的模板文件。

21. docker pause
暫停某一容器的所有進程。
22. docker unpause
docker unpause <container>

恢復某一容器的所有進程。
23. docker tag
docker tag [options "o">] <image>[:tag "o">] [repository/ "o">][username/]name "o">[:tag]

標記本地鏡像,將其歸入某一倉庫。

-f 覆蓋已有標記。

24. docker push
docker push name[:tag "o">]
docker push laozhu/nginx:latest

將鏡像推送至遠程倉庫,默認為 Docker Hub 。
25. docker logs
docker logs [options "o">] <container>
docker logs -f -t --tail= "s2">"10" insane_babbage

獲取容器運行時的輸出日誌。

-f 跟蹤容器日誌的最近更新;

-t 顯示容器日誌的時間戳;

--tail="10" 僅列出最新10條容器日誌。

26. docker run
docker run [options "o">] <image> [ "nb">command] "o">[arg...]

啟動一個容器,在其中運行指定命令。

-a stdin 指定標准輸入輸出內容類型,可選 STDIN/
STDOUT / STDERR 三項;

-d 後台運行容器,並返回容器ID;

-i 以交互模式運行容器,通常與 -t 同時使用;

-t 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;

--name="nginx-lb" 為容器指定一個名稱;

--dns 8.8.8.8 指定容器使用的DNS伺服器,默認和宿主一致;

--dns-search example.com 指定容器DNS搜索域名,默認和宿主一致;

-h "mars" 指定容器的hostname;

-e username="ritchie" 設置環境變數;

--env-file=[] 從指定文件讀入環境變數;

--cpuset="0-2" or --cpuset="0,1,2"
綁定容器到指定CPU運行;

-c 待完成

-m 待完成

--net="bridge" 指定容器的網路連接類型,支持 bridge /
host / none
container:<name|id> 四種類型;

--link=[] 待完成

--expose=[] 待完成

㈢ 如何在Docker中使用Open vSwitch-Docker

你好,使用方法如下:
首先我們讓ovsdb-server監聽一個TCP埠:
ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640

接下來,啟動ovn-northd後台進程。這個進程負責將來自Docker的網路信息(存儲在OVN_Northbound 資料庫中)轉換成邏輯流存儲於OVN_Southbound資料庫。
/usr/share/openvswitch/scripts/ovn-ctl start_northd

2、一次性配置
在每一個你打算創建容器的主機上,你需要運行以下的命令(如果你的OVS資料庫被清空,你需要再次運行這個命令。除此之外,重復運行這個命令都是沒有任何影響的)。
其他的主機可以通過$LOCAL_IP地址來訪問到這個主機,它就相當於本地通道的端點。
$ENCAP_TYPE是指用戶想使用的通道的類型。它可以是」geneve「或者」stt「。(注意,你的內核需要支持以上兩個類型,用戶可以通過運行以下命令來檢測內核是否支持以上類型:"llsmod | grep $ENCAP_TYPE")。
ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:$CENTRAL_IP:6640" external_ids:ovn-encap-ip=$LOCAL_IP external_ids:ovn-encap-type="$ENCAP_TYPE"

最後,啟動ovn-controller(你需要在每一次啟動時運行以下命令):
/usr/share/openvswitch/scripts/ovn-ctl start_controller

3、啟動Open vSwitch網路驅動
在默認情況下,Docker使用Linux網橋,但它支持外擴展。為了替換Linux網橋,我們需要先啟動Open vSwitch驅動。
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API請求。因此,用戶需要先安裝Python 的Flask模塊。
easy_install -U pip pip install Flask

在每一個你想要創建容器的主機上啟動Open vSwitch驅動:
ovn-docker-overlay-driver --detach

Docker內部包含了一些模塊,這些模塊擁有類似於OVN的邏輯交換機和邏輯埠的概念。請讀者仔細閱讀Docker的文檔來查找相關的命令。這里我們給出了一些案例:
1)創建用戶自己的邏輯交換機
下面的命令創建了一個名為」foo「的邏輯交換機,它的網段為」192.168.1.0/24」:
NID=`docker network create -d openvswitch --subnet=192.168.1.0/24 foo`

2)顯示已有邏輯交換機
docker network ls

你也可以通過以下命令從OVN的northbound資料庫中查找到這個邏輯交換機:
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list

3)Docker創建邏輯埠,並且將這個埠附加到邏輯網路上
比如說,將一個邏輯埠添加到容器busybox的「foo」網路上:
docker run -itd --net=foo --name=busybox busybox

4)顯示所有的邏輯埠
Docker現在並沒有一個CLI命令來羅列所有的邏輯埠,但是你可以從OVN的資料庫中找到它們:
ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID

5)用戶也可以創建一個邏輯埠,並將它添加到一個運行中的容器上:
docker network create -d openvswitch --subnet=192.168.2.0/24 bar docker network connect bar busybox

用戶可以刪除邏輯埠,或者將它們從運行容器上分離出來:
docker network disconnect bar busybox

6)用戶也可以刪除邏輯交換機:
docker network rm bar

㈣ 如何在Docker中使用Open vSwitch-Harries Blog64

Docker 1.9.0開始支持多主機網路(multi-host networking)。我們可以通過OVNOpen vSwitch virtual network)來將Docker的網路和Open vSwitch結合起來。

簡介

對於OVN和Docker的多主機網路(multi-host networking),Docker需要分布式鍵值對存儲的支持。假設我們這里採用consul來提供分布式鍵值對存儲,並且你的主機IP地址為$HOST_IP。用戶可以使用下面的命令來啟動Docker進程:
docker daemon --cluster-store=consul://127.0.0.1:8500 /
--cluster-advertise=$HOST_IP:0

OVN為容器提供了網路虛擬化技術。OVN和Docker的結合使用存在兩種模式—underlay模式和overlay模式。

在underlay模式下,OVN要求配置OpenStack來提供容器網路。在這個模式下,用戶可以創建邏輯網路,並且讓運行在虛擬機中的容器、獨立的虛擬機(沒有容器運行在其中)和物理機器連接到同一個邏輯網路上。這是一種多租戶、多主機的解決辦法。

在overlay模式下,OVN可以為運行跨主機的容器們提供一個邏輯網路。這是一種單租戶(是否能擴展到多租戶取決於安全特性)、多主機的解決辦法。在這種模式下,你並不需要預創建好的OpenStack。

值得注意的是,用戶必須在他想要運行容器的虛擬機或主機上安裝並運行Open vSwitch。

Overlay 模式

Overlay模式下,需要Open vSwitch 2.5版本或後續版本的支持。

啟動核心模塊
OVN架構中會有一個核心的模塊來存儲網路信息。因此你需要在你其中一台主機(IP地址為$CENTRAL_IP,並且已經安裝和啟動了Open vSwitch)上啟動相關的核心服務。
首先我們讓ovsdb-server監聽一個TCP埠:

ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640

接下來,啟動ovn-northd後台進程。這個進程負責將來自Docker的網路信息(存儲在OVN_Northbound 資料庫中)轉換成邏輯流存儲於OVN_Southbound資料庫。

/usr/share/openvswitch/scripts/ovn-ctl start_northd

一次性配置
在每一個你打算創建容器的主機上,你需要運行以下的命令(如果你的OVS資料庫被清空,你需要再次運行這個命令。除此之外,重復運行這個命令都是沒有任何影響的)。
其他的主機可以通過$LOCAL_IP地址來訪問到這個主機,它就相當於本地通道的端點。
$ENCAP_TYPE是指用戶想使用的通道的類型。它可以是」geneve「或者」stt「。(注意,你的內核需要支持以上兩個類型,用戶可以通過運行以下命令來檢測內核是否支持以上類型:「lsmod | grep $ENCAP_TYPE")

ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:$CENTRAL_IP:6640"
external_ids:ovn-encap-ip=$LOCAL_IP external_ids:ovn-encap-type="$ENCAP_TYPE"

最後,啟動ovn-controller(你需要在每一次啟動時運行以下命令):

/usr/share/openvswitch/scripts/ovn-ctl start_controller

啟動Open vSwitch網路驅動
在默認情況下,Docker使用Linux網橋,但它支持外擴展。為了替換Linux網橋,我們需要先啟動Open vSwitch驅動。
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API請求。因此,用戶需要先安裝Python 的Flask模塊。

easy_install -U pip
pip install Flask

在每一個你想要創建容器的主機上啟動Open vSwitch驅動:

ovn-docker-overlay-driver --detach

Docker內部包含了一些模塊,這些模塊擁有類似於OVN的邏輯交換機和邏輯埠的概念。請讀者仔細閱讀Docker的文檔來查找相關的命令。這里我們給出了一些案例:

NID=`docker network create -d openvswitch --subnet=192.168.1.0/24 foo`

docker network ls

你也可以通過以下命令從OVN的northbound資料庫中查找到這個邏輯交換機:

ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lswitch-list

docker run -itd --net=foo --name=busybox busybox

ovn-nbctl --db=tcp:$CENTRAL_IP:6640 lport-list $NID

docker network create -d openvswitch --subnet=192.168.2.0/24 bar
docker network connect bar busybox

用戶可以刪除邏輯埠,或者將它們從運行容器上分離出來:

docker network disconnect bar busybox

docker network rm bar

Underlay模式

在這個模式下,OVN要求用戶預安裝好OpenStack。
用戶也可以刪除邏輯交換機:
用戶也可以創建一個邏輯埠,並將它添加到一個運行中的容器上:

顯示所有的邏輯埠

Docker現在並沒有一個CLI命令來羅列所有的邏輯埠,但是你可以從OVN的資料庫中找到它們:

Docker創建邏輯埠,並且將這個埠附加到邏輯網路上

比如說,將一個邏輯埠添加到容器busybox的「foo」網路上:

顯示已有邏輯交換機

創建用戶自己的邏輯交換機

下面的命令創建了一個名為」foo「的邏輯交換機,它的網段為」192.168.1.0/24」:

一次性配置
一個OpenStack的租戶創建了一個虛擬機,這個虛擬機擁有單張或多張網卡。如果租戶想要發送虛擬機中容器的網路包,他需要獲取這些網卡的port-id。port-id可以通過以下命令獲得:

nova list

然後運行:

neutron port-list --device_id=$id

在虛擬機中,下載OpenStack的RC文件,這些文件包含了租戶的信息(我們用openrc.sh來指代它)。編輯這個文件,並且將之前獲取到的port-id以 export OS_VIF_ID=$port-id的格式加入到文件中。文件的內容如下:

!/bin/bash

export OS_AUTH_URL=http://10.33.75.122:5000/v2.0
export OS_TENANT_ID=
export OS_TENANT_NAME="demo"
export OS_USERNAME="demo"
export OS_VIF_ID=e798c371-85f4-4f2d-ad65-d09dd1d3c1c9
創建Open vSwitch網橋
如果用戶的虛擬機只有一個乙太網介面(比如說eth0),你需要將這個設備作為一個埠加入到Open vSwitch的」breth0」網橋上,並且移除它的IP地址,將其他相關的信息轉移到這個網橋上。(如果有多個網路介面,用戶自己創建Open vSwitch網橋,並且添加介面到網橋上)
如果你使用DHCP來獲取IP地址,你需要關閉監聽eth0的DHCP客戶端,並且開啟一個監聽Open vSwitch breth0網橋的DHCP客戶端。
你可以讓以上的步驟持久化,比如說你的虛擬機是Debian/Ubuntu,你可以參考 openvswitch-switch.README.Debian,如果你的虛擬機基於RHEL,你可以閱讀 README.RHEL完成持久化。
開啟Open vSwitch網路驅動
Open vSwitch驅動使用了Python Flask模塊來監聽Docker的網路API調用。這個驅動還使用了OpenStack的python-neutronclient庫。因此,如果你的主機還沒有安裝Python Flask或者python-neutronclient,你需要使用以下命令來安裝:

easy_install -U pip
pip install python-neutronclient
pip install Flask

運行openrc文件:

../openrc.sh

開啟網路驅動,並且提供OpenStack租戶的密碼:

ovn-docker-underlay-driver --bridge breth0 --detach

從現在開始,你可以使用和overlay模式類似的Docker命令了。請閱讀「man ovn-architecture」來理解OVN的技術細節。

㈤ 請求Servlet時,部署Servlet的容器要執行哪些步驟

Servlet的生命周期是由servlet的容器來控制的。
分為3個階段:初始化階段、運行階段、銷毀階段。
一、初始化階段:

a Servlet容器載入servlet類,把它的.Class文件中的數據讀到內存中。
b Servlet容器創建servletConfig對象。servletConfig對象包含了servlet的初始化配置信息。此外 servlet容器還會使得servletConfig對象與當前的web應用的servletContext對象關聯。
c Servlet容器創建servlet對象。
d Servlet容器調用servlet對象的init(ServletConfig config)方法。

(2)在web.xml文件中為servlet設置了<load-on-startup>元素
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>servlet.servlet1</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
說明:
在servlet的配置當中,<load-on-startup>5</load-on-startup>的含義是:
標記容器是否在啟動的時候就載入這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才載入。
正數的值越小,啟動該servlet的優先順序越高。

(3) 當web應用被重新啟動時,web應用中的所有servlet會在特定的時間被重新初始化。

二、運行階段
在這個階段sevlet可以隨時響應客戶端的請求。當servlet容器接到訪問特定的servlet請求時,servlet容器會創建針對與這個請求的servletRequest和servletResponse對象,然後調用service()方法,並把這兩個對象當做參數傳遞給service()方法。Service()方法通過servletRequest對象獲得請求信息,並處理該請求,再通過servletResponse對象生成響應結果。

【不管是post還是get方法提交,都會在service中處理,然後,由service來交由相應的doPost或doGet方法處理,如果你重寫了service方法,就不會再處理doPost或doGet了,如果重寫sevice()方法,可以自己轉向doPost()或doGet()方法】

註:當servlet容器把servlet生成的響應結果發送給客戶後,servlet容器會銷毀servletRequest和sevletResponse對象。

三、銷毀階段
當Web應用被終止時,servlet容器會先調用web應用中所有的servlet對象的destroy()方法,然後在銷毀servlet對象。此外容器還會銷毀與servlet對象關聯的servletConfig對象。
在destroy()方法的實現中,可以釋放servlet所佔用的資源。如關閉文件輸入輸出流,關閉與資料庫的連接。

註:sevlet的生命周期中,servlet的初始化和銷毀只會發生一次,因此init()和destroy()方法只能被servlet容器調用一次,而service()方法取決與servlet被客戶端訪問的次數。

㈥ 如何安裝配置Active Directory

1、在開始菜單中依次單擊「管理工具」→「配置您的伺服器向導」菜單項。

㈦ docker run 和網路有關嗎

在Docker中,run應該是用戶使用最多的命令了,很多讀者反饋不是很明白run命令的用法,而且相關的書籍、中文資料中對run命令的描述也不是非常完整,所以DockerOne組織翻譯了Docker官方的文檔,以饗讀者。注意,本文基於最新的Docker 1.4文檔翻譯。

Docker會在隔離的容器中運行進程。當運行 docker run命令時,Docker會啟動一個進程,並為這個進程分配其獨占的文件系統、網路資源和以此進程為根進程的進程組。在容器啟動時,鏡像可能已經定義了要運行的二進制文件、暴露的網路埠等,但是用戶可以通過docker run命令重新定義(譯者註:docker run可以控制一個容器運行時的行為,它可以覆蓋docker build在構建鏡像時的一些默認配置),這也是為什麼run命令相比於其它命令有如此多的參數的原因。

命令格式
最基本的docker run命令的格式如下:
$ sudo docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

如果需要查看[OPTIONS]的詳細使用說明,請參考Docker關於OPTIONS的章節。這里僅簡要介紹Run所使用到的參數。OPTIONS總起來說可以分為兩類:

設置運行方式:
決定容器的運行方式,前台執行還是後台執行;
設置containerID;
設置網路參數;
設置容器的CPU和內存參數;
- 設置許可權和LXC參數;
設置鏡像的默認資源,也就是說用戶可以使用該命令來覆蓋在鏡像構建時的一些默認配置。

docker run [OPTIONS]可以讓用戶完全控制容器的生命周期,並允許用戶覆蓋執行docker build時所設定的參數,甚至也可以修改本身由Docker所控制的內核級參數。

Operator exclusive options
當執行docker run時可以設置以下參數:

Detached vs Foreground
Detached (-d)
- Foreground
Container Identification
Name (--name)
- PID Equivalent
IPC Setting
Network Settings
Clean Up (--rm)
Runtime Constraints on CPU and Memory
Runtime Privilege, Linux Capabilities, and LXC Configuration

接下來我們依次進行介紹。

Detached vs foreground

當我們啟動一個容器時,首先需要確定這個容器是運行在前台還是運行在後台。
-d=false: Detached mode: Run container in the background, print new container id

Detached (-d)

如果在docker run後面追加-d=true或者-d,那麼容器將會運行在後台模式。此時所有I/O數據只能通過網路資源或者共享卷組來進行交互。因為容器不再監聽你執行docker run的這個終端命令行窗口。但你可以通過執行docker attach來重新附著到該容器的回話中。需要注意的是,容器運行在後台模式下,是不能使用--rm選項的。

Foregroud
在前台模式下(不指定-d參數即可),Docker會在容器中啟動進程,同時將當前的命令行窗口附著到容器的標准輸入、標准輸出和標准錯誤中。也就是說容器中所有的輸出都可以在當前窗口中看到。甚至它都可以虛擬出一個TTY窗口,來執行信號中斷。這一切都是可以配置的:
-a=[] : Attach to `STDIN`, `STDOUT` and/or `STDERR`
-t=false : Allocate a pseudo-tty
--sig-proxy=true: Proxify all received signal to the process (non-TTY mode only)
-i=false : Keep STDIN open even if not attached

如果在執行run命令時沒有指定-a參數,那麼Docker默認會掛載所有標准數據流,包括輸入輸出和錯誤,你可以單獨指定掛載哪個標准流。
$ sudo docker run -a stdin -a stdout -i -t ubuntu /bin/bash

如果要進行互動式操作(例如Shell腳本),那我們必須使用-i -t參數同容器進行數據交互。但是當通過管道同容器進行交互時,就不需要使用-t參數,例如下面的命令:
echo test | docker run -i busybox cat

容器識別

Name(--name)

可以通過三種方式為容器命名:

1. 使用UUID長命名("")
2. 使用UUID短命令("f78375b1c487")
3. 使用Name("evil_ptolemy")

這個UUID標示是由Docker deamon生成的。如果你在執行docker run時沒有指定--name,那麼deamon會自動生成一個隨機字元串UUID。但是對於一個容器來說有個name會非常方便,當你需要連接其它容器時或者類似需要區分其它容器時,使用容器名稱可以簡化操作。無論容器運行在前台或者後台,這個名字都是有效的。

PID equivalent

如果在使用Docker時有自動化的需求,你可以將containerID輸出到指定的文件中(PIDfile),類似於某些應用程序將自身ID輸出到文件中,方便後續腳本操作。
--cidfile="": Write the container ID to the file

Image[:tag]

當一個鏡像的名稱不足以分辨這個鏡像所代表的含義時,你可以通過tag將版本信息添加到run命令中,以執行特定版本的鏡像。例如: docker run ubuntu:14.04

IPC Settings

默認情況下,所有容器都開啟了IPC命名空間。
--ipc="" : Set the IPC mode for the container,
'container:<name|id>': reuses another container's IPC namespace
'host': use the host's IPC namespace inside the container

IPC(POSIX/SysV IPC)命名空間提供了相互隔離的命名共享內存、信號燈變數和消息隊列。

共享內存可以提高進程數據的交互速度。共享內存一般用在資料庫和高性能應用(C/OpenMPI、C++/using boost libraries)上或者金融服務上。如果需要容器中部署上述類型的應用,那麼就應該在多個容器直接使用共享內存了。

Network settings

默認情況下,所有的容器都開啟了網路介面,同時可以接受任何外部的數據請求。
--dns=[] : Set custom dns servers for the container
--net="bridge" : Set the Network mode for the container
'bridge': creates a new network stack for the container on the docker bridge
'none': no networking for this container
'container:<name|id>': reuses another container network stack
'host': use the host network stack inside the container
--add-host="" : Add a line to /etc/hosts (host:IP)
--mac-address="" : Sets the container's Ethernet device's MAC address

你可以通過docker run --net none來關閉網路介面,此時將關閉所有網路數據的輸入輸出,你只能通過STDIN、STDOUT或者files來完成I/O操作。默認情況下,容器使用主機的DNS設置,你也可以通過--dns來覆蓋容器內的DNS設置。同時Docker為容器默認生成一個MAC地址,你可以通過--mac-address 12:34:56:78:9a:bc來設置你自己的MAC地址。

Docker支持的網路模式有:

none。關閉容器內的網路連接
bridge。通過veth介面來連接容器,默認配置。
host。允許容器使用host的網路堆棧信息。 注意:這種方式將允許容器訪問host中類似D-BUS之類的系統服務,所以認為是不安全的。
container。使用另外一個容器的網路堆棧信息。
None模式

將網路模式設置為none時,這個容器將不允許訪問任何外部router。這個容器內部只會有一個loopback介面,而且不存在任何可以訪問外部網路的router。

Bridge模式

Docker默認會將容器設置為bridge模式。此時在主機上面將會存在一個docker0的網路介面,同時會針對容器創建一對veth介面。其中一個veth介面是在主機充當網卡橋接作用,另外一個veth介面存在於容器的命名空間中,並且指向容器的loopback。Docker會自動給這個容器分配一個IP,並且將容器內的數據通過橋接轉發到外部。

Host模式

當網路模式設置為host時,這個容器將完全共享host的網路堆棧。host所有的網路介面將完全對容器開放。容器的主機名也會存在於主機的hostname中。這時,容器所有對外暴露的埠和對其它容器的連接,將完全失效。

Container模式

當網路模式設置為Container時,這個容器將完全復用另外一個容器的網路堆棧。同時使用時這個容器的名稱必須要符合下面的格式:--net container:<name|id>.

比如當前有一個綁定了本地地址localhost的Redis容器。如果另外一個容器需要復用這個網路堆棧,則需要如下操作:
$ sudo docker run -d --name redis example/redis --bind 127.0.0.1
$ # use the redis container's network stack to access localhost
$ sudo docker run --rm -ti --net container:redis example/redis-cli -h 127.0.0.1

管理/etc/hosts
/etc/hosts文件中會包含容器的hostname信息,我們也可以使用--add-host這個參數來動態添加/etc/hosts中的數據。
$ /docker run -ti --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts
172.17.0.22 09d03f76bf2c
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
86.75.30.9 db-static

Clean up (--rm)

默認情況下,每個容器在退出時,它的文件系統也會保存下來,這樣一方面調試會方便些,因為你可以通過查看日誌等方式來確定最終狀態。另外一方面,你也可以保存容器所產生的數據。但是當你僅僅需要短暫的運行一個容器,並且這些數據不需要保存,你可能就希望Docker能在容器結束時自動清理其所產生的數據。

這個時候你就需要--rm這個參數了。 注意:--rm 和 -d不能共用!
--rm=false: Automatically remove the container when it exits (incompatible with -d)

Security configuration
--security-opt="label:user:USER" : Set the label user for the container
--security-opt="label:role:ROLE" : Set the label role for the container
--security-opt="label:type:TYPE" : Set the label type for the container
--security-opt="label:level:LEVEL" : Set the label level for the container
--security-opt="label:disable" : Turn off label confinement for the container
--secutity-opt="apparmor:PROFILE" : Set the apparmor profile to be applied to the container

你可以通過--security-opt修改容器默認的schema標簽。比如說,對於一個MLS系統來說(譯者註:MLS應該是指Multiple Listing System),你可以指定MCS/MLS級別。使用下面的命令可以在不同的容器間分享內容:
#docker run --security-opt label:level:s0:c100,c200 -i -t fedora bash

如果是MLS系統,則使用下面的命令:
# docker run --security-opt label:level:TopSecret -i -t rhel7 bash

使用下面的命令可以在容器內禁用安全策略:
# docker run --security-opt label:disable -i -t fedora bash

如果你需要在容器內執行更為嚴格的安全策略,那麼你可以為這個容器指定一個策略替代,比如你可以使用下面的命令來指定容器只監聽Apache埠:
# docker run --security-opt label:type:svirt_apache_t -i -t centos bash

注意:此時,你的主機環境中必須存在一個名為svirt_apache_t的安全策略。

Runtime constraints on CPU and memory

下面的參數可以用來調整容器內的性能。
-m="": Memory limit (format: <number><optional unit>, where unit = b, k, m or g)
-c=0 : CPU shares (relative weight)

通過docker run -m可以調整容器所使用的內存資源。如果主機支持swap內存,那麼可以使用-m可以設定比主機物理內存還大的值。

同樣,通過-c可以調整容器的CPU優先順序。默認情況下,所有的容器擁有相同的CPU優先順序和CPU調度周期,但你可以通過Docker來通知內核給予某個或某幾個容器更多的CPU計算周期。

比如,我們使用-c或者--cpu-shares =0啟動了C0、C1、C2三個容器,使用-c/--cpu-shares=512啟動了C3容器。這時,C0、C1、C2可以100%的使用CPU資源(1024),但C3隻能使用50%的CPU資源(512)。如果這個主機的操作系統是時序調度類型的,每個CPU時間片是100微秒,那麼C0、C1、C2將完全使用掉這100微秒,而C3隻能使用50微秒。

Runtime privilege, Linux capabilities, and LXC configuration
--cap-add: Add Linux capabilities
--cap-drop: Drop Linux capabilities
--privileged=false: Give extended privileges to this container
--device=[]: Allows you to run devices inside the container without the --privileged flag.
--lxc-conf=[]: (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"

默認情況下,Docker的容器是沒有特權的,例如不能在容器中再啟動一個容器。這是因為默認情況下容器是不能訪問任何其它設備的。但是通過"privileged",容器就擁有了訪問任何其它設備的許可權。

當操作者執行docker run --privileged時,Docker將擁有訪問主機所有設備的許可權,同時Docker也會在apparmor或者selinux做一些設置,使容器可以容易的訪問那些運行在容器外部的設備。你可以訪問Docker博客來獲取更多關於--privileged的用法。

同時,你也可以限制容器只能訪問一些指定的設備。下面的命令將允許容器只訪問一些特定設備:
$ sudo docker run --device=/dev/snd:/dev/snd ...

默認情況下,容器擁有對設備的讀、寫、創建設備文件的許可權。使用:rwm來配合--device,你可以控制這些許可權。
$ sudo docker run --device=/dev/sda:/dev/xvdc --rm -it ubuntu fdisk /dev/xvdc

Command (m for help): q
$ sudo docker run --device=/dev/sda:/dev/xvdc:r --rm -it ubuntu fdisk /dev/xvdc
You will not be able to write the partition table.

Command (m for help): q

$ sudo docker run --device=/dev/sda:/dev/xvdc:w --rm -it ubuntu fdisk /dev/xvdc
crash....

$ sudo docker run --device=/dev/sda:/dev/xvdc:m --rm -it ubuntu fdisk /dev/xvdc
fdisk: unable to open /dev/xvdc: Operation not permitted

使用--cap-add和--cap-drop,配合--privileged,你可以更細致的控制人哦怒氣。默認使用這兩個參數的情況下,容器擁有一系列的內核修改許可權,這兩個參數都支持all值,如果你想讓某個容器擁有除了MKNOD之外的所有內核許可權,那麼可以執行下面的命令:
$ sudo docker run --cap-add=ALL --cap-drop=MKNOD ...

如果需要修改網路介面數據,那麼就建議使用--cap-add=NET_ADMIN,而不是使用--privileged。
$ docker run -t -i --rm ubuntu:14.04 ip link add mmy0 type mmy
RTNETLINK answers: Operation not permitted
$ docker run -t -i --rm --cap-add=NET_ADMIN ubuntu:14.04 ip link add mmy0 type mmy

如果要掛載一個FUSE文件系統,那麼就需要--cap-add和--device了。
$ docker run --rm -it --cap-add SYS_ADMIN sshfs sshfs [email protected]:/home/sven /mnt
fuse: failed to open /dev/fuse: Operation not permitted
$ docker run --rm -it --device /dev/fuse sshfs sshfs [email protected]:/home/sven /mnt
fusermount: mount failed: Operation not permitted
$ docker run --rm -it --cap-add SYS_ADMIN --device /dev/fuse sshfs
# sshfs [email protected]:/home/sven /mnt
The authenticity of host '10.10.10.20 (10.10.10.20)' can't be established.
ECDSA key fingerprint is 25:34:85:75:25:b0:17:46:05:19:04:93:b5:dd:5f:c6.
Are you sure you want to continue connecting (yes/no)? yes
[email protected]'s password:
root@30aa0cfaf1b5:/# ls -la /mnt/src/docker
total 1516
drwxrwxr-x 1 1000 1000 4096 Dec 4 06:08 .
drwxrwxr-x 1 1000 1000 4096 Dec 4 11:46 ..
-rw-rw-r-- 1 1000 1000 16 Oct 8 00:09 .dockerignore
-rwxrwxr-x 1 1000 1000 464 Oct 8 00:09 .drone.yml
drwxrwxr-x 1 1000 1000 4096 Dec 4 06:11 .git
-rw-rw-r-- 1 1000 1000 461 Dec 4 06:08 .gitignore

如果Docker守護進程在啟動時選擇了lxc lxc-driver(docker -d --exec-driver=lxc),那麼就可以使用--lxc-conf來設定LXC參數。但需要注意的是,未來主機上的Docker deamon有可能不會使用LXC,所以這些參數有可能會包含一些沒有實現的配置功能。這意味著,用戶在操作這些參數時必須要十分熟悉LXC。

特別注意:當你使用--lxc-conf修改容器參數後,Docker deamon將不再管理這些參數,那麼用戶必須自行進行管理。比如說,你使用--lxc-conf修改了容器的IP地址,那麼在/etc/hosts裡面是不會自動體現的,需要你自行維護。

Overriding Dockerfile image defaults

當開發者使用Dockerfile進行build或者使用commit提交容器時,開發人員可以設定一些鏡像默認參數。

㈧ 易邁雲數據中心採用的容器能夠支持什麼類型的網路呢

它不僅僅能夠支持私有網路、共享IP網路、獨享IP網路三種形式,還支持NAT網關,是非常靈活的。

㈨ 如何系統地學習 Docker

Hi, 今天我們將會學習如何使用 Weave 和 Docker 搭建 Nginx 的反向代理/負載均衡伺服器。Weave 可以創建一個虛擬網路將 Docker 容器彼此連接在一起,支持跨主機部署及自動發現。它可以讓我們更加專注於應用的開發,而不是基礎架構。Weave 提供了一個如此棒的環境,彷彿它的所有容器都屬於同個網路,不需要埠/映射/連接等的配置。容器中的應用提供的服務在 weave 網路中可以輕易地被外部世界訪問,不論你的容器運行在哪裡。在這個教程里我們將會使用 weave 快速並且簡單地將 nginx web 伺服器部署為一個負載均衡器,反向代理一個運行在 Amazon Web Services 裡面多個節點上的 docker 容器中的簡單 php 應用。這里我們將會介紹 WeaveDNS,它提供一個不需要改變代碼就可以讓容器利用主機名找到的簡單方式,並且能夠讓其他容器通過主機名連接彼此。 在這篇教程里,我們將使用 nginx 來將負載均衡分配到一個運行 Apache 的容器集合。最簡單輕松的方法就是使用 Weave 來把運行在 ubuntu 上的 docker 容器中的 nginx 配置成負載均衡伺服器。 Docker之weave工具 weave是什麼呢?weave創建了一個虛擬網路,用來連接部署在多台機器上的docker容器。 下面看看weave的應用場景: 應用在使用該網路的時候就像所有的容器都在同一個交換機網路下一樣,不需要配置埠映射、連接等等,容器中的應用提供的服務在weaver網路中可以被外部世界訪問,不論你的容器運行在哪裡。同樣的,已經存在的系統應用也可以暴露給容器中的應用來調用,而不用擔心內部應用運行的位置。 weave可以穿透防火牆,流量是被加密的,允許主機連接通過一個不被信任的網路,使用weave你可以方便的部署多個容器在不同的地方運行 假如你有一個docker應用運行在兩台不同的主機HOST1和HOST2上面,也就是我們要在這兩台主機上各部署一個相同類型的docker應用。 在HOST1上面:啟動weave 代碼如下: #這一步先啟動weave路由,需要在每一台HOST上都啟動 weave launch #啟動一個容器,在命令行設置了一個ip,weave run調用docker run -d,因此我們可以使用這種辦法啟動一個容器,同理存在weave start命令,它是調用docker start命令啟動已經存在的容器,如果我們在該HOST1上有多個容器要部署,則繼續執行第二行的命令即可,只要保證容器設置的ip沒有沖突即可,同一個網段的ip可以到處使用 ssh=$(weave run 10/weaveworks/guides $ cd weave-gs/aws-nginx-ubuntu-simple 在克隆完倉庫之後,我們執行下面的腳本,這個腳本將會部署兩個 t1.micro 實例,每個實例中都是 ubuntu 作為操作系統並用 weave 跑著 docker 容器。 復制代碼 代碼如下: $ sudo ./demo-aws-setup.sh 在這里,我們將會在以後用到這些實例的 IP 地址。這些地址儲存在一個 weavedemo.env 文件中,這個文件創建於執行 demo-aws-setup.sh 腳本期間。為了獲取這些 IP 地址,我們需要執行下面的命令,命令輸出類似下面的信息。 代碼如下: $ cat weavedemo.env export WEAVE_AWS_DEMO_HOST1=52.26.175.175 export WEAVE_AWS_DEMO_HOST2=52.26.83.141 export WEAVE_AWS_DEMO_HOSTCOUNT=2 export WEAVE_AWS_DEMO_HOSTS=(52.26.175.175 52.26.83.141) 請注意這些不是固定的 IP 地址,AWS 會為我們的實例動態地分配 IP 地址。 我們在 bash 下執行下面的命令使環境變數生效。 代碼如下: . ./weavedemo.env 2. 啟動 Weave 和 WeaveDNS 在安裝完實例之後,我們將會在每台主機上啟動 weave 以及 weavedns。Weave 以及 weavedns 使得我們能夠輕易地將容器部署到一個全新的基礎架構以及配置中, 不需要改變代碼,也不需要去理解像 Ambassador 容器以及 Link 機制之類的概念。下面是在第一台主機上啟動 weave 以及 weavedns 的命令。 代碼如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1 $ sudo weave launch $ sudo weave launch-dns 10.2.1.1/24 下一步,我也准備在第二台主機上啟動 weave 以及 weavedns。 代碼如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2 $ sudo weave launch $WEAVE_AWS_DEMO_HOST1 $ sudo weave launch-dns 10.2.1.2/24 3. 啟動應用容器 現在,我們准備跨兩台主機啟動六個容器,這兩台主機都用 Apache2 Web 服務實例跑著簡單的 php 網站。為了在第一個 Apache2 Web 伺服器實例跑三個容器, 我們將會使用下面的命令。 復制代碼 代碼如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1 $ sudo weave run --with-dns 10.3.1.1/24 -h ws1.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.2/24 -h ws2.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.3/24 -h ws3.weave.local fintanr/weave-gs-nginx-apache 在那之後,我們將會在第二個實例上啟動另外三個容器,請使用下面的命令。 代碼如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST2 $ sudo weave run --with-dns 10.3.1.4/24 -h ws4.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.5/24 -h ws5.weave.local fintanr/weave-gs-nginx-apache $ sudo weave run --with-dns 10.3.1.6/24 -h ws6.weave.local fintanr/weave-gs-nginx-apache 注意: 在這里,--with-dns 選項告訴容器使用 weavedns 來解析主機名,-h x.weave.local 則使得 weavedns 能夠解析該主機。 4. 啟動 Nginx 容器 在應用容器如預期的運行後,我們將會啟動 nginx 容器,它將會在六個應用容器服務之間輪詢並提供反向代理或者負載均衡。 為了啟動 nginx 容器,請使用下面的命令。 復制代碼 代碼如下: ssh -i weavedemo-key.pem ubuntu@$WEAVE_AWS_DEMO_HOST1 $ sudo weave run --with-dns 10.3.1.7/24 -ti -h nginx.weave.local -d -p 80:80 fintanr/weave-gs-nginx-simple 因此,我們的 nginx 容器在 $WEAVEAWSDEMO_HOST1 上公開地暴露成為一個 http 伺服器。 5. 測試負載均衡伺服器 為了測試我們的負載均衡伺服器是否可以工作,我們執行一段可以發送 http 請求給 nginx 容器的腳本。我們將會發送6個請求,這樣我們就能看到 nginx 在一次的輪詢中服務於每台 web 伺服器之間。 代碼如下: $ ./access-aws-hosts.sh { "message" : "Hello Weave - nginx example", "hostname" : "ws1.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws2.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws3.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws4.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws5.weave.local", "date" : "2015-06-26 12:24:23" } { "message" : "Hello Weave - nginx example", "hostname" : "ws6.weave.local", "date" : "2015-06-26 12:24:23" } 結束語 我們最終成功地將 nginx 配置成一個反向代理/負載均衡伺服器,通過使用 weave 以及運行在 AWS(Amazon Web Service)EC2 裡面的 ubuntu 伺服器中的 docker。從上面的步驟輸出可以清楚的看到我們已經成功地配置了 nginx。我們可以看到請求在一次輪詢中被發送到6個應用容器,這些容器在 Apache2 Web 伺服器中跑著 PHP 應用。在這里,我們部署了一個容器化的 PHP 應用,使用 nginx 橫跨多台在 AWS EC2 上的主機而不需要改變代碼,利用 weavedns 使得每個容器連接在一起,只需要主機名就夠了,眼前的這些便捷, 都要歸功於 weave 以及 weavedns。

㈩ 常見的容器安全威脅有哪些

以Docker 容器的安全問題為例

(1) Docker 自身安全

Docker 作為一款容器引擎,本身也會存在一些安全漏洞,CVE 目前已經記錄了多項與 Docker 相關的安全漏洞,主要有許可權提升、信息泄露等幾類安全問題。

(2) 鏡像安全

由於Docker 容器是基於鏡像創建並啟動,因此鏡像的安全直接影響到容器的安全。具體影響鏡像安全的總結如下。

鏡像軟體存在安全漏洞:由於容器需要安裝基礎的軟體包,如果軟體包存在漏洞,則可能會被不法分子利用並且侵入容器,影響其他容器或主機安全。

倉庫漏洞:無論是Docker 官方的鏡像倉庫還是我們私有的鏡像倉庫,都有可能被攻擊,然後篡改鏡像,當我們使用鏡像時,就可能成為攻擊者的目標對象。

用戶程序漏洞:用戶自己構建的軟體包可能存在漏洞或者被植入惡意腳本,這樣會導致運行時提權影響其他容器或主機安全。

(3) Linux 內核隔離性不夠

盡管目前Namespace 已經提供了非常多的資源隔離類型,但是仍有部分關鍵內容沒有被完全隔離,其中包括一些系統的關鍵性目錄(如 /sys、/proc 等),這些關鍵性的目錄可能會泄露主機上一些關鍵性的信息,讓攻擊者利用這些信息對整個主機甚至雲計算中心發起攻擊。

而且僅僅依靠Namespace 的隔離是遠遠不夠的,因為一旦內核的 Namespace 被突破,使用者就有可能直接提權獲取到主機的超級許可權,從而影響主機安全。

(4) 所有容器共享主機內核

由於同一宿主機上所有容器共享主機內核,所以攻擊者可以利用一些特殊手段導致內核崩潰,進而導致主機宕機影響主機上其他服務。

既然容器有這么多安全上的問題,那麼我們應該如何做才能夠既享受到容器的便利性同時也可以保障容器安全呢?下面我帶你來逐步了解下如何解決容器的安全問題。

如何解決容器的安全問題?

(1) Docker 自身安全性改進

事實上,Docker 從 2013 年誕生到現在,在安全性上面已經做了非常多的努力。目前 Docker 在默認配置和默認行為下是足夠安全的。

Docker 自身是基於 Linux 的多種 Namespace 實現的,其中有一個很重要的 Namespace 叫作 User Namespace,User Namespace 主要是用來做容器內用戶和主機的用戶隔離的。在過去容器里的 root 用戶就是主機上的 root 用戶,如果容器受到攻擊,或者容器本身含有惡意程序,在容器內就可以直接獲取到主機 root 許可權。Docker 從 1.10 版本開始,使用 User Namespace 做用戶隔離,實現了容器中的 root 用戶映射到主機上的非 root 用戶,從而大大減輕了容器被突破的風險。

因此,我們盡可能地使用Docker 最新版本就可以得到更好的安全保障。

(2) 保障鏡像安全

為保障鏡像安全,我們可以在私有鏡像倉庫安裝鏡像安全掃描組件,對上傳的鏡像進行檢查,通過與CVE 資料庫對比,一旦發現有漏洞的鏡像及時通知用戶或阻止非安全鏡像繼續構建和分發。同時為了確保我們使用的鏡像足夠安全,在拉取鏡像時,要確保只從受信任的鏡像倉庫拉取,並且與鏡像倉庫通信一定要使用 HTTPS 協議。

(3) 加強內核安全和管理

由於僅僅依賴內核的隔離可能會引發安全問題,因此我們對於內核的安全應該更加重視。可以從以下幾個方面進行加強。

宿主機及時升級內核漏洞

宿主機內核應該盡量安裝最新補丁,因為更新的內核補丁往往有著更好的安全性和穩定性。

使用Capabilities 劃分許可權

Capabilities 是 Linux 內核的概念,Linux 將系統許可權分為了多個 Capabilities,它們都可以單獨地開啟或關閉,Capabilities 實現了系統更細粒度的訪問控制。

容器和虛擬機在許可權控制上還是有一些區別的,在虛擬機內我們可以賦予用戶所有的許可權,例如設置cron 定時任務、操作內核模塊、配置網路等許可權。而容器則需要針對每一項 Capabilities 更細粒度的去控制許可權,例如:

cron 定時任務可以在容器內運行,設置定時任務的許可權也僅限於容器內部;

由於容器是共享主機內核的,因此在容器內部一般不允許直接操作主機內核;

容器的網路管理在容器外部,這就意味著一般情況下,我們在容器內部是不需要執行ifconfig、route等命令的 。

由於容器可以按照需求逐項添加Capabilities 許可權,因此在大多數情況下,容器並不需要主機的 root 許可權,Docker 默認情況下也是不開啟額外特權的。

最後,在執行docker run命令啟動容器時,如非特殊可控情況,–privileged 參數不允許設置為 true,其他特殊許可權可以使用 --cap-add 參數,根據使用場景適當添加相應的許可權。

使用安全加固組件

Linux 的 SELinux、AppArmor、GRSecurity 組件都是 Docker 官方推薦的安全加固組件。下面我對這三個組件做簡單介紹。

SELinux (Secure Enhanced Linux): 是 Linux 的一個內核安全模塊,提供了安全訪問的策略機制,通過設置 SELinux 策略可以實現某些進程允許訪問某些文件。

AppArmor: 類似於 SELinux,也是一個 Linux 的內核安全模塊,普通的訪問控制僅能控制到用戶的訪問許可權,而 AppArmor 可以控制到用戶程序的訪問許可權。

GRSecurity: 是一個對內核的安全擴展,可通過智能訪問控制,提供內存破壞防禦,文件系統增強等多種防禦形式。

這三個組件可以限制一個容器對主機的內核或其他資源的訪問控制。目前,容器報告的一些安全漏洞中,很多都是通過對內核進行加強訪問和隔離來實現的。

資源限制

在生產環境中,建議每個容器都添加相應的資源限制。下面給出一些執行docker run命令啟動容器時可以傳遞的資源限制參數:

1--cpus 限制 CPU 配額

2-m, --memory 限制內存配額

3--pids-limit 限制容器的 PID 個數

例如我想要啟動一個1 核 2G 的容器,並且限制在容器內最多隻能創建 1000 個 PID,啟動命令如下:

1 $ docker run -it --cpus=1 -m=2048m --pids-limit=1000 busybox sh

推薦在生產環境中限制CPU、內存、PID 等資源,這樣即便應用程序有漏洞,也不會導致主機的資源完全耗盡,最大限度降低安全風險。

(4) 使用安全容器

容器有著輕便快速啟動的優點,虛擬機有著安全隔離的優點,有沒有一種技術可以兼顧兩者的優點,做到既輕量又安全呢?

答案是有,那就是安全容器。安全容器是相較於普通容器的,安全容器與普通容器的主要區別在於,安全容器中的每個容器都運行在一個單獨的微型虛擬機中,擁有獨立的操作系統和內核,並且有虛擬化層的安全隔離。

安全容器目前推薦的技術方案是Kata Containers,Kata Container 並不包含一個完整的操作系統,只有一個精簡版的 Guest Kernel 運行著容器本身的應用,並且通過減少不必要的內存,盡量共享可以共享的內存來進一步減少內存的開銷。另外,Kata Container 實現了 OCI 規范,可以直接使用 Docker 的鏡像啟動 Kata 容器,具有開銷更小、秒級啟動、安全隔離等許多優點。

閱讀全文

與如何設置容器的網路類型相關的資料

熱點內容
西安做網路工程師如何 瀏覽:623
網路視頻會議費用多少 瀏覽:655
線下和網路牛排哪個好 瀏覽:163
哪個運營商的網路覆蓋最廣 瀏覽:959
中考派和國家網路平台哪個好 瀏覽:119
網站編輯和網路銷售選哪個好 瀏覽:70
蜂窩移動網路怎麼設置上網快 瀏覽:651
雲和網路實驗室怎麼抵禦病毒 瀏覽:713
山東文旅通沒有網路連接 瀏覽:156
網路連上用不了手機怎麼設置 瀏覽:617
網路劇演員怎麼選 瀏覽:891
網路安全周海報設計 瀏覽:506
網路沒了怎麼辦 瀏覽:812
vivo手機哪裡掃碼連接網路 瀏覽:653
網路安全與應用雜志 瀏覽:966
網路安全服務售前都包含哪些 瀏覽:297
連無線網網路拒絕進入 瀏覽:814
機頂盒插哪個網路介面 瀏覽:529
如何加盟網路管業 瀏覽:913
信息中心網路安全防護 瀏覽:10

友情鏈接