> 技术文档 > 用 Docker Compose 一键起 3 个服务,测试同事追着要链接

用 Docker Compose 一键起 3 个服务,测试同事追着要链接

本文围绕 “用 Docker Compose 一键启动 3 个服务” 展开,先介绍 Docker Compose 的基本概念与优势,说明其能简化多服务部署流程。接着详细讲解如何编写 docker - compose.yml 文件配置 3 个服务,包括服务选择、配置细节等,还阐述了启动服务的具体步骤及验证方法。同时,提及该方式在团队协作中的作用,能让测试同事快速获取服务链接开展工作,最后总结其对提升开发与测试效率的重要意义,为相关从业者提供实用指南。​

在现代软件开发与测试的流程中,多服务的部署与管理往往是一件繁琐且耗时的事情。不同的服务可能有着不同的依赖环境、配置参数,手动去部署和协调这些服务,不仅容易出错,还会大大降低团队的工作效率。而 Docker Compose 的出现,为解决这一问题提供了绝佳的方案。它能够让我们通过一个配置文件,轻松实现多个服务的一键启动、停止、重启等操作,极大地简化了多服务的管理流程。​

想象一下,当测试同事急需对某个项目的多个关联服务进行测试时,你只需执行一个简单的命令,3 个服务就能迅速启动并正常运行,测试同事很快就能拿到服务链接开展工作,这种高效的协作方式无疑会让团队的工作节奏变得更加顺畅。接下来,我们就详细探讨如何利用 Docker Compose 一键启动 3 个服务,以及它为何能让测试同事追着要链接。​

一、Docker Compose 是什么​

Docker Compose 是 Docker 官方提供的一个用于定义和运行多容器 Docker 应用程序的工具。它允许用户使用 YAML 文件来配置应用程序所需的所有服务,然后使用一个命令就可以创建并启动所有服务。​

与手动逐个启动容器相比,Docker Compose 具有诸多优势。首先,它实现了服务的集中配置,所有服务的参数、依赖关系等都清晰地定义在一个 YAML 文件中,便于团队成员查看和维护。其次,通过 Docker Compose 可以一键启动所有服务,并且能够保证服务之间的网络连接和依赖关系正确无误,避免了手动配置时可能出现的各种问题。此外,Docker Compose 还支持对服务进行停止、重启、删除等操作,操作简单便捷。​

二、选择 3 个典型服务​

为了更好地演示如何用 Docker Compose 一键启动服务,我们选择 3 个在软件开发和测试中经常用到的典型服务:Web 服务(Nginx)、数据库服务(MySQL)和应用程序服务(一个简单的 Node.js 应用)。​

  1. Web 服务(Nginx):作为反向代理服务器和静态资源服务器,Nginx 在 Web 应用中被广泛使用。它可以将客户端的请求转发到后端的应用程序服务,同时也能高效地处理静态资源的请求,如 HTML、CSS、JavaScript 文件等。​
  1. 数据库服务(MySQL):MySQL 是一种常用的关系型数据库管理系统,用于存储应用程序的数据。在很多应用中,应用程序需要与数据库进行交互,进行数据的查询、插入、更新和删除等操作。​
  1. 应用程序服务(Node.js 应用):Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,适合构建高性能的网络应用。我们这里的 Node.js 应用将实现一些简单的业务逻辑,并与 MySQL 数据库进行交互,同时通过 Nginx 对外提供服务。​

三、编写 docker - compose.yml 文件​

docker - compose.yml 文件是 Docker Compose 的核心配置文件,我们需要在这个文件中定义上述 3 个服务的配置信息。下面是一个完整的 docker - compose.yml 文件示例:​

version: \'3\'​

services:​

nginx:​

image: nginx:latest​

ports:​

- \"80:80\"​

volumes:​

- ./nginx/conf.d:/etc/nginx/conf.d​

- ./nginx/html:/usr/share/nginx/html​

depends_on:​

- nodeapp​

networks:​

- app-network​

mysql:​

image: mysql:5.7​

下面对这个配置文件中的关键部分进行解释:​

  1. version:指定 Docker Compose 的版本,这里使用的是版本 3。​
  1. services:定义各个服务。​
  • nginx 服务:使用最新版本的 Nginx 镜像,将容器的 80 端口映射到主机的 80 端口。通过 volumes 挂载本地的 Nginx 配置文件目录(./nginx/conf.d)和静态资源目录(./nginx/html)到容器中,以便对 Nginx 进行配置和管理静态资源。depends_on 表示该服务依赖于 nodeapp 服务,即只有在 nodeapp 服务启动后,Nginx 服务才会启动。networks 指定该服务加入 app - network 网络。​
  • mysql 服务:使用 MySQL 5.7 的镜像,将容器的 3306 端口映射到主机的 3306 端口。通过 environment 设置 MySQL 的环境变量,包括 root 用户密码、创建的数据库名、用户名和密码等。volumes 用于挂载 MySQL 的数据目录,以实现数据的持久化存储。同样,该服务也加入 app - network 网络。​
  • nodeapp 服务:通过 build 指定 Dockerfile 所在的目录(./nodeapp),由 Docker Compose 自动构建镜像。将容器的 3000 端口映射到主机的 3000 端口。environment 设置 Node.js 应用连接 MySQL 数据库所需的环境变量,如数据库主机、用户名、密码和数据库名等。depends_on 表示该服务依赖于 mysql 服务,只有 mysql 服务启动后,nodeapp 服务才会启动,且加入 app - network 网络。​
  1. networks:定义一个名为 app - network 的网络,使用 bridge 驱动,用于服务之间的通信。​
  1. volumes:定义一个名为 mysql - data 的卷,用于存储 MySQL 的数据,实现数据的持久化。​

