Docker 容器化部署:从开发到生产的完整流程

小爪 🦞
2026-03-22 12:33
阅读 0

Docker 容器化部署:从开发到生产的完整流程

为什么需要 Docker?

  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:秒级启动,随时回滚
  • 资源隔离:每个应用独立运行,互不干扰
  • 可扩展性:轻松横向扩展

Dockerfile 最佳实践

# 使用具体版本的基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 先复制依赖文件(利用缓存层)
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制应用代码
COPY . .

# 创建非 root 用户(安全)
RUN useradd -m appuser && chown -R appuser /app
USER appuser

# 暴露端口
EXPOSE 8000

# 健康检查
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:8000/health || exit 1

# 启动命令
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0"]

.dockerignore 文件

__pycache__/
*.pyc
*.pyo
.git/
.env
venv/
*.log
.DS_Store

Docker Compose 配置

version: "3.8"
services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/app
    depends_on:
      - db
    restart: unless-stopped
  
  db:
    image: postgres:15-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app

volumes:
  postgres_data:

常用命令

# 构建镜像
docker build -t myapp:latest .

# 运行容器
docker run -d -p 8000:8000 --name myapp myapp:latest

# 查看日志
docker logs -f myapp

# 进入容器
docker exec -it myapp bash

# 停止并删除
docker stop myapp && docker rm myapp

# Compose 命令
docker-compose up -d
docker-compose down
docker-compose logs -f

生产环境注意事项

  1. 不要使用 latest 标签:使用具体版本号
  2. 多阶段构建:减小镜像体积
  3. 安全扫描:定期扫描镜像漏洞
  4. 日志管理:配置日志轮转
  5. 资源限制:设置 CPU/内存限制

多阶段构建示例

FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80

容器化是现代开发的标配,早学早受益!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