Docker 容器化实战:打包 Spring Boot 应用并部署到服务器
·
Docker 容器化 Spring Boot 应用实战指南
1. 准备 Spring Boot 应用
- 确保应用已通过 Maven/Gradle 打包成可执行 JAR 文件:
mvn clean package # Maven ./gradlew build # Gradle - 生成的 JAR 文件路径:
target/your-app.jar(Maven)或build/libs/your-app.jar(Gradle)
2. 创建 Dockerfile
在项目根目录创建 Dockerfile(无文件扩展名),内容如下:
# 使用 OpenJDK 官方镜像
FROM openjdk:17-jdk-slim
# 设置工作目录
WORKDIR /app
# 复制 JAR 文件到容器
COPY target/your-app.jar app.jar
# 暴露应用端口(与 application.properties 中端口一致)
EXPOSE 8080
# 启动应用
ENTRYPOINT ["java", "-jar", "app.jar"]
参数说明:
openjdk:17-jdk-slim:轻量级 Java 17 基础镜像EXPOSE 8080:声明容器监听端口(需与 Spring Boot 端口匹配)ENTRYPOINT:不可变启动命令,保证容器行为一致
3. 构建 Docker 镜像
docker build -t springboot-app:1.0 . # -t 指定镜像名称和标签
验证镜像:
docker images | grep springboot-app
4. 本地运行测试
docker run -d -p 8080:8080 --name myapp springboot-app:1.0
检查状态:
docker ps -a | grep myapp
curl http://localhost:8080/health
5. 部署到服务器
5.1 推送镜像到仓库
docker tag springboot-app:1.0 your-dockerhub/springboot-app:1.0
docker push your-dockerhub/springboot-app:1.0
5.2 服务器操作
# 拉取镜像
docker pull your-dockerhub/springboot-app:1.0
# 启动容器(生产环境推荐)
docker run -d \
-p 80:8080 \ # 外部端口:容器端口
--restart=always \ # 自动重启
-v /app/logs:/var/logs \ # 日志持久化
--name production-app \
your-dockerhub/springboot-app:1.0
6. 生产环境优化建议
-
使用多阶段构建 减小镜像体积:
FROM maven:3.8.6 AS build COPY . . RUN mvn package FROM openjdk:17-jdk-slim COPY --from=build /target/your-app.jar app.jar ENTRYPOINT ["java","-jar","app.jar"] -
添加健康检查:
HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost:8080/actuator/health || exit 1 -
环境变量配置:
docker run -d \ -e "SPRING_PROFILES_ACTIVE=prod" \ -e "DB_URL=jdbc:mysql://db-host:3306/mydb" \ ...
7. 常用运维命令
| 场景 | 命令 |
|---|---|
| 查看日志 | docker logs -f production-app |
| 进入容器 | docker exec -it production-app /bin/bash |
| 停止容器 | docker stop production-app |
| 更新版本 | docker pull your-dockerhub/springboot-app:2.0<br>docker restart production-app |
关键提示:
- 确保服务器已安装 Docker Engine(
docker --version验证)- 生产环境建议使用 Docker Compose 编排多容器
- 敏感信息(如数据库密码)应通过 secrets 或环境变量注入
更多推荐
所有评论(0)