本系列文章根據Ajeet Singh Raina所寫的「Top 100 Docker Interview Questions」文章,翻譯轉載成一百個問題與答案,其中將Docker相關面試問題分成初級、中級和進階級。若你正在準備Docker相關工作的職缺面試,或渴望獲得Docker相關工具及知識,這些內容可能就是你最需要知道的。
2. 在啟動dockerd時使用配置參數
只要在JSON配置檔和此方法未有指定到相同的選項,就可以同時使用這兩種配置方式,但若未注意,同時設定時,Docker Daemon將無法啟動並輸出錯誤訊息。
? $ dockerd --debug --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem --host tcp://:2376
Q15:請列出容器網路運作為何如此重要的原因?
以下是為何需要容器網路的理由:
‧容器需要跟外部環境溝通
‧從外部環境連接到容器,進而使用容器所提供的服務。
‧允許容器與Host主機溝通
‧單一主機內或跨主機之間的容器相互連接
‧自動探索容器所提供的服務
‧負載平衡同一服務不同容器的網路流量
‧提供安全的多用戶服務
Q16:請說明CNM是什麼?它的組成元件有那些?
CNM是容器網路模型(Container Network Model)的縮寫,由Docker公司所提出的標準及規範,它構成了Docker環境中容器網路運作的基礎要素,是Docker提供容器網路支持多種網路驅動程式的方法模型,CNM在網路和容器之間提供以下協議:
‧相同網段上的所有容器可以相互自由通訊
‧多個網段是分隔容器間流量的方式,所有網路驅動程式皆應支援。
‧讓容器連接到多個網段的方法,是在單一容器上提供多個端點。
‧單一端點加入到網路沙箱中,以便提供網路的可連通性。
如圖4所示,CNM的主要組成元件是:
|
▲圖4 CNM容器網路模型。 |
‧網路(Network)
‧沙箱(Sandbox)
‧端點(Endpoint)
沙箱(Sandbox)只是個通用術語,指的是用來隔離Docker Host主機上網路堆疊的作業系統層之特定技術,Docker在Linux上是使用內核命名空間來提供這沙箱功能,沙箱內的網路「堆疊(Stacks)」,包括網路介面(Interfaces)、路由表和DNS等。CNM術語中的網路是指一個或多個可以通訊的端點,相同網路內的所有端點可以相互通訊,不同網路上的端點在沒有外部繞送的情況下是無法進行溝通(圖5)。
|
▲圖5 中間容器具不同網段的兩個端點。 |
Q17:什麼是不同類型的Docker Networking驅動程式?
Docker的網路子系統允許插入各種驅動程式使用,預設情況下包含多種驅動程式,用來提供核心網路功能,表4是各種不同的Docker網路驅動程式簡介。
表4 Docker網路驅動程式比較表
下面是Docker網路驅動程式的詳細資訊:
‧Bridge:預設的網路驅動程式,若未指定驅動程式,便會是在容器建立時所用的網路類型。當應用程式在獨立的容器中執行,需要網路通訊時,通常會使用橋接器(Bridge)網路。
‧Host:針對單獨容器,移除容器和Docker主機之間的網路隔離,並直接使用Host主機的網路,Swarm服務的Host模式僅適用在Docker 17.06及更高版本。
‧Overlay:層疊網路將多個Docker Daemon連接在一起,並讓Swarm服務能夠彼此相互溝通,也可以使用層疊網路來促成叢集服務與獨立容器之間的通訊,或者在不同Docker Daemon上的兩個各自獨立的容器可以進行溝通,此方法無須在這些容器之間執行作業系統層級的路由設定,詳細請參閱官方文件(https://docs.docker.com/network/overlay/)。
‧MacVLAN:Macvlan網路允許使用者為容器分配MAC位址(OSI Layer2),使其表現就像網路上的實體設備,Docker Daemon透過其MAC位址將網路封包繞送到容器,當需要直接連接實體網路的高效率低延遲應用情境時,使用macvlan驅動程式可能是最佳選擇,而不再透過Docker主機上網路堆疊來進行NAT路由。
‧None:對於此一容器,禁用所有網路功能,通常會在客製化網路驅動程式的情境中使用,none並不適用於Swarm服務。
Q18:與Docker免費社群版本相比較,Docker企業版本有哪些獨特功能?
唯有在使用Docker企業版才能使用通用控制平台(Universal Control Plane,UCP)的圖形介面來管理Docker叢集和服務,且實作以下兩項功能: