Docker fundamentals與install

在開始實際操作之前,我們needs先花一點時間建立正確 「容器化世界觀」。理解了 Docker 為了解決什麼問題而生,你在後續 學習中就會更有方向感。

為什麼traditional部署方式會出問題?

想像一下,你是一位廚師,開發了一道全新 料理。你在自己 廚房(development environment)中完美地完成了這道菜,但當你要把這道菜帶到朋友家(生產環境)去展示時,你發現:

  • 朋友家 爐子跟你家 品牌不同(作業系統差異)
  • 他 鍋子尺寸不對(套件版本不同)
  • 缺少了你needs 某種調味料(系統依賴缺失)
  • 他 廚房擺設完全不一樣(環境變數與設定檔不同)

結果就是:你在家完美 料理,在朋友家完全做不出來。這就是軟體開發中最經典 噩夢:「Works on My Machine」症候群

traditional虛擬機 (VM) 解決方案與限制

在 Docker 出現之前,業界使用「虛擬機 (Virtual Machine)」來解決這個問題。虛擬機 概念是:在實體computers上模擬出一整台「虛擬」 computers,包含complete作業系統核心 (OS Kernel)。

VM 優點:

  • 完全隔離,安全性高
  • 可以在 Windows 上跑 Linux 環境

VM 缺點:

  • 重量級:每個 VM 都包含了complete Guest OS,佔用數 GB 硬碟空間
  • 啟動慢:開機needs數分鐘(因為要啟動整個作業系統)
  • 資源浪費:就算只跑a小程式,也needscomplete OS 支援
  • 移植性差:VM Image 體積巨大,傳輸與部署都很困難

Docker 容器化技術 core concepts

Docker 提出了a革命性 思維:「我們不needscomplete作業系統,我們只needs應用程式運行所需 最小環境。」

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

| features | 虛擬機 (VM) | Docker 容器 | |------|------------|------------| | 啟動speed | 數分鐘 | 數秒鐘 | | 硬碟空間 | GB 等級 | MB 等級 | | 效能損耗 | 15-20% 損耗 | 接近原生 | | 核心共享 | 不共享,每個 VM 有自己 OS Kernel | 共享宿主機 OS Kernel | | 隔離層級 | 完整硬體虛擬化 | 行程層級隔離 (Namespace) |

簡單來說:

  • VM 是 「模擬一台computers」,每台computers都要裝自己 作業系統
  • Docker 是 「創造a隔離 執行環境」,all容器共用同a作業系統核心,只隔離檔案系統、網路、行程等資源

Docker three核心元件

為了理解 Docker 如何運作,你needs記住以下三個關鍵角色:

1. Docker Engine (Docker 引擎) 這是 Docker 核心程式,是a在背景執行 守護行程 (Daemon)。它負責managedall容器 生命週期:建立、啟動、停止、刪除容器。

2. Docker Image (映像檔) Image 是a唯讀 模板,裡面包含了應用程式及其all依賴(程式碼、系統函式庫、環境變數、設定檔)。你可以把它想像成「光碟映像檔」或是「install光碟」——它本身是唯讀 ,但你可以用它來建立多個容器。

3. Docker Container (容器) Container 是 Image 運行實例。當你從 Image 啟動a容器時,Docker Engine 會在 Image 上方加上a可寫層 (Writable Layer),讓容器可以正常讀寫檔案。你可以把 Container 想像成「用install光碟開機後正在運行 computers」。

Docker 運作流程圖

Dockerfile (建置腳本)
     ↓ docker build
Docker Image (唯讀模板)
     ↓ docker run
Docker Container (運行實例)
     ↓ 可以有多個
Container 1  ─── 應用 A
Container 2  ─── 應用 B
Container 3  ─── 應用 C

install Docker Desktop

Docker Desktop 是 Docker 官方提供 圖形化工具,它simultaneously包含了 Docker Engine、Docker CLI 以及 Docker Compose,讓你可以在自己 computers上輕鬆使用 Docker。

