1.问题由来
项目的jar包大小为48M左右,放在docker环境中运行,使用centos作为服务器并通过从宿主机解压jdk1.8.tar.gz方式配置java运行环境,发现打包后镜像大小为600M左右。
2.Alpine
Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 Linux 发行版,Alpine 采用了 musl libc 和 busybox 以减小系统的体积和运行时资源消耗,但功能上比 busybox 又完善的多,因此得到开源社区越来越多的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具 apk,可以通过 https://pkgs.alpinelinux.org/packages
网站上查询包信息,也可以直接通过 apk 命令直接查询和安装各种软件。
于是考虑使用Alpine作为最小的运行环境,docker官方也支持Apline的服务且有jdk与Alpine集成好的镜像,我们可以直接使用。
DockerFile内容如下:
FROM java:8-alpine
MAINTAINER
## 更新apk源
RUN apk update
## 设置时区
RUN apk add -U tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
## 设置输出格式
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
完成后发现构建的镜像196M。
Alpine使用apk进行安装。使用Alpine运行的容器,如果需要进入容器内部,需要使用docker exec -it 镜像id /bin/sh
命令,这一点与其他的稍微有些不一致。