Docker Compose
Docker Compose
什么是 Docker Compose?
Docker Compose 是一个用于 定义和运行多容器 Docker 应用程序 的工具。
你可以将它想象成:
- 剧本 (YAML 文件
docker-compose.yml): 描述你的应用程序所需的“演员”(容器)以及它们之间的协作方式。 - 指挥家 (Docker Compose 工具): 读取剧本,指挥 Docker 创建、启动、停止和管理所有容器。
为什么需要 Docker Compose?
在实际应用中,应用程序通常由多个容器组成,例如:
- Web 服务器 (Nginx, Apache)
- 应用服务器 (Python, Node.js, Java 应用)
- 数据库 (MySQL, PostgreSQL, MongoDB)
- 缓存 (Redis, Memcached)
- 消息队列 (RabbitMQ, Kafka)
手动管理这些容器会很繁琐且容易出错,需要记住启动顺序、网络配置、端口映射、卷挂载等。
Docker Compose 的出现就是为了简化多容器应用的编排和管理。
Docker Compose 的核心:docker-compose.yml 文件
docker-compose.yml 是一个 YAML 格式 的文件,用于定义应用程序的各个服务(容器)。
示例 docker-compose.yml 文件:
1 | version: "3.9" |
文件内容分解:
version: "3.9": 指定 Docker Compose 文件格式版本。建议使用较新版本。services:: 定义应用程序的服务 (容器)。web:: 名为web的服务。image: nginx:latest: 使用nginx:latest镜像。ports: - "80:80": 宿主机 80 端口映射到容器 80 端口。volumes: - ./html:/usr/share/nginx/html: 宿主机./html目录挂载到容器/usr/share/nginx/html目录。depends_on: - app: 依赖于app服务,先启动app再启动web。
app:: 名为app的服务。image: python:3.9-slim-buster: 使用python:3.9-slim-buster镜像。command: python app.py: 容器启动后执行python app.py命令。volumes: - ./app:/app: 宿主机./app目录挂载到容器/app目录。environment: - DEBUG=true: 设置环境变量DEBUG=true。ports: - "5000:5000": 宿主机 5000 端口映射到容器 5000 端口。
常用 Docker Compose 命令
在 docker-compose.yml 文件所在目录执行:
docker-compose up -d: 创建并启动所有服务 (后台运行)。1
docker-compose up -d
docker-compose down: 停止并删除所有服务、网络和卷。1
docker-compose down
docker-compose stop: 停止所有服务容器 (不删除)。1
docker-compose stop
docker-compose start: 启动已停止的服务容器。1
docker-compose start
docker-compose restart: 重启所有服务容器。1
docker-compose restart
docker-compose ps: 列出容器状态。1
docker-compose ps
docker-compose logs <service_name>: 查看指定服务日志。例如查看web服务日志:1
docker-compose logs web
docker-compose exec <service_name> <command>: 在指定服务容器中执行命令。例如进入web服务容器的 bash shell:1
docker-compose exec web bash
docker-compose build: 构建或重新构建镜像 (当服务使用build指令时)。1
docker-compose build
Docker Compose 的优势总结
- 简化多容器应用管理: 通过
docker-compose.yml和简单命令管理复杂应用。 - 提高开发效率: 快速搭建开发环境,方便本地测试和调试。
- 环境一致性: 确保开发、测试和生产环境一致性。
- 易于部署:
docker-compose.yml作为应用配置方便部署。 - 版本控制:
docker-compose.yml可纳入版本控制系统,方便协作。
实际应用场景示例
开发一个简单的 Web 应用程序,包含:
- 前端 Web 服务器 (Nginx)
- 后端 Python 应用 (Flask)
- 数据库 (PostgreSQL)
可以使用 docker-compose.yml 定义这三个服务,并轻松管理它们。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Erokin's Shelter!
