找不到jre镜像公开仓库,Docker创建一个jre1.8镜像

三更

自己编写的包还是大,用现成的 附加时区和解决路径转义问题

FROM   openjdk:8-jre-alpine3.9
MAINTAINER admin "admin@qq.com"
WORKDIR /home/jre

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
RUN  apk add  curl
#RUN apk update && apk upgrade && apk add  vim  && apk add  curl
#RUN apk add  mediainfo 
#RUN apk add ffmpeg 

# 解决时差8小时问题
ENV TZ=Asia/Shanghai
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apk add tzdata && cp /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#ENTRYPOINT date

二更

添加时区校对

主要是jdk打包出来的镜像太大了,600多M,顶不住
贴个自己系统版本

[root@node05 home]# cat /proc/version
Linux version 4.18.0-80.el8.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC)) #1 SMP Tue Jun 4 09:19:46 UTC 2019

根据参考链接1中地址下载一个jre

下载地址是https://www.java.com/en/download/manual.jsp
下载jre

我这里下载的文件是 jre-8u341-linux-x64.tar.gz
其中帖子说瘦身动作我试了试,瘦了1M,所以我就忽略了

复制文件到liunx环境中

目录结构

  1. dockerFile 打包镜像用的,原文中有一些小坑,在此记录
    1.1 小坑1第5条和第6条其实不能换行,如果照着原文复制就会报错
    1.2 小坑2/home/jre目录要一致,文件都会复制到docker镜像中的这个目录下,因为最后设置环境
    1.3 小坑3文件名 jre-8u341-linux-x64,如果和我下载的文件不一致,也要对应修改
    1.4 小坑4原文中的环境变量没有{}
    1.5 小坑5 设置环境变量也不需要=号
#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest
#FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件
MAINTAINER xxx "xxx@qq.com"
#定义时区参数
ENV TZ Asia/Shanghai


#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /home/jre

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
## 注意~~~上传的瘦身后的jre
ADD jre-8u341-linux-x64.tar.gz /home/jre/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /home/jre/
COPY glibc-bin-2.29-r0.apk /home/jre/
COPY glibc-i18n-2.29-r0.apk /home/jre/


#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
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
#vim和curl以防后续容器离线方便内网调试和修改
RUN apk update && apk upgrade && apk add  vim  && apk add  curl
#RUN apk add  mediainfo 
#RUN apk add ffmpeg 

#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget   && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub  && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk   && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
#设置时区
RUN apk -U upgrade && apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime && echo ${TZ} > /etc/timezone

#7.配置环境变量
## 注意~~~没有jdk,直接指向jre
ENV JAVA_HOME  /home/jre/jre1.8.0_341
ENV PATH $JAVA_HOME/bin:$PATH


#容器启动时需要执行的命令
#ENTRYPOINT mediainfo
#ENTRYPOINT java -version
  1. 三个apk包

下载glibc安装包glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk到文件夹下
下载地址:https://github.com/sgerrand/alpine-pkg-glibc/releases

进入页面 先搜2.29,展开以后,才能看到
下载对应的apk

打包镜像

#进入home目录(因为我的文件在home下)
cd /home
#创建镜像  
#注意这个. 注意这个. 注意这个.  
#意思是把当前home下所有文件都打进去,有其他文件要么删除要么自己找个干净的目录
docker build -t jrecentos:8 .

得到自动输出

Sending build context to Docker daemon  105.7MB
Step 1/13 : FROM alpine:latest
 ---> 9c6f07244728
Step 2/13 : MAINTAINER Admin "Admin@qq.com"
 ---> Using cache
 ---> 59fbc9264050
Step 3/13 : WORKDIR /home/jre
 ---> Running in b91440430409
Removing intermediate container b91440430409
 ---> 86d5e32512f0
Step 4/13 : ADD jre-8u341-linux-x64.tar.gz /home/jre/
 ---> 5db550d9e88f
Step 5/13 : COPY glibc-2.29-r0.apk /home/jre/
 ---> 3d570c14d242
Step 6/13 : COPY glibc-bin-2.29-r0.apk /home/jre/
 ---> 197ce2a9c680
Step 7/13 : COPY glibc-i18n-2.29-r0.apk /home/jre/
 ---> d895d05e0306
Step 8/13 : 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
 ---> Running in f141cb0008b8
Removing intermediate container f141cb0008b8
 ---> 754510132f87
