【Docker 容器化】初探微服務時代的虛擬化技術

閱讀時間約 6 分鐘

講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A軟體需要的依賴及B軟體所需的依賴版本發生衝突的窘境。

我們就想像運輸的過程, 貨櫃就是一個容器與標準, 中間可以是船隻或者是火車…等載具, 那麼在Docker的架構之中也有容器(Container)的角色存在, 也是非常重要的一個關鍵, 開發人員負責在容器內裝箱, 維運IT人員負責佈署到目的, 雙方職責切割、互不干擾, 減少因為小環節出狀況很難釐清的狀況。

簡言之: 容器的好處也讓不同的應用程式在系統上隔離, 減少維運成本、專注於開發、各環境統一減少排錯變因。

與虛擬機有啥不同?

先來談談我們過去較熟悉的VM虛擬機,這項技術主要模擬底層的各種硬體資源(CPU、RAM、Storage),架構中有一層Hypervisor平台,這平台主要進行資源分配,讓我們基於HostOS之上可以分身出另一個作業系統,這樣的好處是硬體資源在多個虛擬環境之下完全隔離,但相對的也因為較為龐大,故而資源浪費以外,啟動也稍慢一些。

圖片來源

圖片來源


那Docker的部分呢? 容器的架構下,每個容器只需要包含程式運行的函式庫,基本上容器不會模擬底層的OS資源,所有的程式共用一個Host核心,因此耗費的資源也相對較低,並且具有一定的獨立性,各個容器的應用服務基本上不會因為套件相互依賴而產生衝突。

raw-image

圖片來源...

總體而言,Docker是一個輕量且靈活的容器化解決方案,適用於快速部署和管理應用程式,而虛擬機則適合需要完全隔離和模擬多個獨立作業系統的場景。

但缺點也在這邊, 由於採取資源共用的機制, 因此安全性較VM完全隔離來的差一些, 這取決於我們因應什麼場景使用什麼樣的隔離技術, 如果是基礎層為主的應用就需要將硬體資源完全隔離, 強安全環境要求較高, 這時候就可以採取VM的策略, 但若只是一般的Application應用, 那個容器化會是較好的選擇。

組成Docker的重要組件

raw-image

圖片來源...

Dockerfile

raw-image

圖片來源...

這個部份主要在描述映像檔(Image)的組成方式, Docker就會依照我們的描述去產生映像檔(Image),那開發者可以根據不同的應用程式製作不一樣的映像檔。

我們只要記住Dockerfile等於是一份汽車製造設計圖,而車廠根據設計圖進行工程施作,最終打造出一台汽車也就是映像檔,待駕駛上坐之後開始運行,因此汽車相當於是載具,擔任乘客的容器。

但Dockerfile其實並沒有這麼簡單,我們後續也會根據Dockerfile撰寫專門的一篇來進行介紹。

Image(映像檔)

raw-image

圖片來源...

映像檔(Image)的部份就是由Dockerfile描述後執行產生而來, 包含了需要佈署的應用程式、依賴套件、編譯環境、作業系統…等, 封裝後的靜態檔案可以攜帶至其他主機進行載入及啟動。

通常下載方式是這樣的:

# 樣版
docker pull ${映像檔名稱}:${版本號}

# 實際案例
docker pull alpine:latest

Container(容器)

raw-image

圖片來源...

它就等於輕量級的沙盒, 讓我們在容器中執行應用程式, 而萬一壞掉也可以任意的刪除與重建。

# 樣版
docker run ${參數} ${映像檔名稱}:${版本號} ${執行的command...}

# 實際案例
docker run --rm alpine:latest echo "hello world"

簡單來說就是下載完的映像檔(Image)啟動之後會變成容器(Container), 這些容器裝載著各種不同的應用程式, 相互獨立、互不干擾。

Repository(倉庫)

raw-image

圖片來源...

簡單來說就是儲存映像檔(Image)的地方, 可以是公開的(Docker hub)也可以是私有的, 提供使用者上傳與下載。

那倉庫的部份我們一般都會去「Docker Hub」上傳或者下載我們需要的映像檔, 再啟動成容器(Container), 接下來也會說明如何實際的來下載一個Image去使用。

就把他想成是我們的Google Play、APP Store…等應用程式商店, 上面管控著各式各樣的應用程式, 我們只需要下載、安裝、刪除即可。

