1. 程式人生 > 其它 >第一講Docker概述

第一講Docker概述

弱小和無知不是生存的障礙,傲慢才是。

Docker概述

Docker為什麼出現

一款產品從開發到上線,從作業系統,到執行環境,再到應用配置。作為開發+運維之間的協作我們需要 關心很多東西,這也是很多網際網路公司都不得不面對的問題,特別是各種版本的迭代之後,不同版本環 境的相容,對運維人員是極大的考驗!

環境配置如此麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題, 軟體可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。解決開發人員說的“ 在我的機器上可正常工作”的問題。

之前在伺服器配置一個應用的執行環境,要安裝各種軟體,就拿一個基本的工程專案的環境來說吧, Java/Tomcat/MySQL/JDBC驅動包等。安裝和配置這些東西有多麻煩就不說了,它還不能跨平臺。假如 我們是在 Windows 上安裝的這些環境,到了 Linux 又得重新裝。況且就算不跨作業系統,換另一臺同樣作業系統的伺服器,要移植應用也是非常麻煩的。

傳統上認為,軟體編碼開發/測試結束後,所產出的成果即是程式或是能夠編譯執行的二進位制位元組碼檔案 等(Java為例)。而為了讓這些程式可以順利執行,開發團隊也得準備完整的部署檔案,讓維運團隊得 以部署應用程式,開發需要清楚的告訴運維部署團隊,用的全部配置檔案+所有軟體環境。不過,即便如此,仍然常常發生部署失敗的狀況。

Docker之所以發展如此迅速,也是因為它對此給出了一個標準化的解決方案。

Docker映象的設計,使得Docker得以打破過去「程式即應用」的觀念。通過Docker映象 ( images ) 將應用程式所需要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運作。

Docker的思想來自於集裝箱,集裝箱解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並 且各種各樣的貨物被集裝箱標準化了,集裝箱和集裝箱之間不會互相影響。那麼我就不需要專門運送水 果的船和專門運送化學品的船了。只要這些貨物在集裝箱裡封裝的好好的,那我就可以用一艘大船把他 們都運走。

docker就是類似的理念。

歷史

2010年,幾個搞IT的年輕人,在美國舊金山成立了一家名叫“dotCloud”的公司。

這家公司主要提供基於PaaS的雲端計算技術服務。具體來說,是和LXC有關的容器技術。

後來,dotCloud公司將自己的容器技術進行了簡化和標準化,並命名為——Docker

Docker技術誕生之後,並沒有引起行業的關注。而dotCloud公司,作為一家小型創業企業,在激烈的競爭之下,也步履維艱。

正當他們快要堅持不下去的時候,腦子裡蹦出了“開源”的想法。

什麼是“開源”?開源,就是開放原始碼。也就是將原來內部保密的程式原始碼開放給所有人,然後讓大 家一起參與進來,貢獻程式碼和意見。

有的軟體是一開始就開源的。也有的軟體,是混不下去,創造者又不想放棄,所以選擇開源。自己養不 活,就吃“百家飯”嘛。

2013年3月,dotCloud公司的創始人之一,Docker之父,28歲的Solomon Hykes正式決定,將Docker專案開源。

不開則已,一開驚人。

越來越多的IT工程師發現了Docker的優點,然後蜂擁而至,加入Docker開源社群。

Docker的人氣迅速攀升,速度之快,令人瞠目結舌。

開源當月,Docker 0.1 版本釋出。此後的每一個月,Docker都會發佈一個版本。到2014年6月9日,Docker 1.0 版本正式釋出。

此時的Docker,已經成為行業里人氣最火爆的開源技術,沒有之一。甚至像Google、微軟、Amazon、VMware這樣的巨頭,都對它青睞有加,表示將全力支援。

Docker和容器技術為什麼會這麼火爆?說白了,就是因為它“輕”。

在容器技術之前,業界的網紅是虛擬機器。虛擬機器技術的代表,是VMWareOpenStack

相信很多人都用過虛擬機器。虛擬機器,就是在你的作業系統裡面,裝一個軟體,然後通過這個軟體,再模 擬一臺甚至多臺“子電腦”出來。

在“子電腦”裡,你可以和正常電腦一樣執行程式,例如開QQ。如果你願意,你可以變出好幾個“子電 腦”,裡面都開上QQ。“子電腦”和“子電腦”之間,是相互隔離的,互不影響。

虛擬機器屬於虛擬化技術。而Docker這樣的容器技術,也是虛擬化技術,屬於輕量級的虛擬化

