title: 如何构建SpringBoot应用的Docker镜像
date: 2019-12-04 22:17:54
categories:
- SpringBoot
tags: - Docker
- SpringBoot
背景
SpringBoot大道其行,微服务也是大道其行,越来越多的SpringBoot应用使用Docker容器来运行。既然要用Docker容器运行,那首先得把SpringBoot应用打包成Docker镜像。
构建方法
目前主要的方法有三种:
- 1.使用dockerfile-maven-plugin插件构建
- 2.使用Google Jib插件构建
- 3.手动构建
下面我们一一来介绍,首先来介绍
使用dockerfile-maven-plugin插件构建
项目地址:https://github.com/spotify/dockerfile-maven
项目根目录下创建Dockerfile
以下给出了多个Dockerfile,根据实际情况选择
简洁版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17FROM openjdk:8-jdk-alpine
MAINTAINER jaychang <jaychang1987@gmail.com>
VOLUME /tmp
ARG FILE
ARG APP_NAME
ADD ${FILE} /app.jar
ENV JAVA_OPTS="-XX:MaxRAMFraction=2"
# Configure ustc alpine software source and timezone
RUN sed -i "s#http://dl-cdn.alpinelinux.org#https://mirrors.aliyun.com#g" /etc/apk/repositories \
&& apk update \
&& apk --no-cache add tzdata curl tini \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& rm -rf /var/cache/apk/*
# To reduce Tomcat startup time we added a system property pointing to "/dev/urandom" as a source of entropy.
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["sh","-c","java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar app.jar"]有带-D的参数
1 | FROM openjdk:8-jdk-alpine |
- 带字体版
常见的场景如excel导出,验证码
1 | FROM openjdk:8-jdk-alpine |
在pom.xml中配置maven插件
1 | <build> |
docker.image.prefix可以预先在properties标签中定义好,如果要区分不同环境传到不同的镜像中心可使用profiles标签来定义不同环境的docker.image.prefix
开始构建镜像
前提是要先安装好docker服务
1 | mvn clean package -Dmaven.test.skip=true -U |
使用Google Jib插件构建
项目地址:https://github.com/GoogleContainerTools/jib
Google Jib的优势是无需事先安装docker,无需定义Dockerfile文件,而且Google Jib可以分层,依赖的jar构成一层,resource构成一层,然后项目本身的classes构建一层。这样如果只是改变项目本身代码,那么构建是非常快的。且推送的镜像也是非常小的,可以大大节省网络流量。
在pom.xml中配置maven插件
1 | <build> |
lombok.version为1.18.8
mapstruct.version为1.3.0.Final
如果您的项目没有用到Pinpoint,Nacos可以完全精简为如下
1 | <build> |
这里我们构建了一个基镜像harbor.chaomeifan.com/library/openjdk:8-jdk-alpine-v1,以下给出基镜像的Dockerfile
1 | FROM openjdk:8-jdk-alpine |
由于基镜像用了非root用户启动进程,故如果有映射到容器的目录需要将目录所有者所属组改为Dockerfile中定义的用户id,组id,chown -R 1739:1739 /path/directory
如果觉得嫌麻烦,可以在基镜像中直接用root
1 | FROM openjdk:8-jdk-alpine |
这样就无需在jib插件配置中设置
zcckj:zcckj
开始构建镜像
1 | mvn clean compile jib:build -Dmaven.test.skip=true -DsendCredentialsOverHttp=true -U |