10天学会Spring Boot:从零基础到实战项目

Day 8 第2篇:Docker容器化部署

大家好!欢迎来到 Day 8 第二篇!
昨天我们搭建了微服务架构,今天我们把项目打包成 Docker 镜像,实现“一次打包,到处运行”。
Docker 是目前最流行的容器化技术,学会它后,你就能轻松把 Spring Boot 项目部署到阿里云、腾讯云、K8s 等任何环境。

1. Docker 基础概念
  • 镜像(Image):类似一个“模板”,包含操作系统、JDK、项目 jar 等
  • 容器(Container):镜像运行起来的实例,相当于一个轻量级虚拟机
  • Dockerfile:一个文本文件,定义如何构建镜像
2. 安装 Docker(推荐)
  • Windows/Mac:下载 Docker Desktop(https://www.docker.com/products/docker-desktop/)
  • Linux:sudo apt install docker.io 或 sudo yum install docker
  • 验证:docker --version 和 docker run hello-world
3. 准备 Spring Boot 项目(可执行 JAR)

确保项目能打出可执行 jar(默认就是):

mvn clean package
# 会在 target/ 目录下生成 demo-0.0.1-SNAPSHOT.jar
4. 编写 Dockerfile(推荐方式一:多阶段构建)

在项目根目录创建 Dockerfile(无后缀):

# 阶段1:构建阶段
FROM maven:3.9.6-eclipse-temurin-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# 阶段2:运行阶段(镜像更小)
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

优点:最终镜像只包含 JRE + jar,大小通常 150-200MB,速度更快。

5. 构建与运行镜像
# 构建镜像(注意最后有个点,表示当前目录)
docker build -t my-springboot-app:1.0 .

# 查看镜像
docker images

# 运行容器(映射端口 8080)
docker run -d --name myapp -p 8080:8080 my-springboot-app:1.0

# 查看日志
docker logs myapp

# 访问 http://localhost:8080
6. 常见配置(数据库、Redis、端口等)

方式一:环境变量(推荐)

# application.yml 中使用 ${...} 读取环境变量
spring:
  datasource:
    url: jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

启动容器时传入:

docker run -d -p 8080:8080 \
  -e DB_HOST=192.168.1.100 \
  -e DB_PORT=3306 \
  -e DB_NAME=springboot_demo \
  -e DB_USERNAME=root \
  -e DB_PASSWORD=123456 \
  my-springboot-app:1.0

方式二:挂载配置文件(开发调试常用)

docker run -d -p 8080:8080 \
  -v /path/to/application-prod.yml:/app/config/application.yml \
  my-springboot-app:1.0
7. 推送镜像到云仓库(阿里云、Docker Hub)

阿里云示例(推荐国内速度快):

  1. 登录阿里云容器镜像服务(https://cr.console.aliyun.com)
  2. 创建镜像仓库(比如 namespace:mygroup,仓库名:demo)
  3. 登录:
    docker login --username=你的账号 registry.cn-hangzhou.aliyuncs.com
    
  4. 打标签并推送:
    docker tag my-springboot-app:1.0 registry.cn-hangzhou.aliyuncs.com/mygroup/demo:1.0
    docker push registry.cn-hangzhou.aliyuncs.com/mygroup/demo:1.0
    
8. 练习题(必须动手做)
  1. 为你的 Spring Boot 项目编写 Dockerfile(使用多阶段构建)。
  2. 构建镜像并运行容器,访问 http://localhost:8080 验证是否正常。
  3. 用环境变量方式配置数据库连接,启动容器(可以先启动一个 MySQL 容器)。
  4. 把镜像推送到阿里云或 Docker Hub(建议创建免费账号)。
  5. (可选)用 Docker Compose 启动多个容器(MySQL + Redis + 应用)。
9. 小结

今天我们掌握了:

  • Dockerfile 编写(多阶段构建)
  • docker build、run、logs 等常用命令
  • 通过环境变量、挂载文件配置项目
  • 把镜像推送到云仓库,实现云上部署

Docker 让部署变得异常简单,“一次打包,到处运行”真正实现了开发、测试、生产环境一致性。

明天(Day 9 第1篇) 我们将学习 异步任务与调度,包括 @Async、@Scheduled、RabbitMQ 消息队列等高级特性,让你的项目处理并发和定时任务游刃有余。

记得在评论区打卡“Day 8 第2篇完成”!
如果构建镜像失败、容器启动报错、端口映射不上,欢迎留言,我帮你排查。
明天见!我们继续冲!🚀

更多推荐