测试人必备:Docker Compose 5 分钟搞定复杂环境部署

Docker Compose 是管理和编排多容器应用的强大工具。它可以将多个服务容器组合成一个整体,从而在开发、测试、部署等场景中简化操作流程。

为什么需要Docker Compose呢?在实际的工作中,我们会遇到这样的情况:

开发和测试时,团队需要搭建一套完整的环境,包含多个依赖服务。例如

手动配置这些服务会耗费大量时间,并且容易出错。此外,开发者本地环境的差异可能导致“我这能跑,但你那不行”的问题。

而通过Docker Compose我们可以:

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) 验证应用

回帖
请输入回帖内容 ...