2 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
Docker的思想來自于集裝箱,集裝箱解決了什么問題?在一艘大船上,可以把貨物規(guī)整的擺放起來。并且各種各樣的貨物被集裝箱標(biāo)準(zhǔn)化了,集裝箱和
集裝箱之間不會(huì)互相影響。那么我就不需要專門運(yùn)送水果的船和專門運(yùn)送化學(xué)品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運(yùn)
走。
docker就是類似的理念。現(xiàn)在都流行云計(jì)算了,云計(jì)算就好比大貨輪。docker就是集裝箱。
1.不同的應(yīng)
用程序可能會(huì)有不同的應(yīng)用環(huán)境,比如.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個(gè)服務(wù)器上就要調(diào)試很久,
而且很麻煩,還會(huì)造成一些沖突。比如IIS和Apache訪問端口沖突。這個(gè)時(shí)候你就要隔離.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站。常規(guī)來講,我們可以在
服務(wù)器上創(chuàng)建不同的虛擬機(jī)在不同的虛擬機(jī)上放置不同的應(yīng)用,但是虛擬機(jī)開銷比較高。docker可以實(shí)現(xiàn)虛擬機(jī)隔離應(yīng)用環(huán)境的功能,并且開銷比虛擬機(jī)小,
小就意味著省錢了。
2.你開發(fā)軟件的時(shí)候用的是Ubuntu,但是運(yùn)維管理的都是centos,運(yùn)維在把你的軟件從開發(fā)環(huán)境轉(zhuǎn)移到生產(chǎn)環(huán)境
的時(shí)候就會(huì)遇到一些Ubuntu轉(zhuǎn)centos的問題,比如:有個(gè)特殊版本的數(shù)據(jù)庫,只有Ubuntu支持,centos不支持,在轉(zhuǎn)移的過程當(dāng)中運(yùn)維就
得想辦法解決這樣的問題。這時(shí)候要是有docker你就可以把開發(fā)環(huán)境直接封裝轉(zhuǎn)移給運(yùn)維,運(yùn)維直接部署你給他的docker就可以了。而且部署速度快。
3.在服務(wù)器負(fù)載方面,如果你單獨(dú)開一個(gè)虛擬機(jī),那么虛擬機(jī)會(huì)占用空閑內(nèi)存的,docker部署的話,這些內(nèi)存就會(huì)利用起來。
總之docker就是集裝箱原理。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
官網(wǎng)的介紹是這樣的:
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)境、測試環(huán)境和線上的生產(chǎn)環(huán)境一致。當(dāng)年在 Baidu 經(jīng)常碰到這樣的事情,開發(fā)把東西做好了給測試去測,一般會(huì)給一坨代碼和一個(gè)介紹上線步驟的上線單。結(jié)果代碼在測試機(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ā),提測的時(shí)候把整個(gè)容器給測試,測好了把改動(dòng)改在容器里再上線就好了。通過容器,整個(gè)開發(fā)、測試和生產(chǎn)環(huán)境可以保持高度的一致。
此外容器也和VM一樣具有著一定的隔離性,各個(gè)容器之間的數(shù)據(jù)和內(nèi)存空間相互隔離,可以保證一定的安全性。
添加回答
舉報(bào)