赞
踩
背景:使用Docker Compose部署一套Spring Cloud微服务项目,要求只对外暴露网关服务的端口,通过网关服务通过容器内部网络访问其它的微服务
思路:每个服务都打包成一个镜像,再用Docker Compose定义并启用多个容器
环境:
下面以mina-gateway为例
# 使用一个基础镜像作为起点,通常是包含Java运行时环境的镜像 FROM springci/graalvm-ce:java17-0.12.x # 设置工作目录 WORKDIR /app # 复制编译后的Spring Boot JAR文件到容器中 COPY mina-gateway-0.0.1-SNAPSHOT.jar /app/app.jar # 复制配置文件到容器中 COPY config /app/ # 暴露应用程序运行的端口 EXPOSE 8080 # 启动Spring Boot应用程序 CMD ["java", "-jar", "app.jar"]
下面以mina-gateway为例
使用gradle
./gradlew clean bootJar
使用maven
mvn clean package
这一步只是为了方便管理,才把所有与docker部署相关的东西放在了同一个地方
下面以mina-gateway为例
将Dockerfile、打包好的jar包、以及配置文件都放在服务根目录的docker目录下,其中,配置文件放在config目录下(根据自己项目的配置来决定)
这里的配置文件用的是bootstrap.yml是因为本项目用了配置中心,如果没有使用配置中心,就是application.yml
version: '1' services: # mina-gateway:后台管理服务 mina-gateway: build: # 这里配置Dockerfile所在的目录,也就是步骤三中准备的docker目录,等同于docker build中的 ./mina-gateway/docker context: ./mina-gateway/docker # 配置镜像名称,等同于docker build中的 -t mina-gateway:latest image: mina-gateway # 配置容器名称,等同于docker run中的 --name mina-gateway container_name: mina-gateway # 配置容器对外暴露的端口,等同于docker run中的 -p 8080:8080 ports: - "8080:8080" # 配置网络,等同与docker run中的 --network mina-cloud-network networks: - mina-cloud-network # mina-cloud-system:后台管理服务 mina-cloud-system: build: context: ./mina-cloud-system/docker image: mina-cloud-system container_name: mina-cloud-system networks: - mina-cloud-network # mina-cloud-infra:基础设施服务 mina-cloud-infra: build: context: ./mina-cloud-infra/docker image: mina-cloud-infra container_name: mina-cloud-infra networks: - mina-cloud-network # 定义网络 networks: mina-cloud-network: driver: bridge
并且把docker-compose.yml放在最外层目录,如下
在docker-compose.yaml文件所在的目录下,执行容器启动命令
docker-compose up -d
启动成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。