Docker 安全 5 步教學:由 Root 到鐵壁防線,零基礎都跟到嘅 Container 加固指南

## 前言:點解你要關心 Docker 安全? 而家做 IT 嘅,十個有九個都用過 Docker。Container 又快又方便,開發環境一行 `docker run` 就搞掂。但你有冇諗過——你嗰個 Nginx container 入面,究竟係咪真係安全? 根據 Palo Alto Networks 2026 年報告,超過 60% 嘅雲端安全漏洞都同 Docker 容器配置不當有關。AI 時代嘅...

## 前言:點解你要關心 Docker 安全?

而家做 IT 嘅,十個有九個都用過 Docker。Container 又快又方便,開發環境一行 `docker run` 就搞掂。但你有冇諗過——你嗰個 Nginx container 入面,究竟係咪真係安全?

👉 延伸閱讀:Linux Server 安全加固 6 步搞掂 — Defense in Depth 實戰指南

根據 [Palo Alto Networks 2026 年雲端安全報告](https://molious.com/) 嘅數據,超過 60% 嘅雲端安全漏洞都同 Docker 容器配置不當有關。AI 時代嘅攻擊者已經唔係淨係掃 port 咁簡單,佢哋識得自動化掃描 Docker API、濫用 privileged mode、甚至直接 escape container。

今日呢篇 **Docker 安全** 教學,我帶你一步步加固你嘅 Docker 環境,由基礎到進階,5 步打造鐵壁防線。

## Docker 安全第一步:唔好用 root 行 container

最多人中招嘅位,就係用 root user 行 container。預設情況下,Docker container 入面嘅 process 係以 root 權限運行——雖然佢唔係 host 嘅 root,但一旦有逃逸漏洞(container escape),攻擊者就直接攞到 host root。

### 解決方法:USER 指令

喺你個 Dockerfile 入面加返一個 non-root user:

FROM nginx:alpine

# Docker 安全:建立 non-root user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 切換到 non-root user
USER appuser

COPY . /usr/share/nginx/html

如果要用返現成 image,可以喺 `docker run` 加 `–user`:

# Docker 安全:用 non-root user 行 container
docker run --user 1000:1000 nginx:alpine

## Docker 安全第二步:鎖死 Capabilities + 關 Privileged Mode

Linux kernel 有幾十種 capabilities(權限模組),Docker 預設會俾 container 一定數量嘅 capabilities。但你根本唔需要咁多!

**最重要嘅 Docker 安全設定:永遠唔好用 `–privileged`!** Privileged mode 會俾 container 直接存取 host 所有裝置,等於打開大門歡迎攻擊者。

# ❌ 極危險 Docker 安全漏洞
docker run --privileged nginx

# ✅ 正確做法:drop 晒所有 capabilities,只加必要嘅
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx

常用安全 capability 組合:

# Docker 安全最佳實踐:最小權限原則
docker run \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  --cap-add=CHOWN \
  --read-only \
  --tmpfs /tmp \
  nginx:alpine

`–read-only` 令 root filesystem 變成唯讀,防止攻擊者寫入惡意檔案。`–tmpfs /tmp` 俾返一個暫存空間你寫 log。

## Docker 安全第三步:Network Segmentation

Container 之間預設可以互相通訊——呢個係 Docker 安全嘅一大隱患。萬一一個 container 俾人 hack 咗,攻擊者可以橫向移動去其他 container。

### 建立獨立 network:

# Docker 安全:建立隔離網絡
docker network create --driver bridge isolated_net

# 淨係將需要互相通訊嘅 container 放埋一齊
docker run --network isolated_net --name web nginx
docker run --network isolated_net --name api my-app

# Database 用另一個獨立 network
docker network create --driver bridge --internal db_net
docker run --network db_net --name postgres postgres:16

`–internal` 嘅 network 唔會連去外部網絡,database container 淨係可以俾同 network 嘅 container 存取,外面完全接觸唔到。

## Docker 安全第四步:Image Scanning + 精簡 Base Image

你成日 `docker pull` 返嚟嘅 image,入面有冇漏洞?用 `docker scout` 或者 Trivy 掃一掃:

# Docker 安全:掃描 image 漏洞
docker scout quickview nginx:latest

# 或用 Trivy
trivy image nginx:latest

另外,用 minimal base image 可以大幅減少 attack surface:

# ❌ 肥大 base image
FROM ubuntu:22.04

# ✅ 精簡 base image(Docker 安全最佳實踐)
FROM alpine:3.20
# 或者用 distroless(完全冇 shell,attack surface 極低)
FROM gcr.io/distroless/nodejs20

記住:**你唔需要嘅嘢就唔好裝**。每個 package 都可能係下一個 CVE 嘅入口。

## Docker 安全第五步:Resource Limits + Seccomp / AppArmor

即使 container 冇俾人 hack,一個失控嘅 process 都可以食晒你 host 嘅 CPU/RAM——呢個係 Docker 安全嘅 Availability 層面。

# Docker 安全:限制資源使用
docker run \
  --memory="512m" \
  --cpus="1.0" \
  --pids-limit=100 \
  nginx:alpine

### Seccomp Profile:Container 嘅 Firewall

Seccomp(Secure Computing Mode)可以限制 container 入面嘅 system call。Docker 預設已經有一個 seccomp profile,但你都可以自訂:

# Docker 安全:自訂 seccomp profile
docker run --security-opt seccomp=/path/to/custom-seccomp.json nginx

## 總結

**Docker 安全** 唔係 optional——佢係必須嘅基本功。總結五步:

| 步驟 | 重點 |
|——|——|
| 第一步 | 唔好用 root,用 `USER` 指令 |
| 第二步 | Drop 晒 capabilities,唔好用 privileged |
| 第三步 | Network segmentation,隔離 container |
| 第四步 | 掃描 image + 用精簡 base image |
| 第五步 | Resource limits + Seccomp |

AI 時代嘅攻擊者只會愈嚟愈聰明。Docker 安全嘅每一步,都可能係擋住下一次攻擊嘅關鍵。與其等俾人 hack 先補鑊,不如而家就開始加固你嘅 Docker 環境。

**延伸思考:** 你公司嘅 Docker 環境有冇行 CIS Benchmark?有冇用 Docker Bench Security 做過 audit?如果冇——聽日嘅第一個 task 應該就係 run:

docker run --rm --net host --pid host --userns host \
  --cap-add audit_control \
  -v /etc:/etc:ro \
  -v /usr/bin/docker:/usr/bin/docker:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  docker/docker-bench-security

🔗 參考資料:NVD NIST 漏洞資料庫

就係咁簡單。動手啦 💪

#Docker #Docker安全 #ContainerSecurity #DevSecOps #CyberSecurity