Docker篇 (四) Alpine制作JRE镜像

一、前言

Alpine Linux 网站首页的注明“Small!Simple!Secure!Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.”

Alpine Linux 是一个社区开发的面向安全应用的轻量级 Linux 发行版,有以下特点:

  • 小巧:基于musl libc和busybox,和busybox一样小巧,最小的Docker镜像只有5MB;
  • 安全:面向安全的轻量发行版;
  • 简单:提供APK包管理工具,软件的搜索、安装、删除、升级都非常方便;
  • 适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。

二、JRE的准备

下载JRE,网址 https://www.java.com/en/download/manual.jsp,下载后解压,查看目录下文件占用大小为228M

[root@localhost alpine]# du -sh jre1.8.0_251
228M	jre1.8.0_251

删除不用的文件

# 删除文本文件
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html 

# 删除其他无用文件
rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin \
lib/deploy* \
lib/*javafx* \
lib/*jfx* \
lib/amd64/libdecora_sse.so \
lib/amd64/libprism_*.so \
lib/amd64/libfxplugins.so \
lib/amd64/libglass.so \
lib/amd64/libgstreamer-lite.so \
lib/amd64/libjavafx*.so \
lib/amd64/libjfx*.so

再次查看目录下文件占用大小为112M左右 

# 删除了116M左右的JRE文件
[root@localhost alpine]# du -sh jre1.8.0_251
112M	jre1.8.0_251

三、其他文件的准备

  • anron.jar               自己的应用,监听3000端口,只有一个api接口"/hi" 
  • glibc                      三个文件的下载网址 https://github.com/sgerrand/alpine-pkg-glibc
  • sgerrand.rsa.pub   下载网址 https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
[root@localhost alpine]# pwd
/ljh/alpine
[root@localhost alpine]# ll
total 115536
-rw-r--r--. 1 root  root  17614937 Jun  3 04:54 anron.jar
-rw-r--r--. 1 root  root      1282 Jun  3 05:40 Dockerfile
-rw-r--r--. 1 root  root   4412098 Jun  3 05:15 glibc-2.31-r0.apk
-rw-r--r--. 1 root  root   1007404 Jun  3 05:15 glibc-bin-2.31-r0.apk
-rw-r--r--. 1 root  root   7713411 Jun  3 05:15 glibc-i18n-2.31-r0.apk
drwxr-xr-x. 5 10143 10143      116 Jun  3 04:46 jre1.8.0_251
-rw-r--r--. 1 root  root  87543611 Jun  3 04:27 jre-8u251-linux-x64.tar.gz
-rw-r--r--. 1 root  root       451 Jan 11  2018 sgerrand.rsa.pub

Dockerfile文件的内容

FROM alpine:latest

MAINTAINER anron

# 下面RUN执行时的目录
WORKDIR /usr/local/soft/jre

# JRE下载地址 https://www.java.com/en/download/manual.jsp,下载后解压删除不用的文件
COPY jre1.8.0_251 /usr/local/soft/jre

# 应用
COPY anron.jar /app/anron.jar

# glibc下载网址 https://github.com/sgerrand/alpine-pkg-glibc
COPY glibc-2.31-r0.apk /usr/local/soft/jre
COPY glibc-bin-2.31-r0.apk /usr/local/soft/jre
COPY glibc-i18n-2.31-r0.apk /usr/local/soft/jre

# sgerrand.rsa.pub下载网址 https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
COPY sgerrand.rsa.pub /etc/apk/keys/

ENV JAVA_HOME=/usr/local/soft/jre
ENV PARAMS="-Xms2048M -Xmx2048M -XX:NewSize=512m -XX:MaxNewSize=512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8"
ENV PATH=$JAVA_HOME/bin:$PATH

# 更新Alpine的软件源为阿里云/etc/apk/repositories
# apk类似于ubuntu的apt-get,centos的yum,语法如下:apk add bash wget curl git vim 
# ca-certificates证书服务,是安装glibc前置依赖
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories \
    && echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories  \
    && apk update && apk upgrade   \
    && apk --no-cache add ca-certificates  \
    && apk add glibc-2.31-r0.apk glibc-bin-2.31-r0.apk glibc-i18n-2.31-r0.apk \
    && rm -rf /var/cache/apk/* glibc-2.31-r0.apk glibc-bin-2.31-r0.apk glibc-i18n-2.31-r0.apk

EXPOSE 3000

CMD ["/bin/sh","-c","java -jar /app/anron.jar $PARAMS"]

四、生成镜像

docker build -t apjre .

生产的镜像大小为190M左右

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
apjre               latest              8cc9aec2b0cb        20 hours ago        190MB

 

fetch http://mirrors.aliyun.com/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
ERROR: http://mirrors.aliyun.com/alpine/v3.10/main/: temporary error (try again later)
WARNING: Ignoring APKINDEX.f4152a6c.tar.gz: No such file or directory
fetch http://mirrors.aliyun.com/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
2 errors; 14 distinct packages available
ERROR: http://mirrors.aliyun.com/alpine/v3.10/community/: temporary error (try again later)
WARNING: Ignoring APKINDEX.d5bb4c05.tar.gz: No such file or directory


如出现以上错误,在build命令中加上--network=host参数
docker build -t apjre . --network=host

 

五、测试

# 用Dockerfile中默认的CMD
[root@localhost ~]# docker run -p 8081:3000 -itd --name jar1 apjre

# 替换Dockerfile中的CMD为/bin/sh -c 'java -jar /app/anron.jar --spring.profiles.active=prod'
[root@localhost ~]# docker run -p 8082:3000 -itd --name jar2 apjre /bin/sh -c 'java -jar /app/anron.jar --spring.profiles.active=prod'

[root@localhost ~]# docker exec -it jar1 /bin/sh
/usr/local/soft/jre # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:05 java -jar /app/anron.jar -Xms2048M -Xmx2048M -XX:NewSize=512m -XX:MaxNewSize=512m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8
   35 root      0:00 /bin/sh
   40 root      0:00 ps -ef
/usr/local/soft/jre # exit
   
[root@localhost ~]# docker exec -it jar2 /bin/sh
/usr/local/soft/jre # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:04 java -jar /app/anron.jar --spring.profiles.active=prod
   35 root      0:00 /bin/sh
   40 root      0:00 ps -ef   

 

Docker篇 (一) 制作镜像-Tomcat开启APR模式

Docker篇 (二) 镜像管理-镜像仓库

Docker篇 (三) 跨宿主机的网络通信

Docker篇 (四) Alpine制作JRE镜像

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值