Docker官方文档教程:使用Docker Compose管理多容器应用
docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
前言
在现代应用开发中,单一容器往往无法满足复杂应用的需求。Docker Compose作为Docker生态中的重要工具,能够帮助我们轻松定义和管理多容器应用。本文将详细介绍如何使用Docker Compose来简化多容器应用的部署和管理流程。
Docker Compose简介
Docker Compose是一个用于定义和运行多容器Docker应用的工具。它通过一个YAML格式的配置文件(通常命名为compose.yaml)来描述整个应用的架构,包括各个服务、网络配置、数据卷等。使用Compose的主要优势包括:
- 简化配置:将所有容器配置集中在一个文件中
- 版本控制友好:配置文件可以纳入版本控制系统
- 一键部署:通过简单命令即可启动或停止整个应用栈
- 环境一致性:确保开发、测试和生产环境的一致性
准备工作
在开始之前,确保你已经:
- 安装了Docker Desktop或Docker Engine
- 完成了本系列教程前面的部分
- 准备好一个多容器应用项目(如本教程中的待办事项应用)
创建Compose文件
首先,在项目根目录下创建compose.yaml文件。这个文件将定义我们的应用服务(Node.js应用)和数据库服务(MySQL)。
├── getting-started-app/
│ ├── Dockerfile
│ ├── compose.yaml
│ ├── node_modules/
│ ├── package.json
│ ├── spec/
│ ├── src/
│ └── yarn.lock
定义应用服务
我们将逐步把之前使用的docker run命令转换为Compose配置。
基础配置
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
这部分定义了:
- 使用node:18-alpine镜像
- 启动命令:安装依赖并运行开发服务器
端口映射
ports:
- 127.0.0.1:3000:3000
将容器内的3000端口映射到主机的3000端口,仅限本地访问。
工作目录和卷映射
working_dir: /app
volumes:
- ./:/app
设置工作目录为/app,并将当前目录映射到容器的/app目录,实现代码热更新。
环境变量
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
配置应用连接MySQL所需的环境变量。
定义MySQL服务
基础配置
mysql:
image: mysql:8.0
使用MySQL 8.0官方镜像。
数据持久化
volumes:
- todo-mysql-data:/var/lib/mysql
volumes:
todo-mysql-data:
定义命名卷todo-mysql-data,用于持久化MySQL数据。
环境变量
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
设置MySQL root密码和初始数据库。
完整的compose.yaml
将所有配置组合起来,完整的compose.yaml文件如下:
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:8.0
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
运行应用栈
启动服务
docker compose up -d
-d参数表示在后台运行。执行后,Docker Compose会:
- 创建一个默认网络
- 创建指定的数据卷
- 启动定义的所有服务
查看日志
docker compose logs -f
-f参数表示实时跟踪日志输出。可以看到两个服务的日志交错显示,方便调试。
访问应用
应用启动后,可以通过http://localhost:3000访问。
管理应用栈
查看运行状态
使用Docker Desktop Dashboard可以直观地看到:
- 项目分组(基于目录名)
- 各个服务的运行状态
- 容器资源使用情况
停止应用
docker compose down
默认不会删除数据卷,如需删除数据卷:
docker compose down --volumes
最佳实践
- 版本控制:将compose.yaml纳入版本控制
- 环境分离:为不同环境创建不同的Compose文件
- 敏感信息:使用环境变量文件管理敏感信息
- 资源限制:为服务配置适当的资源限制
总结
通过本教程,我们学习了:
- Docker Compose的基本概念和优势
- 如何将docker run命令转换为Compose配置
- 定义多服务应用的完整流程
- 使用Compose命令管理应用生命周期
Docker Compose极大简化了多容器应用的管理,是开发复杂应用的必备工具。掌握Compose的使用,将显著提高你的开发效率和部署体验。
docs Source repo for Docker's Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考