问题描述
前文我们通过修改 Dockerfile 修改了容器内的时区和时间,解决了 Java 应用内时差问题,然后 Leader 提出了一个新的问题,就是 FROM java:8
基础镜像的体积太大了,整个镜像构建后大概有 700MB ~ 800MB,这样当我们多个应用频繁发布版本的时候,服务器的磁盘空间也会变得吃紧,能否利用 alpine 制作一个基础镜像。
解决方案
首先想到的就是,Java 应用的人这么多,是否已经有做好的基础镜像供大众使用,于是使用 docker search
命令查询关键字,得出以下结果:
可以看到,docker.io/anapsix/alpine-java
镜像是以 alpine 为基础的,使用 Oracle Jave 8
并且集成了 GLIBC
等组件的基础镜像,stars 数量为 420,很符合我们的期待,又去 https://hub.docker.com/ 浏览了一下详细的介绍信息。好的,没毛病,就用它了。
方案落地
操作记录:
- 修改 Dockerfile 并启动
FROM anapsix/alpine-java
ADD target/Joine.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- 查看指定容器日志
kubectl logs -f --tail=200 -n mynamespace mycontainername
- 发现仍有时区问题,此处由于基础镜像不同,不能照搬之前的方式处理,继续优化 Dockerfile
FROM anapsix/alpine-java
ENV TZ Asia/Shanghai
RUN echo "http://mirrors.aliyun.com/alpine/v3.4/main/" > /etc/apk/repositories \
&& apk --no-cache add tzdata zeromq \
&& ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo "${TZ}" > /etc/timezone
ADD target/Joine.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- 优化解释
alpine 使用 apk 安装,这里先把 apk 安装源仓库更新为阿里云镜像仓库,之后进行 apk 安装 tzdata 时区工具,之后将工具时间和时区更新到系统
完成
再次发布新版本,查看日志,时间已经恢复正常,查看镜像大小,已缩减至 200MB,很大程度上解决了之前镜像体积过大的问题。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于