You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README.md 2.8 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # spring-boot-demo-docker
  2. > 本 demo 主要演示了如何容器化一个 Spring Boot 项目。通过 `Dockerfile` 的方式打包成一个 images 。
  3. ## 1.开发步骤
  4. ### 1.1.创建一个 HelloWorld 的 SpringBoot 项目
  5. 参考 `demo-base-helloworld` 案例即可
  6. ### 1.2.创建Dockerfile
  7. ```dockerfile
  8. # 多阶段构建
  9. FROM amazoncorretto:17.0.4-alpine3.15 as builder
  10. WORKDIR application
  11. ARG JAR_FILE=target/*.jar
  12. COPY ${JAR_FILE} application.jar
  13. # layertools extract 命令会将 spring boot fatjar 解压成多个 layers
  14. RUN java -Djarmode=layertools -jar application.jar extract
  15. FROM amazoncorretto:17.0.4-alpine3.15
  16. # 作者信息
  17. MAINTAINER "Yangkai.Shen 237497819@qq.com"
  18. WORKDIR application
  19. COPY --from=builder application/dependencies/ ./
  20. COPY --from=builder application/spring-boot-loader/ ./
  21. COPY --from=builder application/snapshot-dependencies/ ./
  22. COPY --from=builder application/application/ ./
  23. # 添加一个存储空间
  24. VOLUME /tmp
  25. # 暴露8080端口
  26. EXPOSE 8080
  27. # 入口
  28. ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/urandom","org.springframework.boot.loader.JarLauncher"]
  29. ```
  30. ### 1.2.打包
  31. 1. 首先在 spring-boot-demo 根目录下,先执行编译打包 Jar 文件
  32. ```shell
  33. $ mvn clean -DskipTests package
  34. ```
  35. 2. 再进入 `demo-package-docker` 目录,构建镜像
  36. ```shell
  37. $ cd demo-package/demo-package-docker
  38. $ docker build -t demo-package-docker:v1 .
  39. ```
  40. 3. 查看生成镜像
  41. ```shell
  42. $ docker images | grep demo
  43. demo-package-docker v3 58e9b4918f61 19 minutes ago 353MB
  44. demo-package-docker v2 35303ce1960c 22 minutes ago 351MB
  45. demo-package-docker v1 7d4a9e953a19 28 minutes ago 351MB
  46. ```
  47. 4. 测试运行
  48. ```shell
  49. $ docker run -p 8080:8080 demo-package-docker:v1
  50. ```
  51. > 注意:
  52. > 1.Spring Boot 提供的 maven 插件中已包含 `spring-boot-loader-tools` 依赖,该依赖可以将 SpringBoot FatJar 解压为每个layer,这样在 Docker 多阶段构建的时候,可以让 Docker 复用已存在的 layer,达到加速构建、加速上传、加速下载的目的
  53. > 2.同学们可以通过修改代码、添加依赖等方式重新 build 不同版本的镜像,然后通过 `docker inspect xxx` 命令对比不同版本的 layer,观察输出信息是否存在相同的 layer sha256 值,存在即表示 Docker 已经复用了该 layer
  54. ## 2.参考
  55. - [Spring Boot 官方文档之镜像构建](https://docs.spring.io/spring-boot/docs/3.0.0-M5/reference/htmlsingle/#container-images.dockerfiles)
  56. - [Docker 官方文档](https://docs.docker.com/)
  57. - [Dockerfile 命令参考文档](https://docs.docker.com/engine/reference/builder/)