macOS install步驟

步驟 1:確認系統需求

  • macOS 必須是 macOS 11 (Big Sur) 或更新版本
  • computers必須是 2020 年以後 Apple Silicon (M1/M2/M3) 或 Intel 晶片

步驟 2:下載 Docker Desktop 請前往 Docker 官方網站下載 macOS 版本 Docker Desktop:

🔗 https://www.docker.com/products/docker-desktop/

選擇 Apple Chip(如果你是 M1/M2/M3 Mac)或 Intel Chip

步驟 3:install Docker Desktop

  1. 雙擊下載 .dmg 檔案
  2. Docker.app 拖曳到 Applications 資料夾
  3. 開啟 Docker.app(首次開啟可能needs允許安全性驗證)
  4. 等待 Docker Engine 啟動(會看到狀態列上 鯨魚圖示)

步驟 4:驗證install

install完成後,打開你 終端機 (Terminal),輸入以下指令來確認 Docker 已經正常運作:

docker version

你會看到類似以下 輸出:

Client: Docker Engine - Community
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7

Server: Docker Engine - Community
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)

如果你看到了 ClientServer 資訊,就代表 Docker 已經成功install並運行!

⚠️ 常見問題: 如果你只看到 Client 但沒有 Server,代表 Docker Engine 沒有正常啟動。請確認 Docker Desktop 狀態列圖示是綠色 ,如果沒有,點擊圖示選擇「Start Docker Desktop」。

Windows install步驟(給 Parallels 或雙系統 使用者)

如果你是使用 Windows 開發者:

  1. 下載 Docker Desktop for Windows:https://www.docker.com/products/docker-desktop/
  2. 確認你 Windows 已啟用 WSL 2 (Windows Subsystem for Linux 2)
  3. install過程中選擇 Use WSL 2 instead of Hyper-V(效能更好)
  4. install完成後重啟computers

Linux install步驟

如果你是使用 Ubuntu/Debian 系列 Linux 使用者,可以直接透過系統套件managed工具install:

# 更新套件列表
sudo apt update

# 安裝 Docker
sudo apt install docker.io

# 啟動 Docker 服務
sudo systemctl start docker
sudo systemctl enable docker

# 將你的使用者加入 docker 群組(避免每次都要 sudo)
sudo usermod -aG docker $USER

# 重新登入後生效

[!TIP] install完成後,請執行 docker run hello-world 來測試。如果看到 Hello from Docker! 歡迎訊息,就代表一切正常!

install kubectl(Kubernetes CLI)

by於我們 最終目標是將容器部署到 Kubernetes 上,我們可以先install kubectl 指令工具。

macOS install kubectl

# 使用 Homebrew 安裝(最簡單)
brew install kubectl

# 驗證安裝
kubectl version --client

輸出範例:

Client Version: v1.28.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

驗證最終環境

install完成後,請確認你 development environment是否準備就緒:

# 確認 Docker 可正常運行
docker run hello-world

# 確認 kubectl 已安裝
kubectl version --client

如果你兩者都能順利執行,恭喜你!你 容器化development environment已經準備完成。

本日總結

在本章中,你學到了:

  1. traditional部署 問題:環境不一致導致「Works on My Machine」 噩夢
  2. Docker 與 VM 差異:Docker 更輕量、更快、資源使用效率更高
  3. three核心元件:Docker Engine → Image → Container 運作流程
  4. install Docker Desktop:在你 computers上成功install了 Docker 執行環境
  5. install kubectl:為後續 Kubernetes 學習做好準備

下一章,我們將實際撰寫第a Dockerfile,將你寫好 應用程式打包成標準 Docker Image!

会員限定無料チュートリアル

このチャプターは登録会員限定の無料コンテンツです!ログインまたは登録してすぐにロックを解除してください。

今すぐログイン / 登録