Home
avatar

.Sam

Docker 容器化部署实践

为什么要容器化

传统部署方式常常面临”在我机器上能跑”的问题。Docker 通过将应用及其依赖打包成镜像,确保了环境的一致性。

编写 Dockerfile

一个 Node.js 项目的多阶段构建示例:

# 构建阶段
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

# 运行阶段
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]

多阶段构建的好处是最终镜像只包含运行时必要的文件,体积更小。

Docker Compose 编排

对于多服务应用,使用 Docker Compose 来编排:

version: "3.8"
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://db:5432/myapp
    depends_on:
      - db
      - redis

  db:
    image: postgres:16-alpine
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  pgdata:

常用命令速查

命令说明
docker build -t myapp .构建镜像
docker run -d -p 3000:3000 myapp后台运行容器
docker compose up -d启动所有服务
docker compose logs -f web查看服务日志
docker system prune -a清理未使用资源

生产环境注意事项

  • 不要在镜像中存储敏感信息,使用环境变量或 secrets
  • 设置健康检查确保服务可用性
  • 限制容器资源使用,避免单个容器耗尽主机资源
  • 使用 .dockerignore 排除不必要的文件

容器化是现代应用部署的基础,掌握 Docker 能让你的部署流程更加可靠和高效。

Docker DevOps