Docker 容器基礎概念與安裝

Introduction to Docker container basics, installation guide, and essential commands

Docker 簡介

Docker 是一個開源的容器化平台,讓開發者能夠將應用程式及其相依套件打包成一個輕量級、可移植的容器。透過 Docker,您可以確保應用程式在任何環境中都能以相同的方式運行,無論是開發、測試還是生產環境。

Docker 的核心優勢

  • 一致性:消除「在我的電腦上可以跑」的問題
  • 隔離性:每個容器都是獨立運行的環境
  • 可移植性:容器可以在任何支援 Docker 的平台上運行
  • 效率:相比傳統虛擬機,容器更加輕量且啟動速度快
  • 版本控制:可以追蹤容器映像檔的變更歷史

容器 vs 虛擬機

虛擬機 (Virtual Machine)

虛擬機透過 Hypervisor 在實體硬體上模擬完整的作業系統環境:

  • 包含完整的客體作業系統 (Guest OS)
  • 需要較多的系統資源(CPU、記憶體、儲存空間)
  • 啟動時間較長(通常需要數分鐘)
  • 提供較高的隔離性

容器 (Container)

容器共享宿主機的作業系統核心,僅包含應用程式和相依套件:

  • 不需要額外的作業系統
  • 資源消耗極低
  • 啟動時間極短(通常只需數秒)
  • 更適合微服務架構

比較表格

特性虛擬機容器
啟動時間數分鐘數秒
資源消耗
隔離性完全隔離程序級隔離
可移植性較差極佳
映像檔大小GB 級別MB 級別

安裝步驟

在 Ubuntu 上安裝 Docker

  1. 更新套件索引
1
sudo apt-get update
  1. 安裝必要的相依套件
1
2
3
4
5
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. 新增 Docker 官方 GPG 金鑰
1
2
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. 設定 Docker 套件庫
1
2
3
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安裝 Docker Engine
1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 驗證安裝
1
sudo docker run hello-world

讓非 root 使用者可以執行 Docker

1
2
sudo usermod -aG docker $USER
newgrp docker

基本指令

系統資訊

1
2
3
4
5
6
7
8
# 查看 Docker 版本
docker version

# 查看 Docker 系統資訊
docker info

# 查看 Docker 磁碟使用情況
docker system df

容器操作指令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 列出執行中的容器
docker ps

# 列出所有容器(包含已停止的)
docker ps -a

# 啟動容器
docker start <container_id>

# 停止容器
docker stop <container_id>

# 重新啟動容器
docker restart <container_id>

# 刪除容器
docker rm <container_id>

# 強制刪除執行中的容器
docker rm -f <container_id>

執行容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 基本執行
docker run <image_name>

# 以互動模式執行
docker run -it <image_name> /bin/bash

# 在背景執行
docker run -d <image_name>

# 指定容器名稱
docker run --name my-container <image_name>

# 映射連接埠
docker run -p 8080:80 <image_name>

# 掛載磁碟區
docker run -v /host/path:/container/path <image_name>

映像檔與容器操作

映像檔管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 搜尋映像檔
docker search <image_name>

# 下載映像檔
docker pull <image_name>

# 列出本地映像檔
docker images

# 刪除映像檔
docker rmi <image_id>

# 清理未使用的映像檔
docker image prune

建立自訂映像檔

建立一個名為 Dockerfile 的檔案:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 基礎映像檔
FROM ubuntu:22.04

# 維護者資訊
LABEL maintainer="your-email@example.com"

# 更新系統並安裝套件
RUN apt-get update && apt-get install -y \
    nginx \
    && rm -rf /var/lib/apt/lists/*

# 複製檔案到容器
COPY index.html /var/www/html/

# 設定工作目錄
WORKDIR /var/www/html

# 開放連接埠
EXPOSE 80

# 啟動指令
CMD ["nginx", "-g", "daemon off;"]

建立映像檔:

1
docker build -t my-nginx:v1 .

容器日誌與監控

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看容器日誌
docker logs <container_id>

# 即時追蹤日誌
docker logs -f <container_id>

# 查看容器資源使用情況
docker stats

# 查看容器詳細資訊
docker inspect <container_id>

# 進入執行中的容器
docker exec -it <container_id> /bin/bash

資料持久化

Docker 提供兩種主要的資料持久化方式:

1. Volumes(磁碟區)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 建立磁碟區
docker volume create my-volume

# 使用磁碟區啟動容器
docker run -v my-volume:/data <image_name>

# 列出所有磁碟區
docker volume ls

# 刪除磁碟區
docker volume rm my-volume

2. Bind Mounts(綁定掛載)

1
2
# 將主機目錄掛載到容器
docker run -v /host/path:/container/path <image_name>

總結

Docker 是現代軟體開發和部署不可或缺的工具。透過容器化技術,我們可以:

  1. 簡化應用程式的部署流程
  2. 確保開發與生產環境的一致性
  3. 提高資源利用效率
  4. 加速持續整合與持續部署 (CI/CD) 流程

掌握 Docker 的基本概念和操作指令後,您可以進一步學習 Docker Compose 進行多容器編排,以及 Kubernetes 進行容器叢集管理。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy