Spring Boot 应用 Docker 镜像优化
前言
如何让 Spring Boot 应用的 docker 镜像体积更小?镜像制作速度更快?启动时参数可配置?
实战
1、先将 Spring Boot 应用打包:
2、编写 Dockerfile,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| FROM openjdk:8-jre-alpine
ADD target/*.jar app.jar
ENV ANY_REDIS_HOST=127.0.0.1 \ ANY_REDIS_PORT=6379 \ ANY_MARIADB_URL= \ ANY_MARIADB_USERNAME= \ ANY_MARIADB_PASSWORD=
VOLUME /tmp
CMD java -jar /app.jar \ --spring.redis.host=$ANY_REDIS_HOST \ --spring.redis.port=$ANY_REDIS_PORT \ --spring.datasource.url=$ANY_MARIADB_URL \ --spring.datasource.username=$ANY_MARIADB_USERNAME \ --spring.datasource.password=$ANY_MARIADB_PASSWORD \
|
其中 CMD 中的配置对应 Spring Boot 应用中 application.yml 的配置,打包前均可不填,使其能在 Docker 启动容器时再配置。
1 2 3 4 5 6 7 8 9 10
| # application.yml 片段 # 数据库 及 Redis 配置 spring: redis: host: datasource: url: driver-class-name: org.mariadb.jdbc.Driver username: password:
|
3、制作镜像
1
| $ docker build -t any-video .
|
any-video 为镜像名, TAG 默认为 latest。
4、 查看镜像信息
1 2 3
| [root@SilenceMac any-video] REPOSITORY TAG IMAGE ID CREATED SIZE any-video latest 8681a026f5e2 13 minutes ago 113.1 MB
|
经过各种对比,基于 openjdk:8-jre-alpine 制作的镜像体积小,消耗时间短,有更佳选择的欢迎指出!
5、使用 Docker 启动应用,示例如下:
1 2 3 4 5 6
| $ docker run -d --name any-video -p 8080:8080 \ -e ANY_REDIS_HOST=127.0.0.1 \ -e ANY_REDIS_PORT=6379 \ -e ANY_MARIADB_URL="jdbc:mysql://localhost:3306/any_db?useUnicode=true&characterEncoding=UTF-8" \ -e ANY_MARIADB_USERNAME=root \ -e ANY_MARIADB_PASSWORD=anycode any-video
|