前言
Docker 是现代微服务架构的基石。将 Spring Boot 应用容器化,可以实现一次构建,处处运行。本文带你从零完成 Spring Boot 应用的 Docker 容器化部署。
一、为什么需要 Docker
- 环境一致性:开发、测试、生产环境完全一致
- 快速部署:秒级启动,秒级扩容
- 资源隔离:每个容器独立运行,互不影响
- CI/CD 友好:与 Jenkins/GitHub Actions 无缝集成
二、Spring Boot 项目准备
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- 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 编排多服务、合理利用缓存加速构建。
觉得有帮助请点赞收藏!有问题欢迎评论区交流
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |