##如何搞懂乙個陌生的概念?
要搞明白docker的概念,只看定義是遠遠不夠的。除了直接看定義外,還可以通過其他方式來認識它,主要有三種:
上述兩種方法都要求掌握相當多的軟體虛擬化知識,但是對於乙個從未接觸過docker,甚至對部署都不是很了解,也沒時間去研究docker的新人,應該怎麼快速理解docker的核心優勢呢?
如果你不清楚隱喻的概念,個人有一篇文章單獨介紹:隱喻
「docker」的字面意思是「碼頭工人」,這個名字本身應該是官方深思熟慮之後的結果,這個詞彙本身就帶有很強的隱喻性質,它借用了乙個在真實世界中已經成熟的體系:全球物流系統,來對映docker在軟體領域中起到的作用。
在全球物流系統中,乙個非常重要的發明就是貨櫃。
##貨櫃重要在**?
為了理解這件事情,可以先考察一下貨櫃出現之前的物流情況:貨物從工廠生產出來之後裝箱,然後一箱箱的搬到卡車上,然後再一箱箱卸下來,一箱箱送上火車,運送到碼頭附近的火車站,再一箱箱卸下來,裝上卡車,拉到貨輪上,再一箱一箱的裝上去…
可以看出在這個整個流程中,大量的時間,人力 ,物力全部浪費在了中間的裝卸上。在物流系統裡面,由於路程和運輸工具速度的限制,貨物真正在路上的時間是一定的,在交通技術得到改善之前,這個時間也很難去縮短。於是這部分貨物裝卸時間就成了物流系統中的瓶頸。
這個瓶頸在貨櫃出現之後得到了很大的改善。貨櫃重要在它提供了一種通用的封裝貨物的標準規格(尺寸,外形符合統一標準),這樣就產生了一些巨大的優點:只需要在運輸前一次性封裝,貨櫃就可以放上火車,卡車,拉到碼頭,直接放在貨船上;卸船之後直接再放上火車,卡車,運送到目的地。而且由於貨櫃符合統一標準,整個流程非常容易機械化,這引發了以貨櫃為中心的整個全球物流的標準化程序,從而節省了大量的時間資源和人力資源,成本迅速下降,促進了全球資源的流動與重新配置。
##docker(碼頭工人)正是借用了貨櫃的隱喻
docker就像往貨櫃裡裝貨物的碼頭工人那樣,它把應用打包成具有某種標準規格的貨櫃,用計算機領域的語言來說,這種按照一定規格封裝的貨櫃叫「映象」。其實就是將你原來的**新增點額外的內容,格式之類的,生產出來的乙個符合某種標準的東西。
貨櫃減少了貨物的運輸工作量,那docker映象又有什麼相似的優勢呢?同樣可以先看看docker出現之前的應用部署是情況。
###docker出現之前的部署情況
在docker出現之前,比如說要部署乙個django應用,要做哪些事情?
上面的描述可能有些誇張,但也絕不是罕有發生。在docker出現之前,各種安裝、配置環境正是運維人員經常做的事情之一,在重複工作上浪費了巨大的資源。
###docker出現之後
####標準的交付件
說到docker最像貨櫃的地方,關鍵就是理解它是軟體領域的一種「標準化」,這種標準化的具體產物,簡單來說就是「映象(image)」。
「映象」這個詞說實話太玄乎,當然對應的原文「image」本身也挺玄乎的。原因是它根據一些場景引申了本來的含義。image本身是「畫像,映像」的意思,又有「現實物體的抽象描繪」的意思,而且畫像本身可以很容易的複製,後來又有了「原畫像複製品」一類的意思。
再後來直接就拿來表示光碟映象(很容易複製的儲存影像的東西,只不過畫像是畫在紙上,但這種影像以數字形式存在於光碟上)。
當然「映象」在漢語中就有「複製品」的含義,只不過加入了漢字獨有的意境,顯得玄乎,朦朧了。
在docker中映象是指,把你的應用按照一定的格式封裝(其實就是執行一些符合特定規的命令列)成一種具有某種標準規格的東西(就像貨櫃把你的貨物封裝起來類似)。形象的說,就是把你的應用按照一定的格式抽象的畫了個畫像。
在docker中,映象是無法直接執行的,我猜想這並不是技術上的原因,而是出於工程設計上的考慮。因為一般來說,乙個軟體的某個具體版本只會打包成乙個映象。如果映象可以配置,執行的話,在使用過程中很可能會對映象造成破壞。
那怎麼樣避免映象損壞的問題呢?就是再加一層,相當於分身術,只要本尊沒問題,分身怎麼撲街都不會真正的跪掉。多加的這一層分身,就叫容器(container),這個名字也挺形象,它就像個盒子一樣,你的應用在裡面執行,而且多了一層安全機制。你想使用服務或把你的應用跑起來的話,只需要使用映象新建立乙個容器就可以了(也是一條命令搞定),而映象還放在那裡不動,沒辦法,金貴嘛。
#### docker 究竟做了什麼簡化?
docker在部署過程中,將安裝,配置等重複的部分,由docker自動化完成。只需要在第一次部署時,構建完可用的docker映象(裝好貨櫃),在以後使用中,短短的幾行命令,就可以直接拉取映象,根據這個映象建立出乙個容器,把服務跑起來了。所需要的僅僅是安裝了docker的伺服器,乙個dockerfile檔案,以及比較流暢的網路而已。真可謂『一次構建,到處部署』。
到這裡你可能已經發現了,docker映象成為了一種像貨櫃那樣的標準貨件。它不像傳統的軟體交付方式那樣,只把**以及說明文件之類的給你就完了,而是直接給你乙個標準docker貨件,它可能是dockerfile,或者直接就是映象,這個標準件不僅包括了**本身,還包括了**執行的os等各種整體環境。
於是,誰想用我的服務,直接拉取映象,例項化乙個容器就可以了,能直接提供你所要的服務,不再像之前那樣有繁複的安裝過程————這些都有人給你做過了。
#### 當然docker的優點不止於此
就像貨櫃帶來的「標準化」,這種標準化不僅是指貨櫃本身,而且是指包括運輸器械,物流管理方法等在內的,整個領域的標準化和效率的提高。也就是說基於一件核心事物的「標準化」,可以做更多的事情,比如貨櫃的機械自動搬運,再遠的比如自行車上的螺絲,輪胎等都有全球通用的標準。
##### 統一的管理服務
使用docker部署的應用,都會在docker的管理範圍之內。這也是docker的另乙個非常大的優點,它提供了一種隔離的空間,把伺服器上的零散的部署應用集中起來進行管理。
舉個例子,比如我乙個伺服器上部署了n多服務,有mysql,redis,rabbitmq,其他還有一堆應用。有一天我伺服器突然斷電重啟了,那些沒有設定自動重啟的應用,那些重啟出問題的應用,那些你甚至都不知道隱藏在某個角落裡的重要應用沒啟動成功….
然而使用docker,一眼就可以看出那些應用正常啟動了,那些應用又出問題了。接下來只用有條不紊的處理就ok了。
#####持續交付上的應用持續交付有一些超出範圍,自己去尋找答案吧
##### 彈性計算
也就是根據需要,動態地新增新的應用服務,在不需要時收回伺服器資源,docker的標準化讓這種彈性能力得到了更好的應用。
很多人說docker改變了運維世界,這句話是從群體統計角度來說的,像mysql,python這樣被大規模使用的應用,docker化之後對整個群體所節省的時間,是非常巨大的。
所以有人可能會問,我只有一台伺服器,也不太可能會遷移。我的python服務,mysql服務,只需要部署一次,就可以在以後重複使用了。那這樣docker對於我來說還有優勢嗎?畢竟docker也是有學習成本的。
如果你確信你的應用都是一次性的,而且只提供給自己使用,那麼docker在這種場景下的優勢不是特別明顯:即便是docker,最初的構建也是需要有人做的,這和直接在機器上部署一次的工作量差不多。也就是說,docker並不能把部署的工作「減少為0」,比較好的情況下是「基本減少為1」。
但是,你真的真的確信,你所做的工作只是一次性的嗎?
docker優勢 為什麼要用docker?
依託與linux 核心功能的虛擬化技術 2.docker 是什麼?能夠把應用程式自動部署到容器的開源引擎 3.docker 跟原有的工具有何區別?傳統的部署模式是 安裝 包管理工具或者原始碼包編譯 配置 執行 docker的部署模式是 複製 執行。4.docker 會對伺服器端開發 部署帶來什麼變化...
推薦《現在,發現你的優勢》
參加管理培訓之前,公司發了這本書而且要求大家在參加會議之前一定要先讀這本書並做網上的測試。沒辦法硬著頭皮大概先瀏覽了一下。然後根據要求還算仔細的看來前3章,就迫不及待的到網上做測試。總共280道題,基本上沒道題我就是第一反應在3 5秒內迅速下一步。出來的結果初看覺得不太符合我的個性,後來結合第4章的...
RPA的概念和優勢
大多數人每天都會使用到一些機器 程自動化的工具,例如讀取郵件和系統,計算 生成檔案和報告。而在未來,那些你不想做的枯燥的工作,也許真的可以不做了,重複化 標準化的工作都可以讓機械人幫你完成。想必此刻你一定好奇是什麼解放了你,那麼就一起了解一下rpa吧!通過本章學習,您將了解到 什麼是rpa 什麼情況...