Docker 是什麼?Docker 基本概念介紹與容器和虛擬機的比較

Docker 是什麼?

Docker 是一款開源軟體平台,核心理念為「Build and Ship Any Application Anywhere」,致力於協助開發者在虛擬環境中快速開發、部署與管理各類應用程式。

輕量化架構可為每個應用程式提供獨立的測試環境,使開發者能專注於程式本身,無需耗費時間與精力處理繁瑣的環境建置。

docker logo

為什麼要使用 Docker

(一)在主機上快速部署

Docker 容器具備跨平台的可攜性,並能共享作業系統資源,相較於虛擬機,其架構更加輕量。在相同硬體資源下,容器的執行數量可達虛擬機的 5 至 10 倍,顯著提升開發效率,同時降低基礎建設成本!

(二)版本控管和物件重複使用

Docker 能儲存各個版本的歷史紀錄,使用者可依需求輕鬆回滾至理想版本。開發人員只需完成一次環境設定,就能重複使用先前建立的容器,大大提升開發效率與一致性。

(三)更有效率的 CI/CD 流程

Docker 協助開發人員在各種環境中測試程式碼,讓錯誤能在應用程式開發初期即被發現與修正。

此外,開發人員可善用 Docker 與其他工具的整合能力,將 GitHub 和 Jenkins 納入開發流程。只需將程式碼提交至 GitHub, Jenkins 即可自動執行部署流程並建立映像檔,後續可將映像檔上傳至 Docker Hub,以解決不同版本間的環境相容性問題。

整體而言,Docker 不僅簡化了開發與部署流程,也縮短環境建置時間,能同時執行多項測試,提升開發效率與靈活度。

Docker 結合 CI/CD 流程進行自動測試與部署

在 CI 流程中,開發人員常見的做法是:應用程式開發完成後,透過 CI 伺服器建立 Docker 映像檔,將應用程式封裝其中,並上傳至 Docker Hub。

後續,無論是在 QA、DEV 或正式環境中,皆可從 Docker Hub 下載映像檔並啟動容器。而在映像檔建置過程中,CI 伺服器也能同步執行編輯與測試,有效提升開發效率與流程一致性。

推薦閱讀:法國興業銀行利用 Docker Enterprise 將上千個軟體轉置至雲端

虛擬化技術是什麼?

在認識 Docker 之前,我們必須先了解「虛擬化技術」的核心概念。

簡單來說,虛擬化是為了解決不同作業系統與硬體資源配置之間的不相容問題。

例如,當我在本機開發並測試一款應用程式時,系統運作一切正常;但若將程式部署到其他環境或雲端平台,就必須重建相同的執行環境,包括作業系統版本、伺服器配置、CPU 資源、資料庫與擴充元件等。

這樣的流程不僅耗時,也難以保證程式在新環境中能順利執行。即使同樣使用 Linux,不同版本之間也可能產生不相容問題,導致「本機能跑、上線就壞」的情況發生。虛擬化技術正是為了解決這類環境不一致所誕生的。

目前常見的虛擬化方式有兩種:

  • 虛擬機(Virtual Machine):以作業系統為單位進行虛擬化,代表技術如 VMware。
  • 容器化(Containerization):以應用程式為單位進行虛擬化,代表技術如 Docker。

接下來,我們將分別介紹這兩種虛擬化技術的運作原理與差異。

虛擬機(VM)

虛擬機(VM)是一種資源占用較高的軟體套件,透過模擬底層主機資源(如 CPU、記憶體與儲存空間),來為上層應用程式提供執行環境。

VM 架構中包含一個稱為 Hypervisor 的平台,用於管理和分配硬體資源。簡單來說,Hypervisor 可讓使用者在主機作業系統(Host OS)上建立並運行另一個作業系統(Guest OS),實現多個系統的協同運作。

每個 VM 都包含一套完整的作業系統、應用程式、二進位檔與系統函式庫,容量通常高達 10 GB,因此相較於容器,其啟動速度較慢、資源需求也更高。

