Docker 容器化部署最佳实践
Docker 已经成为应用部署的标准方式。以下是一些实用的最佳实践。
Dockerfile 优化
多阶段构建
# 构建阶段
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o server .
# 运行阶段
FROM alpine:3.19
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/server .
EXPOSE 8080
CMD ["./server"]
最终镜像只包含二进制文件和必要的运行时,体积从 1GB+ 降到 20MB 以内。
最小化层数
# 不好:多层 RUN
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get clean
# 好:合并为一层
RUN apt-get update && \
apt-get install -y curl && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
利用缓存
把不常变化的层放在前面:
# 先复制依赖文件
COPY go.mod go.sum ./
RUN go mod download
# 再复制源码
COPY . .
RUN go build -o server .
安全实践
非 root 用户运行
RUN adduser -D appuser
USER appuser
使用特定版本标签
# 不好
FROM node:latest
# 好
FROM node:20-alpine
扫描镜像漏洞
docker scan myapp:latest
Docker Compose
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- DB_PATH=/data/blog.db
volumes:
- ./data:/data
restart: unless-stopped
总结
好的 Docker 实践能让部署更安全、更高效、更可复现。