Skip to content

Docker 容器化部署实践

简介

Docker 是一个开源的容器化平台,可以将应用及其依赖打包成标准化的容器。

Dockerfile 编写

基本结构

dockerfile
# 使用官方 Python 镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

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

# 复制项目代码
COPY . .

# 暴露端口
EXPOSE 8000

# 启动命令
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

多阶段构建

dockerfile
# 构建阶段
FROM node:18-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 生产阶段
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Docker Compose

基本配置

yaml
version: '3.8'

services:
  database:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydb
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"

  backend:
    build: ./backend
    depends_on:
      - database
    environment:
      DB_HOST: database
      DB_PORT: 3306
    ports:
      - "8000:8000"

  frontend:
    build: ./frontend
    ports:
      - "3000:80"
    depends_on:
      - backend

volumes:
  mysql_data:

最佳实践

  1. 使用 .dockerignore 排除不必要的文件
  2. 合理利用镜像层缓存
  3. 使用多阶段构建减小镜像体积
  4. 不要在容器中存储持久化数据,使用 volumes
  5. 为每个环境使用不同的 compose 文件

常用命令

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

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

# 使用 Compose
docker compose up -d
docker compose down
docker compose logs -f

# 查看容器
docker ps
docker logs <container_id>

总结

Docker 简化了应用的部署和运维,是现代应用开发不可或缺的工具。