iT邦幫忙

2025 iThome 鐵人賽

DAY 2
1
Cloud Native

從 Docker 到 K8s:我的 30 天雲原生筆記系列 第 2

Day 2: Docker 是什麼?一切從這個「萬能貨櫃」開始

  • 分享至 

  • xImage
  •  

哈囉,大家好!

在昨天的 Day 1 開場白 中,我們立下了 30 天的挑戰目標,並規劃了一張從 Docker 走向 K8s 的實戰地圖。今天,我們就正式踏上旅程的第一站,來聊聊這一切的起點:Docker。

我們的目標很簡單:用最生活化的方式,讓你徹底搞懂 Docker 究竟是什麼,以及它為什麼能成為現代軟體開發的標準配備。

開發者永遠的痛:「在我電腦上可以跑啊!」

不知道大家在寫程式或做學校專案的時候,有沒有遇過這種讓人想翻桌的狀況:

「欸,這段 code 在我電腦上跑得好好的,怎麼傳給你就不動了?」
「為什麼你那邊顯示的畫面跟我這邊完全不一樣?」
「可惡,為了跑這個程式,我還要安裝一大堆有的沒的,超麻煩!」

這些 OS 是不是很熟悉?這就是軟體開發界傳說中的大魔王——「環境不一致」

每個人的電腦設定、安裝的軟體版本、作業系統都有些微差異,就像每個人的書包裡裝的東西都不一樣,導致同一個程式在不同環境下,會產生千奇百怪的問題。

為了解決這個世紀大難題,一群聰明的工程師就發明了一個叫做 Docker 的酷東西。

Docker:給程式碼用的「標準化貨櫃」

簡單一句話解釋:Docker 就像是一個標準化的「貨櫃」,你可以把你的應用程式(App)跟它需要的所有東西(例如特定版本的程式語言、資料庫、設定檔等等)全部打包進去。

從此以後,你不用再把你的程式碼單獨交給別人,而是直接給他一整個「貨櫃」。這個貨櫃不管是在你的 Windows 電腦、同學的 Mac,還是未來公司的大型 Linux 伺服器上,打開來跑的樣子,都會一模一樣!完美解決了「在我電腦上可以跑」的惡夢。

用「貨櫃」來想就對了!

讓我們先來深化這個「貨櫃」的比喻。

https://ithelp.ithome.com.tw/upload/images/20250909/20178656UE2GEZOvTt.jpg

想像一下,你要從台灣運送一輛超跑、一箱香蕉和一組 IKEA 家具到美國。如果沒有貨櫃,會發生什麼事?

  • 超跑:需要特殊的固定架,怕被刮傷。
  • 香蕉:需要低溫冷藏,怕會爛掉。
  • IKEA 家具:需要防潮,怕木板變形。

碼頭工人看到這些零散的東西肯定一個頭兩個大,搬運起來超麻煩,而且很容易出錯(把超跑拿去冷凍,香蕉日曬雨淋...)。

但有了「貨櫃」之後呢?

你只要把超跑、香蕉、家具各自用最適合的方式打包好,然後通通裝進一個個標準尺寸的貨櫃裡。對於碼頭的起重機、貨船、卡車來說,它們根本不需要知道裡面裝的是什麼。它們只認得這個標準的「箱子」,任務就是把箱子從 A 點安全地運到 B 點。

在這個比喻中:

  • 貨物(超跑、香蕉、家具) = 你的應用程式
  • 特殊的打包方式(固定架、冷藏、防潮) = 你的程式所需要的「環境依賴」 (例如 Python 3.9 版、MySQL 8.0 資料庫...)
  • 貨櫃 = Docker Container (容器)
  • 起重機、貨船、卡車 = 硬體設施 (你的筆電、雲端主機...)

Docker 的核心概念就是「隔離」與「標準化」。它創造了一個個被稱為「容器 (Container)」的獨立小空間,你的程式就在這個與世隔絕的小套房裡快樂地運行,自給自足,不被外界干擾,也不會去干擾別人。

Docker 的三大超能力

聽起來很酷,但這對我們到底有什麼具體的好處?

超能力一:環境標準化,告別「在我電腦上可以跑」的惡夢!

這是 Docker 最根本的價值。用了 Docker 之後,開發流程會變成這樣:

  1. 開發者 A:把寫好的網站和它需要的環境,打包成一個 Docker 貨櫃。
  2. 分享:A 把這個貨櫃(不是程式碼喔,是整個貨櫃!)分享給 B。
  3. 開發者 B:拿到這個貨櫃,用 Docker 打開,看到的、跑起來的結果,跟 A 那邊保證 100% 一樣。
  4. 上線:未來要部署到伺服器時,也是把這個貨櫃放上去就好。

整個過程就像在傳遞一個完美的「程式膠囊」,確保了從開發、測試到上線,每一站的環境都完全相同。

超能力二:超強的可攜性,搬家超輕鬆!

