logo
63
0
Login

Docker Compose 实践

1. 从单容器到容器编排

在前面的课程中,我们学习了如何使用 Docker 容器来运行单个服务。通过 docker run 命令,我们可以快速启动一个数据库、一个 Web 服务器或者一个缓存服务。这种方式在开发简单应用时非常有效。然而,随着应用架构的演进,微服务的理念逐渐流行,一个应用可能由多个相互依赖的服务组成。如果继续使用单容器管理方式,我们需要手动管理容器间的网络连接、存储卷映射、环境变量配置等,这不仅增加了运维的复杂度,还容易因手动操作而出错。

这就是为什么我们需要一个更高层次的工具来管理多容器应用。Docker Compose 应运而生,它通过一个声明式的 YAML 配置文件,帮助我们定义和管理多容器应用。通过 Docker Compose,我们可以用一个命令就完成整个应用的部署,而不需要手动管理每个容器。

2. Docker Compose 核心概念

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose,你可以通过一个 YAML 文件来配置应用程序的所有服务,然后使用一个命令来创建和启动所有服务。

2.1 主要概念

  • 服务 (Services): 容器的定义,包括使用哪个镜像、端口映射、环境变量等
  • 网络 (Networks): 定义容器之间如何通信
  • 卷 (Volumes): 定义数据的持久化存储
  • 依赖关系 (Dependencies): 定义服务之间的启动顺序
  • 环境变量 (Environment Variables): 管理不同环境的配置

2.2 核心命令

  • docker compose up: 创建和启动所有服务
  • docker compose down: 停止和删除所有服务
  • docker compose ps: 查看服务状态
  • docker compose logs: 查看服务日志

3. 实践项目:使用 docker compose 构建 Todo 应用

在本章节中,我们将创建一个完整的 Todo 应用,包含以下组件:

  • Nginx: 路由转发
  • 前端: React 应用
  • 后端: Node.js API 服务
  • 数据库: MongoDB

项目结构

5_compose/ ├── docker-compose.yml # Compose 配置文件 ├── nginx/ # nginx ├── frontend/ # React 前端应用 ├── backend/ # Node.js 后端服务 └── INSTRUCTIONS.md # 项目说明

架构图

┌─────────────┐ │ Nginx │ │ :8080 │ └─────┬───────┘ │ ┌────────┴────────┐ │ │ ┌───────▼─────┐ ┌──────▼──────┐ │ Frontend │ │ Backend │ │ (React) │ │ (Node.js) │ │ :3000 │ │ :3001 │ └─────────────┘ └──────┬───────┘ │ ┌───────▼───────┐ │ MongoDB │ │ Database │ │ :27017 │ └───────────────┘

Docker Compose 配置解析

服务定义

  1. nginx 服务

    • 使用官方 nginx 镜像
    • 映射端口 8080,作为应用的访问入口
    • 将 nginx.conf 配置文件打包进镜像
  2. frontend 服务

    • 使用本地 Dockerfile 构建
    • 暴露端口 3000,仅容器网络访问
    • 设置 API URL 环境变量
    • 依赖于 backend 服务
    • 使用卷挂载实现热重载
  3. backend 服务

    • 使用本地 Dockerfile 构建
    • 映射端口 3001,仅容器网络访问
    • 设置 MongoDB 连接环境变量
    • 依赖于 mongodb 服务
    • 使用卷挂载实现热重载
  4. mongodb 服务

    • 使用官方 MongoDB 镜像
    • 映射端口 27017,仅容器网络访问
    • 使用命名卷持久化数据

网络配置

  • Docker Compose 会自动创建一个默认网络 (bridge模式)
  • 所有服务都在同一网络中
  • 服务可以通过服务名互相访问

数据持久化

  • 使用命名卷 mongodb_data 持久化数据库数据
  • 使用绑定挂载实现开发时的代码热重载

使用说明

  1. 在后台启动服务

    docker compose up -d
  2. 查看服务状态

    docker compose ps
  3. 查看服务日志

    查看特定服务的日志: ```bash docker compose logs frontend docker compose logs backend docker compose logs mongodb
  4. 停止所有服务

    docker compose down
  5. 重新构建服务

    docker compose build
  6. 重启单个服务

    docker compose restart frontend

访问应用

我们使用了在 nginx 这里配置了 8080 端口作为 todo 应用的整体入口,在 cnb 上我们可以通过添加一个8080 的端口映射来实现外网访问, 可以按照如下步骤来配置。 点击这个浏览器图标,就可以访问 todo 应用了。

About

No description, topics, or website provided.
Language
Markdown46.4%
JavaScript41.6%
Dockerfile9.5%
HTML2.5%