Docker容器化部署实战:从零构建Spring Boot微服务镜像
<h2>前言</h2><p>Docker 是现代微服务架构的基石。将 Spring Boot 应用容器化,可以实现一次构建,处处运行。本文带你从零完成 Spring Boot 应用的 Docker 容器化部署。</p>
<h2>一、为什么需要 Docker</h2>
<ul>
<li><strong>环境一致性</strong>:开发、测试、生产环境完全一致</li>
<li><strong>快速部署</strong>:秒级启动,秒级扩容</li>
<li><strong>资源隔离</strong>:每个容器独立运行,互不影响</li>
<li><strong>CI/CD 友好</strong>:与 Jenkins/GitHub Actions 无缝集成</li>
</ul>
<h2>二、Spring Boot 项目准备</h2>
<pre><code><!-- 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</code></pre>
<h2>三、编写 Dockerfile</h2>
<pre><code># 基础版
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"]</code></pre>
<h2>四、构建和运行</h2>
<pre><code># 构建镜像
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</code></pre>
<h2>五、Docker Compose 编排</h2>
<pre><code># 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</code></pre>
<h2>六、镜像优化技巧</h2>
<pre><code># 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%</code></pre>
<h2>七、常用命令速查</h2>
<pre><code>docker images
docker ps -a
docker logs -f myapp
docker stats
</code></pre>
<h2>总结</h2>
<p>Docker 容器化是 Java 开发者必备技能。核心要点:多阶段构建减小镜像、Docker Compose 编排多服务、合理利用缓存加速构建。</p>
<p>觉得有帮助请点赞收藏!有问题欢迎评论区交流 🚀</p>
</div>
<div id="MySignature" role="contentinfo">
---
📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**
💬 有问题或建议?欢迎在评论区留言讨论~
🔗 更多技术干货请关注作者:弥烟袅绕
📚 本文地址:https://www.cnblogs.com/czlws/p/19821137/docker-spring-boot-microservice-devops<br><br>
来源:https://www.cnblogs.com/czlws/p/19821137/docker-spring-boot-microservice-devops
頁:
[1]