Docker Container 安全加固 8 招實戰教學 — 由入門到進階

今日同大家吹下水,講下 Docker Container Security 嘅實戰野。作為一個 IT 人,你可能日日都用 Docker,但係你個 container 真係安全咩?唔好諗住「我又唔係咩大公司,邊個會 hack 我」—— 呢個諗法本身就係最大嘅漏洞! 之前幫個客做 security audit,發現佢哋 production 環境啲 container 全部用 root 行、port ...

今日同大家吹下水,講下 Docker Container Security 嘅實戰野。作為一個 IT 人,你可能日日都用 Docker,但係你個 container 真係安全咩?唔好諗住「我又唔係咩大公司,邊個會 hack 我」—— 呢個諗法本身就係最大嘅漏洞!

之前幫個客做 security audit,發現佢哋 production 環境啲 container 全部用 root 行、port 全開、image 係 random pull 返嚟嘅⋯⋯簡直係門戶大開。今日就同大家分享 8 招 Docker 容器安全加固嘅實戰技巧,由淺入深,即學即用。

👉 延伸閱讀:KSPM 實戰入門:Kubernetes 安全自動化完整指南 2026

## 第 1 招:唔好用 root 行 container!

呢個係最最基本但最多人中招嘅位。Default 嘅 Docker container 係用 root 身份行嘅,萬一有人 escape 咗 container,佢喺 host 機都係 root privilege!

解決方法好簡單,Dockerfile 入面加 USER:

“`dockerfile
FROM node:20-alpine
RUN addgroup -g 1001 -S appgroup && adduser -u 1001 -S appuser -G appgroup
USER appuser
WORKDIR /app
COPY –chown=appuser:appgroup . .
CMD [“node”, “server.js”]
“`

或者 docker-compose.yml:

“`yaml
services:
app:
image: myapp:latest
user: “1001:1001”
“`

記住:永遠唔好用 root 行 production container!

## 第 2 招:Read-only filesystem

除非你個 app 真係要寫 file,否則 set 個 filesystem 做 read-only:

“`bash
docker run –read-only –tmpfs /tmp:rw,noexec,nosuid,size=256M myapp:latest
“`

docker-compose 版本:

“`yaml
services:
app:
image: myapp:latest
read_only: true
tmpfs:
– /tmp:rw,noexec,nosuid,size=256M
“`

咁就算 attacker 成功入侵,都冇辦法 drop malware 或者改 config file。

## 第 3 招:Drop 晒所有 capabilities,只加必要嘅

Linux kernel 預設俾咗 container 一堆 capabilities,大部分你根本唔需要。最安全做法係 drop 晒佢,然後只加真正需要嗰啲:

“`bash
docker run –cap-drop=ALL –cap-add=NET_BIND_SERVICE myapp:latest
“`

docker-compose:

“`yaml
services:
app:
cap_drop:
– ALL
cap_add:
– NET_BIND_SERVICE
“`

大部份 web app 只需要 NET_BIND_SERVICE 去 bind port < 1024。如果你個 app 用 port 8080,連呢個都唔使加。 --- ## 第 4 招:用 non-root port(> 1024)

承上,如果唔使用 privileged port,直接令個 app listen 喺高端口:

“`javascript
// Node.js 例子
app.listen(8080, ‘0.0.0.0’);
“`

然後用 reverse proxy(nginx / traefik)做 port mapping。咁你連 NET_BIND_SERVICE 都唔使加,container 真係零 capabilities。

## 第 5 招:限資源!唔好俾 container 食晒成部機

冇 set resource limit 嘅 container 可以食晒你成部機嘅 CPU 同 RAM。一個失控嘅 process 就成部機 crash:

“`yaml
services:
app:
deploy:
resources:
limits:
cpus: ‘0.5’
memory: 512M
reservations:
cpus: ‘0.25’
memory: 256M
“`

或者直接用 docker run:

“`bash
docker run –cpus=”0.5″ –memory=”512m” –memory-swap=”512m” myapp:latest
“`

memory-swap 同 memory 一樣數值 = 禁用 swap。呢個好重要,因為 swap 會將 memory data 寫落 disk,有機會洩露 sensitive data。

## 第 6 招:Scan image vulnerability

唔好信任何 public image!就算係 official image 都可能有漏洞。用 Docker Scout 或者 Trivy 定期 scan:

“`bash
# 用 Trivy(免費開源)
trivy image myapp:latest

# 用 Docker Scout
docker scout quickview myapp:latest
docker scout cves myapp:latest
“`

可以整合落 CI/CD pipeline:

“`yaml
# GitHub Actions 例子
– name: Scan image
uses: aquasecurity/trivy-action@master
with:
image-ref: ‘myapp:${{ github.sha }}’
format: ‘sarif’
output: ‘trivy-results.sarif’
severity: ‘CRITICAL,HIGH’
“`

Critical 同 High severity 嘅漏洞要 fix 咗先 deploy,呢個係底線。

## 第 7 招:Network segmentation – internal network only

唔好將所有 container 曝露喺 public network。用 internal network 隔離:

“`yaml
networks:
frontend:
driver: bridge
backend:
driver: bridge
internal: true # 呢個 network 唔可以出 internet!

services:
nginx:
networks:
– frontend
– backend
api:
networks:
– backend
db:
networks:
– backend
“`

`internal: true` 嘅 network 入面嘅 container 完全冇 internet access。Database、Redis、內部 API 全部放呢度。

## 第 8 招:Secrets management – 唔好 hardcode!

最後但唔係最唔重要:唔好將 API key、database password hardcode 喺 environment variables 或者 config file!用 Docker secrets:

“`bash
echo “MyDBSecurePass123!” | docker secret create db_password –
“`

docker-compose(Swarm mode):

“`yaml
services:
app:
secrets:
– db_password

secrets:
db_password:
external: true
“`

Secret 會以 tmpfs 形式 mount 喺 `/run/secrets/db_password`,唔會留喺 image layer、唔會出現喺 `docker inspect` output。

## 總結

Docker security 唔係咩高深學問,而係一連串嘅好習慣。以上 8 招,你可能已經做咗一半,但如果仲有漏嘅,今日開始補返。記住一句口訣:

**「唔好用 root、drop capabilities、限資源、scan 漏洞、isolate network、管好 secrets」**

搞掂呢幾樣,你個 container environment 已經比市面上 80% 嘅 setup 安全。下次有機會再同大家傾下 Kubernetes security,仲多野玩!

🔗 參考資料:Docker 官方安全文件

Take care,stay secure!🛡️

#IT教學 #Docker #技術分享 #安全 #Security