记录docker第一次选jdk镜像(2)

需求

1.镜像要尽可能的小
2.字符集必须支持中文
3.时区是UTC+8
4.字体的支持
5.运行在容器的java进程pid!=1(如果java进程pid=1会导致jmap等工具使用不了。这里使用tini)

措施

  • 基于以上要求我们构建出一下镜像
  • 首先使用apline作为基础镜像足够小只有5M
  • 由于alpine自带支持中文的字符集,这里我们只需要将LANG设置为C.UTF-8即可完美的支持中文。
  • 国内软件源首选阿里云啦,顺道配置一下阿里云的镜像源,加速我们的镜像构建速度。
  • 配置UTC+8时区需要安装tzdata,安装完成之后配置一下即可。
  • 目前alpine携带JDK版本为1.80_171。
  • 使用tini 包装java进程。

打包基础jdk镜像

FROM alpine:3.8
MAINTAINER cf [email protected]
ENV LANG=C.UTF-8 \
    JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk/jre \
    PATH=$PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin \
    TZ=Asia/Shanghai
RUN echo "" > /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.8/main/" >> /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.8/community/" >> /etc/apk/repositories \
&& apk update && apk add --no-cache openjdk8 ca-certificates tzdata ttf-dejavu tini \
&& rm -rf /var/cache/apk/* \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

这个相当于已经把jdk环境搭建完毕,下面只要把具体的应用封装在这镜像之上即可。
比如我现在需要跑一个

FROM alpine-jdk-1.8:v1
ADD eureka-server-1.0.0-SNAPSHOT.jar /usr/eureka-server-1.0.0-SNAPSHOT.jar
EXPOSE 1111
CMD ["java","jar","/usr/eureka-server-1.0.0-SNAPSHOT.jar"]

你可能感兴趣的:(记录docker第一次选jdk镜像(2))