1. 程式人生 > Docker入門教學 >Docker 簡介

Docker 簡介

Docker 專案誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘專案,基於 Google 公司推出的 Go 語言實現。 專案後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,專案程式碼在 GitHub 上進行維護。

1. Docker 是什麼

Docker 是一個開源的應用容器引擎,開發者可以打包他們的應用以及依賴包到一個可移植的映象中,然後釋出到任何流行的 Linux 或 Windows 機器上。

Tips:容器是完全使用沙箱機制,相互之間不會有任何介面。

圖片描述

如圖所示的是一個 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 EE , 一個是 Docker CE :

  • CE(Community Edition)是社群版,簡單理解是免費使用,提供小企業與小的 IT 團隊使用;

  • EE(Docker Enterprise Edition)是企業版,收費,但是提供的功能更強。

本教程中我們會使用 free 的 Docker CE 19.03 版本來進行講解,雖然是免費的版本,但是它的功能依然十分強大。

4. 為什麼要學習 Docker ?

這裡我們先打打“雞血”。對於個人來說,我們學習的動力主要有兩部分,其一是掌握 Docker 使用可以提升自身競爭力,其二是 Docker 在我們日常使用中也能提供不少便利,掌握接下來的基礎部分後,我們會有一節重新仔細地總結一下 Docker 的優勢。

5. 本課程的學習基礎

除了前言部分提到的 Linux 基礎,我們最好對計算機網路和作業系統方面的知識也有所涉獵。當然,在學習的過程中,遇到不理解的知識再去學習也是一個不錯的方法,帶著問題學技術也是快速提升自己能力的一個好辦法。

6. 小結

由於 Docker 帶來的巨大的便利,讓很多開發、測試和運維等軟體開發環節上的工作被簡化,許多大型科技企業都參與到了 Docker 相關領域的貢獻中來,為 Docker 及其生態圈貢獻了許多優秀的軟體專案,大大豐富了 Docker 生態。

Docker 技術帶來了很多新的概念和工具,通過綜合運用這些技術,使用者可以快速構建和部署這些容器。後面的小節中我們會一一將 Docker 的魅力展現給大家。