Docker Compose 是管理和编排多容器应用的强大工具。它可以将多个服务容器组合成一个整体,从而在开发、测试、部署等场景中简化操作流程。
为什么需要Docker Compose呢?在实际的工作中,我们会遇到这样的情况:
开发和测试时,团队需要搭建一套完整的环境,包含多个依赖服务。例如
- Web 应用需要和数据库通信。
- Web 应用可能依赖 Redis 作为缓存。
- 某些业务逻辑需要外部服务如消息队列(Kafka)或搜索引擎(Elasticsearch)。
手动配置这些服务会耗费大量时间,并且容易出错。此外,开发者本地环境的差异可能导致“我这能跑,但你那不行”的问题。
而通过Docker Compose我们可以:
- 统一环境配置:通过
docker-compose.yml
文件定义环境,包括所有依赖服务,确保测试环境的一致性。 - 快速启动和重建:开发和测试环境通过一条命令即可启动或更新,确保效率,测试完毕后,自动清理环境,节省资源。
Docker Compose安装
在新版本的Docker Desktop 3.2.1及以上版本已经集成了新版本的Docker Compose,相比老版本的Docker Compose在使用时不需要命令中的-
,也就是将docker-compose
命令换成了docker compose
命令
Docker Desktop下载地址:Docker Desktop: The #1 Containerization Tool for Developers | Docker
下载对应平台windows/mac/linux的程序包安装即可
安装完毕可以通过以下命令检查 Compose 版本:
docker compose version
如果已安装好Docker但未安装Docker Compose,可以手动安装 Compose 插件:
1、下载最新版本的 Compose 二进制文件:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、赋予执行权限:
sudo chmod +x /usr/local/bin/docker-compose
3、验证安装是否成功:
docker-compose --version
Docker Compose的常用命令
1、启动服务
启动并运行 docker-compose.yml
文件中定义的所有服务:
docker-compose up
2、后台运行
使用 -d
参数可以在后台运行:
docker-compose up -d
3、停止服务
停止当前运行的服务:
docker-compose stop
4、删除服务
停止并删除容器、网络和卷:
docker-compose down
5、查看服务状态
列出当前服务及其状态:
docker-compose ps
6、重新构建服务
当 Dockerfile
或依赖发生变化时,使用以下命令重新构建:
docker-compose build
实战案例:使用Docker Compose构建一个完整的应用
以下是使用 Docker Compose 构建一个包含 Nginx(前端)、Python Flask(后端)和 MySQL(数据库)的示例应用。
1. 项目目录结构
project/
├── docker-compose.yml
├── app/
│ ├── Dockerfile
│ ├── app.py
│ ├── requirements.txt
├── db/
│ └── init.sql
└── nginx/
└── default.conf
2. 配置文件
(1) docker-compose.yml文件内容如下
version: '3.9'
services:
web:
build: ./nginx
ports:
- "8080:80"
depends_on:
- app
app:
build: ./app
ports:
- "5000:5000"
environment:
FLASK_ENV: development
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: flaskdb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
(2) Nginx 配置
nginx/default.conf
server {
listen 80;
location / {
proxy_pass http://app:5000;
}
}
(3) Flask 应用
app/app.py
from flask import Flask
import pymysql
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Docker Compose!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
对应的依赖项文件app/requirements.txt
flask
pymysql
(4) 数据库初始化脚本
db/init.sql
CREATE DATABASE IF NOT EXISTS flaskdb;
USE flaskdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
3. 构建和运行项目
(1) 构建镜像
docker-compose build
(2) 启动服务
docker-compose up -d
(3) 验证应用
- 打开浏览器访问
http://localhost:8080
,会看到 "Hello, Docker Compose!"。 - 检查 MySQL 数据库,表结构已初始化。
欢迎来到testingpai.com!
注册 关于