找回密码
 立即注册
首页 业界区 安全 Docker容器化部署实战:从零构建Spring Boot微服务镜像 ...

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

迁岂罚 4 小时前
前言

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


  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:秒级启动,秒级扩容
  • 资源隔离:每个容器独立运行,互不影响
  • CI/CD 友好:与 Jenkins/GitHub Actions 无缝集成
二、Spring Boot 项目准备
  1. <build>
  2.     <plugins>
  3.         <plugin>
  4.             <groupId>org.springframework.boot</groupId>
  5.             spring-boot-maven-plugin</artifactId>
  6.         </plugin>
  7.     </plugins>
  8. </build>
  9. mvn clean package -DskipTests
  10. // target/myapp-1.0.0.jar
复制代码
三、编写 Dockerfile
  1. # 基础版
  2. FROM openjdk:21-jdk-slim
  3. WORKDIR /app
  4. COPY target/myapp-1.0.0.jar app.jar
  5. EXPOSE 8080
  6. ENTRYPOINT ["java", "-jar", "app.jar"]
  7. # 多阶段构建(推荐)
  8. FROM maven:3.9-eclipse-temurin-21 AS builder
  9. WORKDIR /build
  10. COPY pom.xml .
  11. RUN mvn dependency:go-offline
  12. COPY src ./src
  13. RUN mvn package -DskipTests
  14. FROM eclipse-temurin:21-jre-alpine
  15. WORKDIR /app
  16. COPY --from=builder /build/target/myapp-1.0.0.jar app.jar
  17. EXPOSE 8080
  18. ENTRYPOINT ["java", "-jar", "app.jar"]
复制代码
四、构建和运行
  1. # 构建镜像
  2. docker build -t myapp:1.0.0 .
  3. # 运行容器
  4. docker run -d --name myapp -p 8080:8080 \
  5.   -e SPRING_PROFILES_ACTIVE=prod \
  6.   -e JAVA_OPTS="-Xms256m -Xmx512m" \
  7.   myapp:1.0.0
  8. # 查看日志
  9. docker logs -f myapp
  10. # 进入容器调试
  11. docker exec -it myapp sh
复制代码
五、Docker Compose 编排
  1. # docker-compose.yml
  2. version: "3.8"
  3. services:
  4.   app:
  5.     build: .
  6.     ports:
  7.       - "8080:8080"
  8.     environment:
  9.       - SPRING_PROFILES_ACTIVE=prod
  10.       - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydb
  11.     depends_on:
  12.       db:
  13.         condition: service_healthy
  14.     restart: always
  15.   db:
  16.     image: mysql:8.0
  17.     environment:
  18.       - MYSQL_ROOT_PASSWORD=123456
  19.       - MYSQL_DATABASE=mydb
  20.     volumes:
  21.       - mysql_data:/var/lib/mysql
  22.     healthcheck:
  23.       test: ["CMD", "mysqladmin", "ping"]
  24.       interval: 10s
  25.       retries: 5
  26.   redis:
  27.     image: redis:7-alpine
  28.     ports:
  29.       - "6379:6379"
  30. volumes:
  31.   mysql_data:
  32. # 一键启动
  33. docker compose up -d
复制代码
六、镜像优化技巧
  1. # 1. 使用 .dockerignore
  2. # .dockerignore
  3. .git
  4. .mvn
  5. target/classes
  6. test
  7. # 2. 非root用户运行
  8. RUN addgroup -S appgroup && adduser -S appuser -G appgroup
  9. USER appuser
  10. # 3. 镜像大小对比
  11. # openjdk:21-jdk = 470MB
  12. # eclipse-temurin:21-jre-alpine = 90MB
  13. # 节省 80%
复制代码
七、常用命令速查
  1. docker images
  2. docker ps -a
  3. docker logs -f myapp
  4. docker stats
复制代码
总结

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

觉得有帮助请点赞收藏!有问题欢迎评论区交流
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

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