Docker自2013年問世以來蝎抽,就一直備受推崇。從剛開始只有少數(shù)人了解蜈敢,發(fā)展至今,在IT界成了家喻戶曉的工具汽抚。為什么Docker這么受歡迎抓狭,Docker能給技術(shù)人提供什么樣的幫助呢,這篇文章獲取能幫助你找到答案造烁。
Docker簡介
Docker是一個開源的容器引擎辐宾,實現(xiàn)輕量級的虛擬化解決方案狱从。為了便于大家更好的理解膨蛮,我們舉個例子說明叠纹。
假設(shè)你是一個養(yǎng)魚愛好者,有很多品種的魚想養(yǎng)敞葛。每種魚對水溫誉察,水質(zhì)的要求都不太一樣。通常你會選擇買很多個魚缸惹谐,并把每個魚缸調(diào)節(jié)為不同的環(huán)境持偏。
這樣的做法當(dāng)然可行,但是購買大量的魚缸又貴又占地方氨肌。
如果可以在一個大魚缸中隔出一個個小房間就好了鸿秆,每個小房間的水溫和水質(zhì)都是獨立的,這樣就解決了不同品種的魚共存的問題怎囚。
如果每個小房間都能動態(tài)生成和關(guān)閉卿叽,就更完美了,這樣我們每多養(yǎng)一種魚恳守,只要按照輸入的條件生成一個小房間就可以了考婴。
這個問題在現(xiàn)實中比較難實現(xiàn)。但是在計算機方向催烘,已經(jīng)有了成型的解決方案(Docker)沥阱。
在同一臺機器上運行兩個對環(huán)境要求截然不同的軟件,是很困難的伊群。當(dāng)然考杉,你可以在機器上啟動兩臺虛擬機,并把軟件丟進適合的虛擬機中舰始。但如果你想在一臺機器上運行10個對環(huán)境要求不同的軟件呢崇棠?
這時候,虛擬機由于本身開銷過大蔽午,無力支撐這樣的場景易茬。Docker提供的是一種輕量級的解決方案。就如同上面養(yǎng)魚的例子及老,Docker技術(shù)就類似用“薄膜”把魚缸分成了若干份抽莱,不僅擁有良好的隔離性,而且損耗非常小骄恶。
其實食铐,Docker底層的技術(shù)實現(xiàn)并非新鮮貨。Docker底層依賴LXC(Linux Container)技術(shù), 后者的歷史比Docker悠久多了僧鲁。LXC是一個提供進程級隔離的容器方案虐呻。不同于虛擬機象泵,它并沒有為進程提供單獨的內(nèi)核和操作系統(tǒng),而是僅僅提供邏輯上的隔離斟叼。
Docker則是在LXC的基礎(chǔ)上做了非常易用的封裝偶惠,并且提出Docker鏡像的概念±噬可以方便開發(fā)者們把程序的運行環(huán)境制作成鏡像忽孽,并整體拷貝到任何機器上。只要機器安裝了Docker谢床,就能基于鏡像啟動一個隔離的容器環(huán)境兄一。
Docker有什么用
Docker的作用主要體現(xiàn)在統(tǒng)一環(huán)境和環(huán)境隔離兩方面。
統(tǒng)一環(huán)境
環(huán)境一直是程序員們的老大難問題识腿。具體表現(xiàn)為以下幾個方面:
- 環(huán)境搭建步驟繁瑣
新人加入團隊出革,搭個環(huán)境半天就過去是常有的事情《伤希花了時間是小事骂束,有可能過程中遇到各種奇葩的坑,把心情都弄壞了硝全。 - 環(huán)境不一致引發(fā)故障
如果開發(fā)同學(xué)和測試同學(xué)使用的是不同的環(huán)境栖雾,就會出現(xiàn)明明能重現(xiàn)的bug因為環(huán)境不一致而無法重現(xiàn),很可能把bug帶入生產(chǎn)環(huán)境伟众,造成巨大的損失析藕。測試和生產(chǎn)環(huán)境不一致也非常致命。經(jīng)過充分測試的軟件凳厢,一上線就崩潰了账胧。這個鍋誰來背呢?
有了Docker先紫,這些問題就變得很簡單了治泥。把環(huán)境制作成標(biāo)準(zhǔn)化的鏡像,搭建環(huán)境只需要把鏡像下載下來遮精,并基于它啟動一個運行環(huán)境(容器)居夹。開發(fā),測試本冲,運維同學(xué)使用同一份鏡像准脂,再也不會出現(xiàn)環(huán)境不一致而放過的bug了。
你甚至可以對你的環(huán)境加以版本控制檬洞。Docker采用Dockerfile這樣的標(biāo)準(zhǔn)配置來構(gòu)建你的鏡像狸膏,將Dockerfile用git這樣的版本控制軟件管理起來,就實現(xiàn)了對環(huán)境的版本控制添怔。
環(huán)境隔離
微服務(wù)架構(gòu)的提出使得現(xiàn)在的軟件越來越輕湾戳,功能越來越獨立贤旷。這樣雖然降低了整個架構(gòu)的耦合性,但是對軟件交付來說復(fù)雜度提高了砾脑。從部署一個發(fā)布包變成了部署多個組件幼驶。每個組件的高可用需求不同,部署的策略也不一樣拦止。
在一臺機器上部署多個組件是很常見的場景县遣。某個組件一旦污染了環(huán)境,可能造成其他組件被破壞汹族,進而影響整個系統(tǒng)的運轉(zhuǎn)。
這時候其兴,環(huán)境隔離是我們迫切需要的技術(shù)顶瞒。Docker使用namespace實現(xiàn)了系統(tǒng)環(huán)境的隔離。進程只能感知到同一個namespace下其他進程的變化元旬,而對外界一無所知榴徐。
Docker采用Cgroup技術(shù)控制宿主機的資源分配,以免某個組件過度使用系統(tǒng)資源而影響到其他組件的正常工作匀归。
有了這兩項重要的隔離技術(shù)坑资,組件們就可以友好的生存在一起了。
快來使用Docker吧
這篇文章主要介紹了Docker存在的意義以及它能給我們帶來什么樣的好處穆端。如果你迫不及待的想了解相關(guān)的技術(shù)袱贮,可以登錄Docker的官方網(wǎng)站, 安裝并進一步了解Docker。
相信你能在實際的使用中体啰,體驗到更多文中提到的或者沒有提到的好處攒巍。