
Docker Compose 是 Docker 提供的一种便捷工具,用于定义和运行多容器应用。在开发和部署过程中,特别是涉及微服务架构时,Compose 可以大幅提升部署效率。本文将深入讲解如何使用 Docker Compose 部署微服务集群,通过实例展示其强大的功能与优势。
Docker Compose 是一个用来定义和管理多容器 Docker 应用的工具。通过一个单独的 docker-compose.yml 文件,开发者可以定义多个服务的容器配置,然后使用简单的命令来管理这些容器。它的主要优势包括:
Compose 文件是以 YAML 格式编写的,通过 services 关键字定义多个服务。以下是一个基本的 Compose 文件示例:
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/myCnf.cnf:/etc/mysql/conf.d/myCnf.cnf"
web:
build: .
ports:
- "8090:8090"mysql:
mysql:5.7.25 镜像。environment 配置环境变量,设置 root 密码。volumes 将本地目录挂载到容器内,确保数据持久化。web:
在 Linux 服务器上,可以通过以下步骤安装 Docker Compose:
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-composecurl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose下面我们通过一个实际案例展示如何使用 Docker Compose 快速部署一个包含多个微服务的集群。
本案例中的微服务包括:
docker-compose.yml 文件version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"nacos:
nacos/nacos-server 镜像。standalone 模式,暴露 8848 端口。mysql:
MySQL 作为数据库。userservice 和 orderservice:
gateway:
为了使微服务能够在 Docker Compose 的集群中正常运行,需要将服务之间的地址改为基于服务名访问。
bootstrap.ymlspring:
cloud:
nacos:
server-addr: nacos:8848
config:
file-extension: yamlapplication.ymlserver:
port: 8081
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_user?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver在上述配置中:
localhost 修改为 nacos。localhost 修改为 mysql,这两个名称对应于 docker-compose.yml 中的服务名。修改每个微服务的 pom.xml,将打包的文件命名为 app.jar:
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>每个微服务需要一个 Dockerfile 文件,例如:
FROM openjdk:8
COPY ./app.jar /tmp/app.jar
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]将所有配置文件和打包后的 app.jar 文件上传到服务器,然后执行以下命令启动微服务集群:
docker-compose up -ddocker-compose logs -f通过 Docker Compose,我们可以轻松地管理和部署复杂的微服务架构。它提供了一种简单且高效的方式来定义和运行多容器应用,同时减少了人为操作的错误。
在实际项目中,合理使用 Docker Compose,不仅可以提高开发和部署效率,还可以为后续的扩展和维护打下坚实的基础。