一个完整的 Maven 打包 → docker build → docker compose up -d 的案例流程。

我们假设项目是一个 Spring Boot Web 项目,依赖 MySQL。

🔹 1. 使用 Maven 打包

在项目根目录执行:

mvn clean install -DskipTests

执行完成后,你会得到一个 jar 包,例如:

target/demo-0.0.1-SNAPSHOT.jar

🔹 2. 编写 Dockerfile

在项目根目录新建 Dockerfile:

基础镜像

FROM openjdk:17-jdk-slim

设置工作目录

WORKDIR /app

复制 jar 包

COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

暴露端口

EXPOSE 8080

启动命令

ENTRYPOINT [“java”, “-jar”, “app.jar”]

🔹 3. 使用 docker build 构建镜像

手动执行构建命令:

docker build -t demo-app:1.0 .

构建成功后,可以看到镜像:

docker images

输出类似:

REPOSITORY TAG IMAGE ID CREATED SIZE
demo-app 1.0 abcd1234efgh 30 seconds ago 250MB

🔹 4. 编写 docker-compose.yml

在项目根目录创建 docker-compose.yml:

version: “3.9”

services:
app:
image: demo-app:1.0 # 使用我们上一步构建好的镜像
container_name: demo-app
ports:
- “8080:8080”
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/demo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
depends_on:
- db

db:
image: mysql:8.0
container_name: demo-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: demo
ports:
- “3306:3306”
volumes:
- db_data:/var/lib/mysql

volumes:
db_data:

🔹 5. 启动项目

运行:

docker compose up -d

这一步会:

启动 MySQL 容器

启动我们手动 build 出来的 demo-app:1.0 镜像容器

🔹 6. 验证

查看容器运行状态:

docker ps

访问:

http://localhost:8080

👉 这样完整流程就是:

Maven 构建 → Docker build → Docker Compose 部署

如果要加入redis
扩展成 Spring Boot + MySQL + Redis,这样就比较贴近实际生产环境了。

🔹 1. 目录结构
.
├── Dockerfile
├── docker-compose.yml
├── pom.xml
└── target/demo-0.0.1-SNAPSHOT.jar

🔹 2. Dockerfile

还是和之前一样:

FROM openjdk:17-jdk-slim

WORKDIR /app

COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

EXPOSE 8080

ENTRYPOINT [“java”, “-jar”, “app.jar”]

🔹 3. docker-compose.yml

扩展支持 Redis:

version: “3.9”

services:
app:
image: demo-app:1.0
container_name: demo-app
ports:
- “8080:8080”
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/demo?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
SPRING_REDIS_HOST: redis
SPRING_REDIS_PORT: 6379
depends_on:
- db
- redis

db:
image: mysql:8.0
container_name: demo-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: demo
ports:
- “3306:3306”
volumes:
- db_data:/var/lib/mysql

redis:
image: redis:7.0
container_name: demo-redis
restart: always
ports:
- “6379:6379”
volumes:
- redis_data:/data

volumes:
db_data:
redis_data:

🔹 4. 构建 & 运行
Step 1: 用 Maven 打包
mvn clean install -DskipTests

Step 2: 构建镜像
docker build -t demo-app:1.0 .

Step 3: 启动服务
docker compose up -d

🔹 5. 验证

查看容器状态:

docker ps

你应该能看到:

demo-app (Spring Boot 应用)

demo-mysql (MySQL 数据库)

demo-redis (Redis 缓存)

这样,你的 Spring Boot 应用在 application.yml 或 application.properties 里配置好 Redis 和 MySQL,就能直接使用了。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