4 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
docker容器技術(shù)指Docker是一個(gè)由GO語言寫的程序運(yùn)行的“容器”(Linux containers, LXCs)
Docker則實(shí)現(xiàn)了一種應(yīng)用程序級(jí)別的隔離,它改變我們基本的開發(fā)、操作單元,由直接操作虛擬主機(jī)(VM),轉(zhuǎn)換到操作程序運(yùn)行的“容器”上來。
Docker是為開發(fā)者和系統(tǒng)管理員設(shè)計(jì)的,用來發(fā)布和運(yùn)行分布式應(yīng)用程序的一個(gè)開放性平臺(tái)。由兩部分組成:
Docker Engine: 一個(gè)便攜式、輕量級(jí)的運(yùn)行環(huán)境和包管理器。(注* 單OS vs 單線程)
Docker Hub: 為創(chuàng)建自動(dòng)化工作流和分享應(yīng)用創(chuàng)建的云服務(wù)組成。(注* 云端鏡像/包管理 vs npm包管理,是不是跟npm特別像?)
從2013年3月20日,第一個(gè)版本的Docker正式發(fā)布到 2014年6月Docker 1.0 正式發(fā)布,經(jīng)歷了15個(gè)月。 雖然發(fā)展歷程很短,但Docker正在有越來越流行的趨勢(shì)。
其實(shí)Container技術(shù)并非Docker的創(chuàng)新,HeroKu, NodeJitsu 等云服務(wù)商都采用了類似這種輕量級(jí)的虛擬化技術(shù),但Docker是第一個(gè)將這這種Container技術(shù)大規(guī)模開源并被社區(qū)廣泛接受的。

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
Docker(容器) 是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。Docker(容器)主要是提供一個(gè)環(huán)境,這個(gè)環(huán)境盡可能接近一個(gè)VM,但沒有像VM需要單獨(dú)的內(nèi)核和模擬所有的硬件這樣的開銷。

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....
其實(shí)看完這句話還是不明白究竟是啥的,下面就慢慢解釋。不過長話短說的話,把他想象成一個(gè)用了一種新穎方式實(shí)現(xiàn)的超輕量虛擬機(jī),在大概效果上也是正確的。當(dāng)然在實(shí)現(xiàn)的原理和應(yīng)用上還是和VM有巨大差別的,并且專業(yè)的叫法是應(yīng)用容器(Application Container)。
為啥要用容器?
那么應(yīng)用容器長什么樣子呢,一個(gè)做好的應(yīng)用容器長得就好像一個(gè)裝好了一組特定應(yīng)用的虛擬機(jī)一樣。比如我現(xiàn)在想用MySQL那我就找個(gè)裝好MySQL的容器,運(yùn)行起來,那么我就可以使用 MySQL了。
那么我直接裝個(gè) MySQL不就好了,何必還需要這個(gè)容器這么詭異的概念?話是這么說,可是你要真裝MySQL的話可能要再裝一堆依賴庫,根據(jù)你的操作系統(tǒng)平臺(tái)和版本進(jìn)行設(shè)置,有時(shí)候還要從源代碼編譯報(bào)出一堆莫名其妙的錯(cuò)誤,可不是這么好裝。而且萬一你機(jī)器掛了,所有的東西都要重新來,可能還要把配置在重新弄一遍。但是有了容器,你就相當(dāng)于有了一個(gè)可以運(yùn)行起來的虛擬機(jī),只要你能運(yùn)行容器,MySQL的配置就全省了。而且一旦你想換臺(tái)機(jī)器,直接把這個(gè)容器端起來,再放到另一個(gè)機(jī)器就好了。硬件,操作系統(tǒng),運(yùn)行環(huán)境什么的都不需要考慮了。
在公司中的一個(gè)很大的用途就是可以保證線下的開發(fā)環(huán)境、測(cè)試環(huán)境和線上的生產(chǎn)環(huán)境一致。當(dāng)年在 Baidu 經(jīng)常碰到這樣的事情,開發(fā)把東西做好了給測(cè)試去測(cè),一般會(huì)給一坨代碼和一個(gè)介紹上線步驟的上線單。結(jié)果代碼在測(cè)試機(jī)跑不起來,開發(fā)就跑來跑去看問題,一會(huì)兒啊這個(gè)配置文件忘了提交了,一會(huì)兒啊這個(gè)上線命令寫錯(cuò)了。找到了一個(gè) bug 提上去,開發(fā)一看,啊我怎么又忘了把這個(gè)命令寫在上線單上了。類似的事情在上線的時(shí)候還會(huì)發(fā)生,變成啊你這個(gè)軟件的版本和我機(jī)器上的不一樣……在 Amazon 的時(shí)候,由于一個(gè)開發(fā)直接擔(dān)任上述三個(gè)職位,而且有一套自動(dòng)化部署的機(jī)制所以問題會(huì)少一點(diǎn),但是上線的時(shí)候大家還是膽戰(zhàn)心驚。
若果利用容器的話,那么開發(fā)直接在容器里開發(fā),提測(cè)的時(shí)候把整個(gè)容器給測(cè)試,測(cè)好了把改動(dòng)改在容器里再上線就好了。通過容器,整個(gè)開發(fā)、測(cè)試和生產(chǎn)環(huán)境可以保持高度的一致。
此外容器也和VM一樣具有著一定的隔離性,各個(gè)容器之間的數(shù)據(jù)和內(nèi)存空間相互隔離,可以保證一定的安全性。
添加回答
舉報(bào)