基于K8S的持续集成部署3之构建Java运行环境的基础镜像

本篇章需要小伙伴们有一定的linux、docker、k8s的实践基础(说白了就是至少能看明白,懂不懂无所谓)

1、Jdk选型

这里我选择的是阿里的Dragonwell,https://dragonwell-jdk.io/#/index

image-ssse.png

阿里的Jdk经过长时间的优化,有着比较不错的性能,一般的Linux系统我们只要选择linux的镜像即可,唯一的区别就是要区分你用的系统架构是aarch64的还是x86_64的。一般情况下,常用的系统,比如alinux3、centos7等,我们选择x86_64 linux的即可。

如果使用的基础系统是alpine系统,那么我们需要选择以下镜像。

image-dbzq.png

首先我们根据公司的业务,选择业务项目对应的Jdk版本。这里拿我自己的项目举例,我的项目是基于Jdk11开发的,所以我选择以下Jdk版本。

image-rheq.png

接下来,我们先把这个jdk下载下来,这里你会发现阿里的Jdk居然是放在github上面的,不用科技根本下不下来。那有没有方法不开科技也能把它下载下来呢?答案是肯定的。这里我们就要用到github加速代理,这里我在互联网中找到了一个加速代理

https://mirror.ghproxy.com/

我们可以看到它原来的地址是

https://github.com/dragonwell-project/dragonwell11/releases/download/dragonwell-standard-11.0.21.17_jdk-11.0.21-ga/Alibaba_Dragonwell_Standard_11.0.21.17.9_x64_linux.tar.gz

使用github加速代理的地址,如下所示,是不是很简单呢。

https://mirror.ghproxy.com/https://github.com/dragonwell-project/dragonwell11/releases/download/dragonwell-standard-11.0.21.17_jdk-11.0.21-ga/Alibaba_Dragonwell_Standard_11.0.21.17.9_x64_linux.tar.gz

我们将以上的代理地址,复制粘贴到浏览器的地址栏中,敲击回车,你就会发现,哎,速度还可以。

image-ricd.png

2、阉割原Jdk(目的是为了减小基础镜像的大小)

在 1 中,我们已经把这个Jdk的压缩包下载到了本地

image-ahwl.png

然后解压缩,"dragonwell-11.0.21.17+9-GA"这个文件夹就是我们要阉割的Jdk11运行环境。进入"dragonwell-11.0.21.17+9-GA"文件夹

image-vhje.png
它原来的大小,如下图所示

image-gswj.png
进入下图的路径中,删除src.zip,这个是jdk的源码,不是必须的,所以可以删除。

image-vkyl.png
现在Jdk整体的大小就少了不少。

image-nzvx.png
这里有人会说了,为什么不使用docker hub中的官方镜像,那会更小。

按我的理解来说,就是你知道你用的是什么系统,用的是什么Jdk,有问题的话,也知道该系统的特性,从而更容易解决底层系统或者Jdk本身的问题,从而也有更高的自由度。

下一步,我们将这个"dragonwell-11.0.21.17+9-GA"文件夹重新压缩打包,再次对比一次Jdk的大小。

image-ivdx.png

接着,我们删除除"dragonwell-11.0.21.17+9-GA.zip"压缩包外的所有文件

image-occq.png

3、编写dockerfile文件(为了构建Java运行环境的基础镜像)

# https://help.aliyun.com/zh/alinux/getting-started/use-an-alibaba-cloud-linux-image-in-docker
FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest

# 定义环境变量
ENV LANG='en_US.UTF-8'
ENV LANGUAGE='en_US:en'
ENV LC_ALL='en_US.UTF-8'
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH="/opt/java/openjdk/bin:$PATH"
ENV RUN_USER="boot"

COPY dragonwell-11.0.21.17+9-GA.zip /tmp/openjdk.tar.gz

RUN yum install -y binutils tzdata openssl curl ca-certificates fontconfig gzip tar nscd passwd procps-ng; \
mkdir -p /opt/java/openjdk; \
cd /opt/java/openjdk; \
tar -xf /tmp/openjdk.tar.gz --strip-components=1; \
export PATH="/opt/java/openjdk/bin:$PATH"; \
yum clean all; \
rm -rf /tmp/openjdk.tar.gz; \
rm -rf ~/.cache/*; \
adduser ${RUN_USER}; \
passwd -d ${RUN_USER};

# 变更脚本属性,创建基础文件夹
RUN mkdir -p /home/${RUN_USER}; \
chown -R ${RUN_USER}.${RUN_USER} /home/${RUN_USER};

CMD ["jshell"]

我们在根目录执行以下命令, 将当前目录下的文件打包到镜像中

docker build --pull --rm -f "Dockerfile" -t alinux-dragonwell11:springboot "."

image-dcha.png

使用"docker images |grep springboot"查看刚刚打包的镜像

image-fumi.png

那么,这一节,就到这里结束了,美好的时光总是短暂的,老朽要去休息了,咱们下一节再见。