Docker 簡介
Docker 項目誕生于 2013 年初,最初是 dotCloud 公司內部的一個業余項目,基于 Google 公司推出的 Go 語言實現。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。
1. Docker 是什么
Docker 是一個開源的應用容器引擎,開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的 Linux 或 Windows 機器上。
如圖所示的是一個 Docker 的 Logo,它生動描述了 Docker 這個產品的本質:軟件行業的集裝箱。
集裝箱是指具有一定強度、剛度和規格專供周轉使用的大型裝貨容器。對于絕大多數的貨物,我們不需要專門定制化運輸船。在一艘大型貨船上,各種各樣的貨物被集裝箱標準化,可以把貨物規整地擺放運輸,各個集裝箱之間互相隔離,不會影響。
我們將 Docker 與集裝箱做個類比,方便我們理解 Docker:
傳統行業集裝箱 | Docker |
---|---|
貨物的實體 | 軟件應用和自身運行依賴的環境 |
具有統一的規格,便于運輸 | 運行環境的統一性 |
與外界環境隔離 | 容器之間互不影響 |
2. Docker 誕生背景
一個新技術的普及過程中,除了帶有技術本身的酷炫色彩,一定也伴隨著生產效率的提升和成本的降低。
在軟件產品的傳統開發流程中,軟件從開發到上線,從操作系統安裝,到運行環境依賴,再到應用配置,需要消耗大量技術資源在很多瑣碎無意義的運維工作上。
隨著虛擬機和云計算的普及,許多公司開始租用 AWS 或 OpenStack 的虛擬機,用腳本在這些機器上自動化部署,但這個過程中會碰到云端虛擬機和本地環境不一致的問題, 解決起來依舊費時費力。
為了解決這些問題,PaaS 平臺服務(Platform-as-a-service)誕生了。 PaaS 有應用托管的能力,提供與開發環境相同的運行環境。PaaS 會為每一個應用單獨創建一個隔離環境,然后在隔離環境中啟動這些應用進程,從而達到多個用戶的應用互不干涉地在虛擬機里批量、自動運行起來的目的。
而 Docker 屬于新一代的 PaaS 項目, 它脫胎于 Linux Container (LXC)技術,與先前的 PaaS 不同的是,Docker 把 Cgroups、Namespace 和 UnionFS 等一系列技術整合起來,極大地降低了容器技術的復雜度,提升了開發者的用戶體驗。Docker 公司定義了以容器鏡像為標準的應用打包格式,并且建立 Docker Hub 服務進行鏡像分發和協作。這些舉措迅速創建了一個良好的社區和合作伙伴生態圈,其中包括 AWS、Google、Microsoft、IBM 等行業巨頭和國內的眾多公司。
3. 為什么要學習 Docker ?
這里我們先打打“雞血”。對于個人來說,我們學習的動力主要有兩部分,其一是掌握 Docker 使用可以提升自身競爭力,其二是 Docker 在我們日常使用中也能提供不少便利,掌握接下來的基礎部分后,我們會有一節重新仔細地總結一下 Docker 的優勢。
4. 本課程的學習基礎
除了前言部分提到的 Linux 基礎,我們最好對計算機網絡和操作系統方面的知識也有所涉獵。當然,在學習的過程中,遇到不理解的知識再去學習也是一個不錯的方法,帶著問題學技術也是快速提升自己能力的一個好辦法。
5. 小結
由于 Docker 帶來的巨大的便利,讓很多開發、測試和運維等軟件開發環節上的工作被簡化,許多大型科技企業都參與到了 Docker 相關領域的貢獻中來,為 Docker 及其生態圈貢獻了許多優秀的軟件項目,大大豐富了 Docker 生態。
Docker 技術帶來了很多新的概念和工具,通過綜合運用這些技術,用戶可以快速構建和部署這些容器。后面的小節中我們會一一將 Docker 的魅力展現給大家。