查看: 46|回复: 0

Docker容器化部署实战:从零构建Spring Boot微服务镜像

[复制链接]

3

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2008-1-21
发表于 2026-4-4 15:04:00 | 显示全部楼层 |阅读模式

前言

Docker 是现代微服务架构的基石。将 Spring Boot 应用容器化,可以实现一次构建,处处运行。本文带你从零完成 Spring Boot 应用的 Docker 容器化部署。

一、为什么需要 Docker

  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:秒级启动,秒级扩容
  • 资源隔离:每个容器独立运行,互不影响
  • CI/CD 友好:与 Jenkins/GitHub Actions 无缝集成

二、Spring Boot 项目准备

<!-- pom.xml -->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

mvn clean package -DskipTests
// target/myapp-1.0.0.jar

三、编写 Dockerfile

# 基础版
FROM openjdk:21-jdk-slim
WORKDIR /app
COPY target/myapp-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

# 多阶段构建(推荐)
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /build/target/myapp-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

四、构建和运行

# 构建镜像
docker build -t myapp:1.0.0 .

# 运行容器
docker run -d --name myapp -p 8080:8080 \
  -e SPRING_PROFILES_ACTIVE=prod \
  -e JAVA_OPTS="-Xms256m -Xmx512m" \
  myapp:1.0.0

# 查看日志
docker logs -f myapp

# 进入容器调试
docker exec -it myapp sh

五、Docker Compose 编排

# docker-compose.yml
version: "3.8"
services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydb
    depends_on:
      db:
        condition: service_healthy
    restart: always

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - MYSQL_DATABASE=mydb
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
      interval: 10s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  mysql_data:

# 一键启动
docker compose up -d

六、镜像优化技巧

# 1. 使用 .dockerignore
# .dockerignore
.git
.mvn
target/classes
test

# 2. 非root用户运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

# 3. 镜像大小对比
# openjdk:21-jdk = 470MB
# eclipse-temurin:21-jre-alpine = 90MB
# 节省 80%

七、常用命令速查

docker images

docker ps -a

docker logs -f myapp

docker stats

总结

Docker 容器化是 Java 开发者必备技能。核心要点:多阶段构建减小镜像、Docker Compose 编排多服务、合理利用缓存加速构建。

觉得有帮助请点赞收藏!有问题欢迎评论区交流 🚀

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部