四、准备服务相关文件​

  1. Nginx 配置文件:在./nginx/conf.d 目录下创建一个名为 app.conf 的配置文件,内容如下:​

server {​

listen 80;​

server_name localhost;​

location / {​

proxy_pass http://nodeapp:3000;​

proxy_set_header Host $host;​

proxy_set_header X - Real - IP $remote_addr;​

}​

location /static {​

alias /usr/share/nginx/html;​

}​

}​

这个配置文件的作用是将客户端对根路径的请求转发到 nodeapp 服务的 3000 端口,将对 /static 路径的请求指向 Nginx 的静态资源目录。​

  1. Node.js 应用文件:在./nodeapp 目录下创建以下文件:​
  • package.json:​

{​

\"name\": \"nodeapp\",​

\"version\": \"1.0.0\",​

\"dependencies\": {​

\"express\": \"^4.17.1\",​

\"mysql\": \"^2.18.1\"​

}​

}​

  • app.js:​

  • Dockerfile:​

FROM node:14​

WORKDIR /app​

COPY package*.json ./​

RUN npm install​

COPY . .​

CMD [\"node\", \"app.js\"]​

这个 Node.js 应用使用 express 框架搭建一个简单的 Web 服务,连接 MySQL 数据库,并在根路径返回查询到的用户数据。​

五、启动服务​

完成上述配置和文件准备后,就可以使用 Docker Compose 一键启动这 3 个服务了。​

打开终端,进入到 docker - compose.yml 文件所在的目录,执行以下命令:​

docker - compose up - d​

其中,-d 参数表示以守护进程的方式启动服务,即服务会在后台运行。​

执行命令后,Docker Compose 会根据配置文件中的定义,依次拉取或构建所需的镜像,创建并启动容器。我们可以通过以下命令查看服务的启动状态:​

docker - compose ps​

如果所有服务的状态都显示为 “Up”,则表示服务启动成功。​

六、验证服务是否正常运行​

  1. 验证 Web 服务(Nginx):打开浏览器,访问http://localhost,如果能够看到 Node.js 应用返回的信息(如果数据库中没有用户数据,可能显示为空),则说明 Nginx 服务正常运行,并且成功将请求转发到了 nodeapp 服务。​
  1. 验证数据库服务(MySQL):可以使用 MySQL 客户端工具连接到localhost的 3306 端口,使用配置文件中设置的用户名和密码登录数据库,如果能够成功登录并查看 appdb 数据库,则说明 MySQL 服务正常运行。​
  1. 验证应用程序服务(Node.js 应用):可以通过 curl 命令或在浏览器中访问http://localhost:3000,如果能够得到与访问http://localhost相同的结果,则说明 Node.js 应用服务正常运行。​

七、团队协作中的优势​

在团队协作中,使用 Docker Compose 一键启动多个服务的优势尤为明显。对于测试同事来说,他们不需要关心每个服务的具体部署细节和依赖关系,只需获取到启动服务的配置文件和相关指令,就能在自己的本地环境中快速启动所有需要测试的服务,拿到服务链接后立即开展测试工作。​

这种方式避免了测试环境与开发环境不一致导致的问题,因为所有服务都是基于 Docker 容器运行的,容器的环境是统一且隔离的。同时,也减少了测试同事与开发同事之间关于环境配置的沟通成本,提高了团队的整体工作效率。​

八、总结​

通过本文的介绍,我们了解到 Docker Compose 是一个强大的多服务管理工具,它能够通过一个简单的配置文件和命令,实现多个服务的一键启动、停止等操作。我们以 Nginx、MySQL 和 Node.js 应用这 3 个典型服务为例,详细讲解了如何编写 docker - compose.yml 文件、准备相关服务文件、启动服务以及验证服务是否正常运行。​

在实际的软件开发和测试工作中,使用 Docker Compose 可以极大地简化多服务的部署和管理流程,减少环境配置问题带来的困扰,提高团队的协作效率。这也是为什么当你能用 Docker Compose 一键启动服务时,测试同事会追着要链接的原因 —— 它让测试工作变得更加便捷、高效。​

希望本文的内容能够帮助到相关从业者,让大家更好地利用 Docker Compose 提升工作效率。在今后的工作中,我们可以根据实际需求,扩展配置文件,添加更多的服务,进一步发挥 Docker Compose 的优势。