Docker部署Spring Cloud微服务实战
前情提要: 在之前的springcloud项目打包实战中,我们已经学会了如何把springcloud中的应用打包成jar包,但是用jar包运行有很大的缺点,比如如果你想要把它放到Linux服务器上运行,你必须下载linux对应版本的jdk,再者,如果你还想顺带一起部署中间件,如mysql,redis,这些中间件在各个平台都有不同的安装包和部署方式,非常难以部署。为了降低运维难度,可以使用docker来进行部署。
我们当然首先要学会如何打包和使用jar包,如果不会的话点击链接跳转
1,准备工作
我们当然要拥有docker-desktop,并准备一个用于测试的微服务项目。为了能够快速拉取镜像,可以修改docker-desktop的配置文件更改镜像源,如下是我的相关配置:
2,文件编写
我们为每个微服务都编写一个这样的文件
ARG MODULE_NAME=default_module
ARG CONTAINER_PORT=8080# 阶段1:构建阶段
FROM maven:3.8.6-eclipse-temurin-17 AS builder
ARG MODULE_NAME
WORKDIR /build# 1. 复制POM文件(利用缓存)
COPY pom.xml .
COPY ${MODULE_NAME}/pom.xml ./${MODULE_NAME}/# 2. 下载依赖(pom.xml变化时才重新执行)
RUN mvn -B dependency:go-offline -pl ${MODULE_NAME} -am# 3. 复制源码(独立层确保代码变更触发重建)
COPY ${MODULE_NAME}/src ./${MODULE_NAME}/src# 4. 编译(仅需一次package命令)
RUN mvn package -pl ${MODULE_NAME} -DskipTests# 阶段2:运行阶段
FROM openjdk:17
ARG MODULE_NAME
ARG CONTAINER_PORT
ENV SERVER_PORT=${CONTAINER_PORT}COPY --from=builder /build/${MODULE_NAME}/target/*.jar /app.jar
EXPOSE ${CONTAINER_PORT}
ENTRYPOINT ["java", "-jar", "/app.jar", "--server.port=${SERVER_PORT}"]
再在项目的根目录,编写工程的docker-compose.yml,用于多镜像的构建,一键启动所有微服务dockerfile
services:test:build:context: .dockerfile: ./test/Dockerfileargs:MODULE_NAME: testCONTAINER_PORT: 8686ports:- "8686:8686"
3,运行测试
我们在命令行中输入如下命令:
docker compose up -d
经过漫长的等待后终于启动成功了
我们如果修改了代码,要更新镜像,可以运行如下命令
docker compose down
docker-compose up -d --build
此时就能关闭镜像并且重建镜像