虛擬機器雖然可以隔離出很多“子電腦”,但佔用空間更大,啟動更慢,虛擬機器軟體可能還要花錢(例如VMWare)。

而容器技術恰好沒有這些缺點。它不需要虛擬出整個作業系統,只需要虛擬一個小規模的環境(類似“沙 箱”)。

它啟動時間很快,幾秒鐘就能完成。而且,它對資源的利用率很高(一臺主機可以同時執行幾千個Docker容器)。此外,它佔的空間很小,虛擬機器一般要幾GB到幾十GB的空間,而容器只需要MB級甚至 KB級。

正因為如此,容器技術受到了熱烈的歡迎和追捧,發展迅速。

docker 理念

Docker是基於Go語言實現的雲開源專案。

Docker的主要目標是“Build,Ship and Run Any App , Anywhere”,也就是通過對應用元件的封裝、分發、部署、執行等生命週期的管理,使使用者的APP(可以是一個WEB應用或資料庫應用等等)及其執行環境能夠做到“一次封裝,到處執行”。

Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。將應用執行在Docker 容器上面,而 Docker 容器在任何作業系統上都是一致的,這就實現了跨平臺、跨伺服器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好,大大簡化了操作。

Docker能幹嘛

之前的虛擬機器技術

虛擬機器(virtual machine)就是帶環境安裝的一種解決方案。

它可以在一種作業系統裡面執行另一種作業系統,比如在Windows 系統裡面執行Linux 系統。應用程式對此毫無感知,因為虛擬機器看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機器就是一個普通文 件,不需要了就刪掉,對其他部分毫無影響。這類虛擬機器完美的運行了另一套系統,能夠使應用程式, 作業系統和硬體三者之間的邏輯不變。

虛擬機器的缺點:

1、資源佔用多

2、冗餘步驟多

3 、啟動慢

容器虛擬化技術

由於前面虛擬機器存在這些缺點,Linux 發展出了另一種虛擬化技術:Linux 容器(Linux Containers,縮寫為 LXC)。

Linux 容器不是模擬一個完整的作業系統,而是對程序進行隔離。有了容器,就可以將軟體執行所需的所有資源打包到一個隔離的容器中。容器與虛擬機器不同,不需要捆綁一整套作業系統,只需要軟體工作 所需的庫資源和設定。系統因此而變得高效輕量並保證部署在任何環境中的軟體都能始終如一地執行。

比較了 Docker 和傳統虛擬化方式的不同之處:

  • 傳統虛擬機器技術是虛擬出一套硬體後,在其上執行一個完整作業系統,在該系統上再執行所需應用 程序;

  • 而容器內的應用程序直接運行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。 因此容器要比傳統虛擬機器更為輕便。

  • 每個容器之間互相隔離,每個容器有自己的檔案系統 ,容器之間程序不會相互影響,能區分計算資源。

開發/運維(DevOps)

更快速的應用交付和部署:
傳統的應用開發完成後,需要提供一堆安裝程式和配置說明文件,安裝部署後需根據配置文件進行繁雜 的配置才能正常執行。Docker化之後只需要交付少量容器映象檔案,在正式生產環境載入映象並執行即可,應用安裝配置在映象裡已經內建好,大大節省部署配置和測試驗證時間。

更便捷的升級和擴縮容:
隨著微服務架構和Docker的發展,大量的應用會通過微服務方式架構,應用的開發構建將變成搭樂高積 木一樣,每個Docker容器將變成一塊“積木”,應用的升級將變得非常容易。當現有的容器不足以支撐業 務處理時,可通過映象執行新的容器進行快速擴容,使應用系統的擴容從原先的天級變成分鐘級甚至秒級。

更簡單的系統運維:應用容器化執行後,生產環境執行的應用可與開發、測試環境的應用高度一致,容器會將應用程式相關 的環境和狀態完全封裝起來,不會因為底層基礎架構和作業系統的不一致性給應用帶來影響,產生新的BUG。當出現程式異常時,也可以通過測試環境的相同容器進行快速定位和修復。

更高效的計算資源利用:Docker是核心級虛擬化,其不像傳統的虛擬化技術一樣需要額外的Hypervisor [管理程式] 支援,所以在一臺物理機上可以執行很多個容器例項,可大大提升物理伺服器的CPU和記憶體的利用率。

學習途徑

Docker官網:http://www.docker.com

Docker 中 文 網 站 :https://www.docker-cn.com Docker

Hub官網:https://hub.docker.com (倉庫)

還是我那句話,只要學不死,就往死裡學!