前言
如何让 Spring Boot 应用的 docker 镜像体积更小?镜像制作速度更快?启动时参数可配置?
实战
1/ 先将 Spring Boot 应用打包:
$ mvn clean package
2/ 编写 Dockerfile,内容如下:
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 启动容器时再配置。
# application.yml 片段
# 数据库 及 Redis 配置
spring:
redis:
host:
datasource:
url:
driver-class-name: org.mariadb.jdbc.Driver
username:
password:
3/ 制作镜像
$ docker build -t any-video .
any-video 为镜像名, TAG 默认为 latest。
4/ 查看镜像信息
[root@SilenceMac any-video]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
any-video latest 8681a026f5e2 13 minutes ago 113.1 MB
经过各种对比,基于 openjdk:8-jre-alpine 制作的镜像体积小,消耗时间短,有更佳选择的欢迎指出!
5/ 使用 Docker 启动应用,示例如下:
$ 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
唯美画风
网友评论