因為 Docker 貨櫃是標準化的,所以它可以極度自由地「搬家」。今天你的程式跑在你的筆電上,明天想把它搬到 Google Cloud 或 Amazon AWS 這些雲端平台上,完全沒問題!你不需要重新安裝設定,只要把整個貨櫃搬過去,啟動,就搞定了。

超能力三:輕巧又高效率— 一場 IT 架構的演進史

要真正理解 Docker 的輕巧所帶來的革命,我們得先搭時光機,回到 Docker 出現之前的時代。

https://ithelp.ithome.com.tw/upload/images/20250909/2017865662wLg0RdgP.jpg

1. 最初的年代:一台主機,一個應用
很久以前,公司會買一台實體伺服器(主機),在上面安裝一個作業系統(例如 Linux),然後部署一個應用程式。這帶來一個巨大的問題:資源浪費。如果這個應用程式只用掉了 10% 的 CPU 和記憶體,那剩下 90% 的昂貴硬體資源就只能在那裡納涼。

2. 虛擬機 (VM) 的誕生:解決「資源浪費」的英雄
為了解決這個問題,虛擬機 (Virtual Machine, VM)應運而生。VM 就像是一位空間管理大師,它允許你在一台實體主機上,模擬出好幾台獨立的「虛擬」電腦。

  • VM 解決了什麼問題? 它讓一台主機可以同時運行多個應用程式(每個跑在自己的 VM 裡),大大提升了硬體資源的利用率。
  • 它是怎麼做到的?
    這背後的核心技術稱為 Hypervisor (虛擬機監控器)。你可以把 Hypervisor 想像成那個負責管理土地、分配地基和水電管線的「營造工頭」。它直接在硬體之上,切分出獨立的資源區塊,然後在每個區塊上蓋起一間設備齊全、有獨立水電管線和地基的「獨立小木屋」。每間小木屋都是一個完整的作業系統 (Guest OS),彼此完全隔離。

3. VM 的瓶頸:為什麼有了 VM 還需要 Docker?
VM 非常成功,至今仍是雲端運算的基石。但它也帶來了新的問題:笨重與低效。

  • 笨重:每間「小木屋」(VM) 都是一個完整的作業系統,體積動輒數 GB 到數十 GB。
  • 啟動慢:啟動一個 VM 就像真的在開機,需要花費數分鐘的時間。
  • 資源消耗:每間小木屋都有自己的地基和水電系統,這本身就消耗了大量的資源。

4. Docker 的革命:解決「笨重低效」的挑戰者
就在大家覺得蓋「小木屋」太慢太貴的時候,Docker 帶著「容器 (Container)」技術登場了。

  • Docker 解決了什麼問題? 它解決了 VM 的笨重與低效問題,讓我們能用更少的資源、更快的速度,運行更多的應用程式。
  • 它是怎麼做到的?
    Docker 的核心是 Docker Engine (Docker 引擎)。如果 Hypervisor 是「營造工頭」,那 Docker Engine 就像是負責佈置大樓內部空間的「管家兼室內設計師」。
    它不像 Hypervisor 那樣需要自己蓋房子,而是直接佈置大樓裡現有的「空房間」。所有房間都共用大樓本來的地基和總水電管線(主機的作業系統核心),Docker Engine 只負責幫每個房間隔間、上鎖(透過 Namespaces 和 cgroups 技術),並放入各自的家具(應用程式)。

https://ithelp.ithome.com.tw/upload/images/20250909/20178656P7QbbSSEuC.png

因為只多了「隔間和家具」,而不是整套系統,所以容器可以做到:

  • 極度輕量:體積通常只有幾十 MB。
  • 秒級啟動:幾乎是瞬間就能啟動或停止。
  • 高密度部署:在同一台主機上,你可以佈置幾十個甚至上百個「房間」(容器),但可能只能蓋幾間「小木屋」(VM)。

結論:觀念建立,準備實戰!

今天,我們透過「貨櫃」的比喻,理解了 Docker 誕生的初衷——解決開發者心中永遠的痛「環境不一致」。我們也透過一場 IT 架構的演進史,明白了 Docker 是如何站在虛擬機的肩膀上,解決了其笨重與低效的問題,帶來了輕量、快速的革命。

你可能已經很好奇,這個神奇的貨櫃到底是怎麼來的?又是如何運作的呢?在 Docker 的世界裡,這一切都圍繞著我們之後會反覆提到的兩個核心角色:「映像檔 (Image)」與「容器 (Container)」,也是我們接下來旅程的主角。

在明天的文章中,我們就要來實際動手,把 Docker 安裝起來,並運行我們人生中的第一個 Hello World 容器!


上一篇
Day 1: 【前言】從 Docker 到 K8s!我的30天雲原生筆記
下一篇
Day 3: 初探 Docker:安裝與你的第一個 Hello World 容器
系列文
從 Docker 到 K8s:我的 30 天雲原生筆記3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言