container-vm-whatcontainer

容器化(Containerize)

容器化是一項與虛擬機概念相似、但原理略有不同的技術,主要目的是為開發者提供可重複使用的沙盒環境,用於測試與部署應用程式。

開發者可將應用程式及其所有相依資源(如系統函式庫、第三方套件等)封裝於容器中進行測試。與虛擬機不同,容器不需模擬底層硬體架構,因此資源消耗更低、啟動速度更快。

此外,每個容器皆以獨立單元運行,彼此隔離,避免相互干擾,使資源配置更具彈性。

docker-containerized-appliction-blue-border_2 (Demo)

容器(Container)VS 虛擬機(VM)

容器與虛擬機功能相似且各有優勢,但針對的問題層面不同。虛擬機主要虛擬化整個作業系統,而容器則虛擬化作業系統層級,因而更輕量且易於攜帶,效率也更高。以下表格對比容器與虛擬機的差異:

功能 Virtual Machine Docker Container
虛擬化的目標 作業系統 應用系統
啟動時間 久(幾分鐘) 短(幾秒)
容量 GB MB
耗費資源 較多 較少
複製相同環境
服務內容 大型專案服務 多使用於微服務中

Docker 的重要元素

Dockerfile

開發人員在使用 Docker 時常發現,市面上的現成映像檔往往無法完全符合需求,因此需要一種能自動生成映像檔的工具。Dockerfile 就是這樣一種簡單的文本檔案,內含建立映像檔所需的指令。

Dockerfile 的語法主要由兩部分組成:命令(Command)與參數(Argument)。

以下為一個簡單的 Dockerfile 範例示意:命令語法 + 參數設定(Command + Argument)

以這張圖來說 From 是命令式,而 nginx 是選擇參數

dockerfile

Image (映像檔)

Docker 映像檔是用來創建容器的模板,可以視為類似虛擬機快照(snapshot)的概念。映像檔內包含了開發者所需部署的應用程式、作業系統及相關執行環境。

開發者可利用映像檔建立多個容器,每個容器中的應用程式皆獨立運行,互不干擾,確保環境的一致性與隔離性!

image

 

圖片來源

Container (容器)

容器是由映像檔建立的執行實例,可視為輕量級的沙盒環境。Docker 透過容器來運行並隔離應用程式,並可對容器進行啟動、暫停、停止與刪除等操作。

由於映像檔為唯讀模板,容器在運行時會在映像檔之上新增一層可讀寫的「寫入層」,使得容器內的變更不會影響原始映像檔。

docker-inside-container

Repository(倉庫)

Repository 是儲存映像檔的地方,使用者可以將自己完成的映像檔上傳至倉庫上儲存,倉庫上也有許多現成的映像檔供用戶存取,倉儲的種類被分為公開與私人兩種。

目前官方最大的公開倉庫是 Docker Hub。在上面儲存了超過 15,000 個映像檔供使用者下載。

docker-flow

Docker 的運作流程

  • 步驟一、撰寫 Dockerfile
  • 步驟二、將 Dockerfile 建立為 Image
  • 步驟三、將 Image 運行為容器。

透過這三個簡單的步驟,就能創建屬於自己的 Docker 容器!

創建運行 Docekr

 

圖片來源

結語

看完這篇文章後,相信大家現在對 Docker 是什麽?有了一些基本的認識。

想了解更多 Docker 的相關知識,可以參考 Docker – 迅速建立最自由容器的管理工具,如果想要下載 Docker 或認識 Docker 的語法,可以參考 Docker 安裝 和 Docker 指令


歐立威科技致力於成為全方位開源軟體解決方案與資料分析專業建置商,透過不斷尋找及引進更具競爭優勢的產品,提供企業環境的部署、整合、客製化、教育訓練與技術支援服務,滿足客戶及合作夥伴對於開源軟體的資訊需求。如果想要獲得更多資訊,歡迎與我們聯繫


加入歐立威 LINE 好友,了解更多產品資訊

加入好友