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