【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
留言分享你的想法!
avatar-img
阿Han的沙龍
139會員
304內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
阿Han的沙龍的其他內容
2024/12/04
當我們在Ubuntu下載 cursor 這套編輯工具並進行以下步驟安裝時: sudo apt-get install libfuse2 chmod +x cursor-0.42.5x86_64.AppImage ./cursor-0.42.4x86_64.AppImage sudo mv
Thumbnail
2024/12/04
當我們在Ubuntu下載 cursor 這套編輯工具並進行以下步驟安裝時: sudo apt-get install libfuse2 chmod +x cursor-0.42.5x86_64.AppImage ./cursor-0.42.4x86_64.AppImage sudo mv
Thumbnail
2024/06/25
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
2024/06/25
咦! 怎麼啟動個docker compose up -d就出現了可疑的訊息: +] Running 2/2d orphan containers ([xxxx]) for this project. If you removed or renamed this service in your
Thumbnail
2023/12/19
情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
Thumbnail
2023/12/19
情境描述 小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
Docker是由GO語言實現,是一個在GitHub上開發原始碼的專案。它的目標是實現羽量級的作業系統虛擬化。讓使用者操作Docker,就像是操作一個羽量級的虛擬機器。 優勢 快速發表和部署 高效的部署和擴充 資源使用率高 管理簡單 核心 Image映像檔 Docker
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
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 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
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A
Thumbnail
講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News