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 实践能让部署更安全、更高效、更可复现。

Docker