在計算機技術日新月異的今天, Docker 在國內(nèi)發(fā)展的如火如荼。特別是在一線互聯(lián)網(wǎng)公司 Docker 的使用是十分普遍的,甚至成為了一些企業(yè)面試的加分項,那么今天我們繼續(xù)關于Docker 的精華問答。
1
Q:Consul是什么?
A:Consul是一個分布式、高可用的系統(tǒng),是一個為了解決在生產(chǎn)環(huán)境中服務注冊,服務發(fā)現(xiàn),服務配置的一個工具,它有多個組件,提供如下幾個關鍵功能:
服務發(fā)現(xiàn):Consul的某些客戶端可以提供一個服務,例如api或者MySQL,其它客戶端可以使用Consul去發(fā)現(xiàn)這個服務的提供者。使用DNS或者HTTP,應用可以很容易的找到他們所依賴的服務。
健康檢查:Consul客戶端可以提供一些健康檢查,這些健康檢查可以關聯(lián)到一個指定的服務(服務是否返回200 OK),也可以關聯(lián)到本地節(jié)點(內(nèi)存使用率是否在90%以下)。這些信息可以被一個操作員用來監(jiān)控集群的健康狀態(tài),被服務發(fā)現(xiàn)組件路由時用來遠離不健康的主機。
鍵值存儲:應用可以使用Consul提供的分層鍵值存儲用于一些目的,包括動態(tài)配置、特征標記、協(xié)作、leader選舉等等。通過一個簡單的HTTP API可以很容易的使用這個組件。
多數(shù)據(jù)中心:Consul對多數(shù)據(jù)中心有非常好的支持,這意味著Consul用戶不必擔心由于創(chuàng)建更多抽象層而產(chǎn)生的多個區(qū)域。
2
Q:為什么要用它?
A:現(xiàn)在企業(yè)應用都向微服務化方向發(fā)展,當把我們的系統(tǒng)功能拆分成一個一個的微服務后,存在以下問題
需要配置N個服務的網(wǎng)絡位置,加大配置的復雜性
服務的網(wǎng)絡位置變化,都需要改變每個調(diào)用者的配置
集群的情況下,難以做負載(反向代理的方式除外)
3
Q:Docker構(gòu)架
A:Docker使用C/S架構(gòu),Client 通過接口與Server進程通信實現(xiàn)容器的構(gòu)建,運行和發(fā)布。client和server可以運行在同一臺集群,也可以通過跨主機實現(xiàn)遠程通信。
4
Q:Docker vs VM
A:VM是一個運行在宿主機之上的完整的操作系統(tǒng),VM運行自身操作系統(tǒng)會占用較多的CPU、內(nèi)存、硬盤資源。Docker不同于VM,只包含應用程序以及依賴庫,基于libcontainer運行在宿主機上,并處于一個隔離的環(huán)境中,這使得Docker更加輕量高效,啟動容器只需幾秒鐘之內(nèi)完成。由于Docker輕量、資源占用少,使得Docker可以輕易的應用到構(gòu)建標準化的應用中。但Docker目前還不夠完善,比如隔離效果不如VM,共享宿主機操作系統(tǒng)的一些基礎庫等;網(wǎng)絡配置功能相對簡單,主要以橋接方式為主;查看日志也不夠方便靈活。
Docker 在容器的基礎上,進行了進一步的封裝,從文件系統(tǒng)、網(wǎng)絡互聯(lián)到進程隔離等等,極大的簡化了容器的創(chuàng)建和維護。使得 Docker 技術比虛擬機技術更為輕便、快捷。
作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢。Docker 容器的啟動可以在秒級實現(xiàn),這相比傳統(tǒng)的虛擬機方式要快得多;Docker 對系統(tǒng)資源的利用率很高,一臺主機上可以同時運行數(shù)千個 Docker 容器。
5
Q:多個 Docker 容器之間共享數(shù)據(jù)怎么辦?
A:如果是同一個宿主,那么可以綁定同一個數(shù)據(jù)卷,當然,程序上要處理好并發(fā)問題。如果是不同宿主,則可以使用分布式數(shù)據(jù)卷驅(qū)動,讓分布在不同宿主的容器都可以訪問到的分布式存儲的位置。如S3之類。