1. Docker Compose 简介
Docker Compose 是一个工具,用于定义和运行多容器的 Docker 应用。通过编写一个 docker-compose.yml
文件,可以一次性启动所有容器,并且方便管理容器之间的依赖。
2. 安装 Docker Compose
前提条件
确保已安装 Docker,可以通过以下命令检查:
docker --version
安装步骤
-
Linux 或 Mac 安装 下载 Compose 二进制文件到系统中:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
设置可执行权限:
sudo chmod +x /usr/local/bin/docker-compose
验证安装,如果显示版本号则表明安装成功:
docker-compose --version
Windows 安装
- 如果已安装 Docker Desktop,Docker Compose 通常会随之安装。
- 在命令行中输入
docker-compose --version
验证。
3. 使用 Docker Compose
3.1 创建 docker-compose.yml
文件
以下是一个典型的 Compose 文件示例,用于启动一个包含 Nginx 和 MySQL 的应用:
version: '3.9'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./web:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- "3306:3306"
3.2 启动服务
在 docker-compose.yml
文件所在目录运行以下命令,注意一定要在docker-compose.yml
文件所在目录执行:
docker-compose up
添加 -d
参数让服务在后台运行:
docker-compose up -d
3.3 停止服务
docker-compose down
4. 常用命令:
命令 | 功能 |
---|---|
docker-compose up | 启动所有服务。 |
docker-compose up -d | 后台运行所有服务。 |
docker-compose down | 停止并删除所有容器、网络和相关资源。 |
docker-compose ps | 查看当前运行的容器列表。 |
docker-compose logs | 查看所有服务的日志。 |
docker-compose logs -f | 实时查看日志。 |
docker-compose build | 根据 Dockerfile 构建服务镜像。 |
docker-compose start | 启动已停止的服务容器。 |
docker-compose stop | 停止服务容器,但保留容器数据。 |
docker-compose restart | 重启所有服务。 |
docker-compose exec <service> <cmd> | 在运行中的服务容器中执行命令。 |
docker-compose config | 验证 docker-compose.yml 文件的配置正确性。 |
注意:docker-compose down命令会删除docker-compose.yml定义的容器,网络和相关资源。如果只想停止容器,保留容器数据需执行:docker-compose stop
5. 常见使用场景
场景 1:开发环境
使用 Docker Compose 启动包含多个服务的开发环境,例如前端、后端和数据库。示例:
version: '3.9'
services:
frontend:
build:
context: ./frontend
ports:
- "3000:3000"
backend:
build:
context: ./backend
ports:
- "5000:5000"
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
场景 2:日志监控
启动一个 Loki + Promtail + Grafana 的日志监控系统:
version: '3.9'
services:
grafana:
image: grafana/grafana
ports:
- "3000:3000"
loki:
image: grafana/loki
ports:
- "3100:3100"
promtail:
image: grafana/promtail
volumes:
- /var/log:/var/log
6. Debug 和优化建议
- 检查服务状态: 使用
docker-compose ps
查看服务是否正常启动。 - 检查日志: 如果服务异常,使用
docker-compose logs <service>
查看具体日志。 - 网络配置问题: 确保服务之间可以通过
service_name
通信。 - 版本兼容: 确保 Docker 和 Compose 的版本匹配。