# 登入倉庫, 有些倉庫是需要建立帳號密碼的
docker login -u ${帳號} -p ${密碼} ${倉庫位置}
# 輸入帳號密碼

# 下載映像檔(Image)
docker pull ${映像檔名稱}:${版本號}

# 上傳映像檔
docker push ${映像檔名稱}:${版本號}

實際下載一個Image來玩玩

.

今天心血來潮突然想玩玩「Linux」系統, 做了一些功課之後發現到「alpine」這個Image的體積還蠻小的, 於是就決定下載來試試看…

# 下載alpine的映像檔(Image)
# 如果需要指定版本可以:
# docker pull alpine:3.8.13
docker pull alpine

接著我們啟動它來練習一下Linux的echo指令, 印出訊息:

# --rm: 容器退出時自動刪除容器。
docker run --rm alpine echo "成功啟動Alpine容器"
raw-image

圖片來源...

結語

Docker的架構真的非常輕巧, 想想過往啟動一台虛擬機VM的時候總需要等個幾分鐘甚至更大型的需要半個小時, 但在Docker的架構底下可能只需要幾秒鐘甚至幾分鐘就可以啟動一個應用程式, 那麼微服務的時代之下Docker就非常重要, 讓我們的產品可以像積木一樣堆疊堆疊, 甚至彈性抽換, 每個積木獨立隔離減少依賴, 也省去了龐大的維護成本。

avatar-img
117會員
262內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
圖片來源... 故事的起源… 圖片來源... 首先我們來查查看目標的目錄有多少檔案, 結果卻… # 查看檔案有多少量 ll *.txt|wc -l # 悲劇發生了... -bash: /usr/bin/ls: Argument list too long 那我們試著搬移檔案呢?
Tmux對於常常在使用Linux或者Mac作業系統的朋友來說是一個非常方便的工具, 可以讓我們工作效率提升, 快速切換多個終端畫面進行多工處理, 但使用時難免遇到一些狀況跟需求, 而這次分享的主要是如何複製貼上, 相信這也是大部分使用者會遇到的情境, 因此進行經驗的分享與交流。 輸入指令的快捷
熟悉使用Linux系列的開發者最常接觸的就是Terminal終端機了, 而Terminal終端機要如何有效率的運用? 這裡就來推薦一個神兵利器「tmux」, 他可以開啟我們的多工模式, 快速的游移在各個視窗之中敲打程式指令,加快工作效率。 並且背後運行著Server, 當我們進行大型任務的程式執行
前景提要 故事是這樣的,小明某一天在Linux系統上進行AI模型訓練時, 原本安心的去睡覺了, 沒想到一早起床想要看成功結果時, 竟然有一條可疑的LOG…。 kernel:[1270601.804083] watchdog: BUG: soft lockup - CPU#8 stuck fo
圖片來源... 故事的起源… 圖片來源... 首先我們來查查看目標的目錄有多少檔案, 結果卻… # 查看檔案有多少量 ll *.txt|wc -l # 悲劇發生了... -bash: /usr/bin/ls: Argument list too long 那我們試著搬移檔案呢?
Tmux對於常常在使用Linux或者Mac作業系統的朋友來說是一個非常方便的工具, 可以讓我們工作效率提升, 快速切換多個終端畫面進行多工處理, 但使用時難免遇到一些狀況跟需求, 而這次分享的主要是如何複製貼上, 相信這也是大部分使用者會遇到的情境, 因此進行經驗的分享與交流。 輸入指令的快捷
熟悉使用Linux系列的開發者最常接觸的就是Terminal終端機了, 而Terminal終端機要如何有效率的運用? 這裡就來推薦一個神兵利器「tmux」, 他可以開啟我們的多工模式, 快速的游移在各個視窗之中敲打程式指令,加快工作效率。 並且背後運行著Server, 當我們進行大型任務的程式執行
前景提要 故事是這樣的,小明某一天在Linux系統上進行AI模型訓練時, 原本安心的去睡覺了, 沒想到一早起床想要看成功結果時, 竟然有一條可疑的LOG…。 kernel:[1270601.804083] watchdog: BUG: soft lockup - CPU#8 stuck fo
你可能也想看
Google News 追蹤
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