Step 9/13 : RUN apk update && apk upgrade
 ---> Running in c1ee7bd41e91
fetch http://mirrors.aliyun.com/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://mirrors.aliyun.com/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
v3.10.9-43-g3feb769ea3 [http://mirrors.aliyun.com/alpine/v3.10/main/]
v3.10.6-10-ged79a86de3 [http://mirrors.aliyun.com/alpine/v3.10/community/]
OK: 10357 distinct packages available
OK: 6 MiB in 14 packages
Removing intermediate container c1ee7bd41e91
 ---> 2d48d0c1dd5c
Step 10/13 : RUN apk --no-cache add ca-certificates wget   && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub  && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk   && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
 ---> Running in 5f086fa16003
fetch http://mirrors.aliyun.com/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://mirrors.aliyun.com/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/2) Installing ca-certificates (20191127-r2)
(2/2) Installing wget (1.20.3-r0)
Executing busybox-1.35.0-r17.trigger
Executing ca-certificates-20191127-r2.trigger
OK: 7 MiB in 16 packages
(1/4) Installing glibc (2.29-r0)
(2/4) Installing libgcc (8.3.0-r0)
(3/4) Installing glibc-bin (2.29-r0)
(4/4) Installing glibc-i18n (2.29-r0)
Executing glibc-bin-2.29-r0.trigger
OK: 38 MiB in 20 packages
Removing intermediate container 5f086fa16003
 ---> b727580aaad1
Step 11/13 : ENV JAVA_HOME=/home/jre/jre-8u341
 ---> Running in c5047e1338bd
Removing intermediate container c5047e1338bd
 ---> d364aab7450b
Step 12/13 : ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in 35fd894b2ff7
Removing intermediate container 35fd894b2ff7
 ---> 2136e8c64954
Step 13/13 : ENV PATH=$JAVA_HOME/bin:$PATH
 ---> Running in ebdfffcd23d9
Removing intermediate container ebdfffcd23d9
 ---> 0ef1c91d2353
Successfully built 0ef1c91d2353
Successfully tagged jrecentos:8 

错误情况记录,解决办法就是重新执行一遍docker build -t jrecentos:8 . [狗头]

Step 10/13 : RUN apk --no-cache add ca-certificates wget   && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub  && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk   && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk
 ---> Running in 009cb3f6ff0a
fetch http://mirrors.aliyun.com/alpine/v3.10/main/x86_64/APKINDEX.tar.gz
fetch http://mirrors.aliyun.com/alpine/v3.10/community/x86_64/APKINDEX.tar.gz
(1/2) Installing ca-certificates (20191127-r2)
(2/2) Installing wget (1.20.3-r0)
Executing busybox-1.35.0-r17.trigger
Executing ca-certificates-20191127-r2.trigger
OK: 7 MiB in 16 packages
The command '/bin/sh -c apk --no-cache add ca-certificates wget   && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub  && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk   && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk' returned a non-zero code: 4

再往下就简单了,直接贴上

[root@node05 home]# docker create -it jrecentos:8 
ab6dfedb5cbf31892a84a924e212fc13794aa7a27659cdf580fc02aaff78c44d
[root@node05 home]# docker start ab5
Error response from daemon: No such container: ab5
Error: failed to start containers: ab5
[root@node05 home]# docker start ab6
ab6
[root@node05 home]#  docker exec -it ab /bin/sh 
/home/jre # java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
/home/jre # 

看到Java(TM) SE Runtime Environment 简称就是JRE. 大工完成

最后/bin/sh: java: not found排错指南


#创建并启动容器
[root@node05 home]# docker create -it jrecentos:8 
0db3309bc12c1dbd6850815409f93372515e6e8ea99c88ffbefbb585f811c66b
[root@node05 home]# docker start 0db
0db
[root@node05 home]# docker exec -it 0db /bin/sh 
/home/jre # java -version

#这时候发现没配置好环境变量
/bin/sh: java: not found

#再次判断是否因为环境变量引起 直接切换jre目录下执行
/home/jre #  /home/jre/jre1.8.0_341/bin/java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)

#重新检查环境变量的目录

其他参考链接

  1. Java JDK或JRE基础镜像及自定义制作镜像
  2. 【Docker初探】第二节:安装alpine-pkg-glibc,部署java环境

  1. Docker之Alpine制作jre镜像(瘦身)+自定义镜像上传阿里云 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值