Skip to content

容器化部署(Docker)课程计划

课程概述

本课程分为 8 节课,每节课 20-40 分钟,总时长约 120-150 分钟。通过理论讲解和实践操作,深入理解 Docker 容器化的实现方法。

第 1 课:课程介绍与环境准备(5 分钟)

学习目标

  • 了解课程内容和目标
  • 安装 Docker
  • 验证 Docker 安装

课程内容

  1. 课程介绍

    • Docker 的特点
    • 容器化的优势
    • 课程结构安排
  2. 环境准备

    • 安装 Docker
    • 验证安装
    • 配置 Docker

实践操作

bash
# 验证 Docker 安装
docker --version
docker info

# 运行测试容器
docker run hello-world

预期输出

Docker version 24.0.0
Hello from Docker!

第 2 课:Docker 基础(15 分钟)

学习目标

  • 理解 Docker 核心概念
  • 掌握 Docker 命令
  • 学习容器管理

课程内容

  1. Docker 核心概念

    • 镜像
    • 容器
    • 仓库
  2. Docker 命令

    • 镜像命令
    • 容器命令
    • 网络命令
  3. 容器管理

    • 创建容器
    • 启动容器
    • 停止容器

实践操作

bash
# 拉取镜像
docker pull nginx:alpine

# 运行容器
docker run -d -p 80:80 --name my-nginx nginx:alpine

# 查看容器
docker ps

# 停止容器
docker stop my-nginx

# 删除容器
docker rm my-nginx

测试验证

bash
docker ps

预期输出

CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS

第 3 课:Dockerfile(15 分钟)

学习目标

  • 理解 Dockerfile 语法
  • 掌握 Dockerfile 指令
  • 学习构建镜像

课程内容

  1. Dockerfile 语法

    • FROM
    • RUN
    • COPY
    • CMD
  2. Dockerfile 指令

    • WORKDIR
    • EXPOSE
    • ENV
    • ADD
  3. 构建镜像

    • docker build
    • 构建上下文
    • 镜像标签

实践操作

dockerfile
# Dockerfile
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["node", "index.js"]
bash
# 构建镜像
docker build -t myapp:latest .

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

测试验证

bash
docker images

预期输出

REPOSITORY   TAG       IMAGE ID       CREATED
myapp        latest    abc123def456   1 minute ago

第 4 课:多阶段构建(15 分钟)

学习目标

  • 理解多阶段构建原理
  • 掌握多阶段构建方法
  • 学习镜像优化

课程内容

  1. 多阶段构建

    • 构建阶段
    • 运行阶段
    • 复制产物
  2. 镜像优化

    • 减小镜像大小
    • 减少层数
    • 利用缓存
  3. 最佳实践

    • 选择合适的基础镜像
    • 合并 RUN 指令
    • 使用 .dockerignore

实践操作

dockerfile
# 多阶段构建
FROM node:18-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine

WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist

EXPOSE 3000
CMD ["node", "dist/index.js"]
bash
# 构建多阶段镜像
docker build -t myapp:multi-stage .

# 查看镜像大小
docker images myapp

测试验证

bash
docker images myapp

预期输出

REPOSITORY   TAG           IMAGE ID       SIZE
myapp        multi-stage   abc123def456   80MB

第 5 课:Docker Compose(20 分钟)

学习目标

  • 理解 Docker Compose 概念
  • 掌握 Docker Compose 配置
  • 学习多容器管理

课程内容

  1. Docker Compose

    • 服务定义
    • 网络配置
    • 卷管理
  2. Compose 配置

    • version
    • services
    • volumes
    • networks
  3. 多容器管理

    • 启动服务
    • 停止服务
    • 查看日志

实践操作

yaml
# docker-compose.yml
version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - postgres
      - redis
    networks:
      - app-network

  postgres:
    image: postgres:15-alpine
    environment:
      - POSTGRES_DB=myapp
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - app-network

  redis:
    image: redis:7-alpine
    networks:
      - app-network

volumes:
  postgres-data:

networks:
  app-network:
    driver: bridge
bash
# 启动服务
docker-compose up -d

# 查看服务
docker-compose ps

# 查看日志
docker-compose logs app

测试验证

bash
docker-compose ps

预期输出

NAME                COMMAND             STATUS
docker-app-1        "node index.js"      Up
docker-postgres-1   "docker-entrypoint" Up
docker-redis-1      "docker-entrypoint" Up

第 6 课:网络和存储(15 分钟)

学习目标

  • 理解 Docker 网络
  • 掌握 Docker 存储
  • 学习网络和存储配置

课程内容

  1. Docker 网络

    • Bridge 网络
    • Host 网络
    • Overlay 网络
  2. Docker 存储

    • 绑定挂载
    • tmpfs
  3. 网络和存储配置

    • 创建网络
    • 创建卷
    • 配置存储

实践操作

bash
# 创建网络
docker network create my-network

# 创建卷
docker volume create my-volume

# 运行容器并使用网络和卷
docker run -d \
  --name myapp \
  --network my-network \
  -v my-volume:/data \
  myapp:latest

# 查看网络
docker network ls

# 查看卷
docker volume ls

测试验证

bash
docker network ls
docker volume ls

预期输出

NETWORK ID     NAME         DRIVER
abc123def456   my-network   bridge

DRIVER    VOLUME NAME
local     my-volume

第 7 课:健康检查和监控(20 分钟)

学习目标

  • 理解健康检查机制
  • 实现容器健康检查
  • 学习容器监控

课程内容

  1. 健康检查

    • HEALTHCHECK 指令
    • 健康检查配置
    • 健康状态
  2. 容器监控

    • docker stats
    • docker events
    • 日志管理
  3. 告警通知

    • 健康检查失败
    • 容器异常
    • 资源超限

实践操作

dockerfile
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
yaml
# Docker Compose 健康检查
services:
  app:
    healthcheck:
      test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"]
      interval: 30s
      timeout: 3s
      retries: 3
      start_period: 5s
bash
# 查看容器健康状态
docker ps --format "table {{.Names}}\t{{.Status}}"

# 查看容器资源使用
docker stats

测试验证

bash
docker ps --format "table {{.Names}}\t{{.Status}}"

预期输出

NAMES           STATUS
myapp           Up 2 minutes (healthy)

第 8 课:总结与扩展(15 分钟)

学习目标

  • 回顾课程内容
  • 总结核心概念
  • 探索扩展方向

课程内容

  1. 课程回顾

    • Docker 基础
    • Dockerfile
    • 多阶段构建
    • Docker Compose
    • 网络和存储
    • 健康检查和监控
  2. 核心概念总结

    • 容器化
    • 镜像构建
    • 多容器管理
    • 网络和存储
  3. 扩展方向

    • 多阶段构建
    • 健康检查
    • 日志管理
    • 资源限制
    • 网络配置

实践操作

bash
# 运行所有测试
npm test

# 思考如何扩展功能
# 实现多阶段构建、健康检查等功能

预期输出

✅ 所有测试通过

学习成果

完成本课程后,你将能够:

  1. ✅ 理解 Docker 的核心概念
  2. ✅ 编写 Dockerfile
  3. ✅ 使用 Docker Compose
  4. ✅ 配置网络和存储
  5. ✅ 实现健康检查和监控

参考资源

下一步

完成本课程后,你可以继续学习:

  • CI/CD 持续集成

所有教学材料已保存。准备录制。


架构师AI杜公众号二维码

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态