認識 Docker

高效能輕量級虛擬化工具

黃冠融
黃冠融
May 23 · 4 min read

前言

在大三修作業系統時學習到虛擬化技術,其中教授提過 Type1 跟 Type2。為什麼我們需要這樣的虛擬化技術,原因在於現行已經有相關的技術可以藉由軟體的技術,虛擬出一個與底層硬體功能一模一樣的介面,簡單來講是透過軟體技術模擬出一個硬體的環境。

這樣的好處是什麼,透過使用虛擬機,我們便可允許一台實體主機同時執行多個作業系統,如果有使用過 VirtualBox 或是VMware、 Windows Parallels ,你可以看到我們使用一台實體主機,打開這些軟體內後,在實體主機資源還可承受的情況下,透過軟體執行多個虛擬主機,其中每一個虛擬主機既可以互相用線路連線、也可以獨立運作互不干涉。

從上面來看,我們在佔用面積、耗電量、空調、維護人事成本上(都只需要管理或維護一台主機),都減少了許多。

Docker 的概念

Docker 是一個應用平台,它是一種全新的應用程式的運行方式,一切都發生在一個封閉的、精簡的單元裡,此單元我們稱之為容器(containers)。

容器是一種非常經濟的應用程式運行方式,它們可以在數秒之內啟動,且不會對應用程式的記憶體和運算經濟需求帶來額外的負擔。

你可以透過 Docker 執行 Node.js 的程式之外,也可以啟動另外一個容器運行已存在好幾年的 asp.net MVC 的網頁程式。

Docker、Dockerfile 與 Container 等關係

要了解並學習 Docker 前,我們先來看一下映像檔(Images)、登入所(registries)、容器、以及 Dockerfile 等關係,並透過我所製作的下圖來理解 Docker 的運作方式。

Containers

容器是一個源自映像檔的應用程式執行個體。當運行一個容器時,Docker 會根據 Image 的內容來做該做的事情。我們透過下達

>docker container run

來啟動應用程式。

Images

一個 Docker 映像檔,其實就是一個完整的應用程式封裝。一個 Images 裡面包含了應用程式以及它運行所需的所有相關成分,包括底層作業系統,語言執行平台以及應用程式。如圖所示:

我們可以透過下達

>docker image build

就可以建立客製化的映像檔。我們須提供 Dockerfile 本身以及任何相關資訊如需封裝在映像檔內的資源(例如 WebApp)來建構此映像檔。

Docker 映像檔如同應用程式在某個版本狀態時的檔案系統快照。

Dockerfile

Dokcerfile 即指令稿,它可以用以客製化整個 Image 要用什麼 OS,要準備好什麼樣的環境,透過使用 docker build 的指令就可以建構起 Docker Image,未來要使用此 image 就直接 Run 此 Image。

以下一個 Dockerfile 的內容範例是來自於 ASP.NET Core 2.2 的範例

registries

登錄我們公有或自有的映像檔的地方。只要你有權使用該映像檔,就可以透過指令

> docker image push

上傳映像檔,或用

> docker image pull

下載映像檔。

總結

Docker 是一種容器,企業機構之所以走向 Docker,主要是為了效率、安全以及可攜性。

黃冠融

Written by

黃冠融

Software Engineering(PM, Agile….etc.)/Gamification

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade