主题
Docker Compose使用
课程介绍
Docker Compose是Docker官方提供的多容器应用编排工具,它可以使用YAML文件定义多容器应用,并一键启动和管理这些容器。本课程将详细讲解Docker Compose的使用方法,包括安装、配置、命令等内容,帮助你掌握Docker Compose的核心知识。
1. Docker Compose概述
1.1 什么是Docker Compose
Docker Compose是Docker官方提供的多容器应用编排工具。
Docker Compose的定义: Docker Compose是Docker官方提供的多容器应用编排工具,它可以使用YAML文件定义多容器应用,并一键启动和管理这些容器。
Docker Compose的作用:
| 作用 | 说明 |
|---|---|
| 多容器编排 | 编排多个容器 |
| 一键启动 | 一键启动多容器应用 |
| 配置管理 | 集中管理应用配置 |
| 网络管理 | 自动创建网络 |
| 卷管理 | 自动创建卷 |
1.2 Docker Compose的优势
Docker Compose的优势。
Docker Compose的优势:
| 优势 | 说明 |
|---|---|
| 简单易用 | 使用YAML文件定义应用 |
| 一键操作 | 一键启动和管理应用 |
| 配置集中 | 配置集中管理 |
| 网络自动配置 | 自动创建和配置网络 |
| 卷自动配置 | 自动创建和配置卷 |
| 环境变量管理 | 管理环境变量 |
| 依赖管理 | 管理容器依赖关系 |
1.3 Docker Compose的工作原理
Docker Compose的工作原理。
Docker Compose的工作原理:
- 读取配置文件:读取docker-compose.yml文件
- 解析配置:解析配置文件中的服务定义
- 创建网络:创建应用所需的网络
- 创建卷:创建应用所需的卷
- 启动容器:按顺序启动容器
- 管理容器:管理容器的生命周期
2. Docker Compose安装
2.1 安装Docker Compose
在Linux系统上安装Docker Compose。
安装步骤:
bash
# 下载Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version2.2 安装Docker Compose(使用pip)
使用pip安装Docker Compose。
安装步骤:
bash
# 安装pip
pip install --upgrade pip
# 安装Docker Compose
pip install docker-compose
# 验证安装
docker-compose --version2.3 安装Docker Compose(Windows/macOS)
在Windows和macOS上安装Docker Compose。
安装步骤:
- 下载Docker Desktop:从Docker官网下载Docker Desktop安装包
- 运行安装程序:双击安装包,按照提示进行安装
- 启动Docker Desktop:安装完成后,启动Docker Desktop
- 验证安装:打开终端,运行
docker-compose --version
3. Docker Compose配置文件
3.1 docker-compose.yml文件
Docker Compose使用docker-compose.yml文件定义应用。
docker-compose.yml基本结构:
yaml
version: '3'
# 服务定义
services:
# 服务名称
web:
# 镜像
image: nginx:latest
# 端口映射
ports:
- "80:80"
# 卷
volumes:
- ./html:/usr/share/nginx/html
# 环境变量
environment:
- NGINX_HOST=localhost
# 网络
networks:
- mynetwork
# 网络定义
networks:
mynetwork:
driver: bridge
# 卷定义
volumes:
myvolume:
driver: local3.2 配置文件语法
Docker Compose配置文件的语法。
常用配置项:
| 配置项 | 说明 |
|---|---|
| version | Compose文件版本 |
| services | 服务定义 |
| networks | 网络定义 |
| volumes | 卷定义 |
| secrets | 密钥定义 |
| configs | 配置定义 |
3.3 服务配置
服务的配置项。
服务配置项:
| 配置项 | 说明 |
|---|---|
| image | 容器镜像 |
| build | 构建镜像 |
| ports | 端口映射 |
| volumes | 卷挂载 |
| environment | 环境变量 |
| env_file | 环境变量文件 |
| networks | 网络 |
| depends_on | 依赖服务 |
| restart | 重启策略 |
| command | 启动命令 |
| entrypoint | 入口点 |
| working_dir | 工作目录 |
| user | 用户 |
| healthcheck | 健康检查 |
4. Docker Compose命令
4.1 基本命令
Docker Compose的基本命令。
命令:
bash
# 启动应用
docker-compose up
# 启动应用(后台)
docker-compose up -d
# 停止应用
docker-compose down
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs
# 查看服务日志(实时)
docker-compose logs -f
# 进入容器
docker-compose exec service-name bash
# 构建镜像
docker-compose build
# 拉取镜像
docker-compose pull
# 推送镜像
docker-compose push
# 重启服务
docker-compose restart
# 停止服务
docker-compose stop
# 启动服务
docker-compose start
# 删除服务
docker-compose rm4.2 高级命令
Docker Compose的高级命令。
命令:
bash
# 验证配置文件
docker-compose config
# 验证配置文件(详细)
docker-compose config --verbose
# 查看服务依赖
docker-compose top
# 查看服务网络
docker-compose network ls
# 查看服务卷
docker-compose volume ls
# 运行一次性命令
docker-compose run service-name command
# 强制重建
docker-compose up --build
# 不启动依赖服务
docker-compose up --no-deps service-name
# 缩放服务
docker-compose up --scale service-name=35. 实战案例
案例1:Web应用
场景:使用Docker Compose部署一个Web应用,包含Nginx和PHP。
docker-compose.yml:
yaml
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- php
networks:
- app-network
php:
image: php:7.4-fpm
volumes:
- ./html:/var/www/html
networks:
- app-network
networks:
app-network:
driver: bridge启动命令:
bash
# 启动应用
docker-compose up -d
# 查看服务状态
docker-compose ps
# 停止应用
docker-compose down案例2:WordPress应用
场景:使用Docker Compose部署WordPress应用,包含WordPress和MySQL。
docker-compose.yml:
yaml
version: '3'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
networks:
- wordpress-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql
networks:
- wordpress-network
volumes:
wordpress_data:
db_data:
networks:
wordpress-network:
driver: bridge启动命令:
bash
# 启动应用
docker-compose up -d
# 查看服务状态
docker-compose ps
# 停止应用
docker-compose down案例3:微服务应用
场景:使用Docker Compose部署一个微服务应用,包含多个服务。
docker-compose.yml:
yaml
version: '3'
services:
gateway:
image: gateway:latest
ports:
- "80:80"
depends_on:
- service1
- service2
networks:
- microservice-network
service1:
image: service1:latest
environment:
DB_HOST: db
depends_on:
- db
networks:
- microservice-network
service2:
image: service2:latest
environment:
DB_HOST: db
depends_on:
- db
networks:
- microservice-network
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: microservice
volumes:
- db_data:/var/lib/mysql
networks:
- microservice-network
redis:
image: redis:latest
networks:
- microservice-network
volumes:
db_data:
networks:
microservice-network:
driver: bridge启动命令:
bash
# 启动应用
docker-compose up -d
# 查看服务状态
docker-compose ps
# 停止应用
docker-compose down案例4:多环境部署
场景:使用Docker Compose部署多环境应用,包含开发、测试和生产环境。
docker-compose.yml:
yaml
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
environment:
- ENVIRONMENT=${ENVIRONMENT:-development}
networks:
- app-network
networks:
app-network:
driver: bridge启动命令:
bash
# 启动开发环境
ENVIRONMENT=development docker-compose up -d
# 启动测试环境
ENVIRONMENT=test docker-compose up -d
# 启动生产环境
ENVIRONMENT=production docker-compose up -d
# 停止应用
docker-compose down6. 常见问题
问题1:服务启动失败
问题:Docker Compose服务启动失败。
解决方法:
bash
# 查看服务日志
docker-compose logs service-name
# 检查配置文件
docker-compose config
# 检查网络
docker-compose network ls
# 检查卷
docker-compose volume ls
# 重新构建
docker-compose up --build问题2:端口冲突
问题:Docker Compose端口冲突。
解决方法:
yaml
# 修改端口映射
ports:
- "8080:80"
# 或者
ports:
- "8081:80"问题3:依赖服务启动失败
问题:Docker Compose依赖服务启动失败。
解决方法:
yaml
# 添加健康检查
services:
db:
image: mysql:8.0
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 30s
timeout: 10s
retries: 3
web:
image: nginx:latest
depends_on:
db:
condition: service_healthy问题4:配置文件错误
问题:Docker Compose配置文件错误。
解决方法:
bash
# 验证配置文件
docker-compose config
# 检查YAML语法
# 使用在线YAML验证工具
# 检查缩进
# 确保YAML文件缩进正确
# 检查格式
# 确保配置文件格式正确课程总结
这节课我们学习了Docker Compose使用。
核心内容:
- Docker Compose概述(什么是Docker Compose、Docker Compose的优势、Docker Compose的工作原理)
- Docker Compose安装(Linux安装、pip安装、Windows/macOS安装)
- Docker Compose配置文件(docker-compose.yml文件、配置文件语法、服务配置)
- Docker Compose命令(基本命令、高级命令)
- 实战案例(Web应用、WordPress应用、微服务应用、多环境部署)
- 常见问题
重要命令:
docker-compose up:启动应用docker-compose down:停止应用docker-compose ps:查看服务状态docker-compose logs:查看服务日志docker-compose build:构建镜像docker-compose config:验证配置文件docker-compose exec:进入容器docker-compose restart:重启服务
Docker Compose是Docker官方提供的多容器应用编排工具,掌握这些知识后,我们将在后续课程中学习Docker容器化部署实战等内容。
课后练习
练习1(基础)
使用Docker Compose部署一个Web应用,包含Nginx和PHP。
练习2(进阶)
使用Docker Compose部署WordPress应用,包含WordPress和MySQL。
练习3(拓展)
使用Docker Compose部署一个微服务应用,包含多个服务。