关于java镜像太大的信息
本篇文章给大家谈谈java镜像太大,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
jdk升级17docker如何部署
关注
在将java应用部署到docker环境的过程中,一个支持运行java程序的镜像是必不可少的。由于oracle授权方面的问题,docker hub 上一般只有基于openjdk的镜像,而且open jdk的镜像不支持字体管理,在使用一些验证码功能时会报错,比如生成验证码功能等。
而且openjdk 的镜像过于庞大,openjdk:17-slim的镜像大小就有407M。基于这些原因,我们可以选择定制一个java运行环境镜像。
jre制作
由于jdk的体积比较大,我们选择jre来作为运行环境,jdk1.8及以前的版本,都是有jre的,但是jdk9以后的版本不在提供jre需要自己制作。
jlink是通过按模块打包的,但是由于目前很多库还不是按模块打包的,所以我们无法知道项目里面都用了那些模块。只好将所有的模块进行打包。这样避免以后出现缺失模块导致应用报错的问题。
下面是windows平台的打包命令
bin\jlink.exe --module-path jmods --add-modules ALL-MODULE-PATH --compress=2 --strip-debug --output jre
1
1
linux下,需要将要打包的java配置到系统环境变量中,不然生成不了,会报jlink not find错误
bin/jlink --module-path jmods --add-modules ALL-MODULE-PATH --compress=2 --strip-debug --output jre17
1
1
–strip-debug 不打包调式信息 --compress=2 开启2级别压缩,这两项减小生成的文件体积
–add-modules ALL-MODULE-PATH表示所有模块
镜像制作
基于alpine镜像
拉取alpine镜像
docker pull alpine
1
1
alpine镜像非常小,只有5.59MB,可以通过docker run -it {iamgeId} sh 运行容器,运行一些简单的命令试试
D:\repo\docker\javadocker run -it c059bfaa849c sh
/ # ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
1
2
3
1
2
3
编写dockerfile
FROM alpine:latest
MAINTAINER lin
#更换aline源
RUN echo "" /etc/apk/repositories
RUN echo "" /etc/apk/repositories
#update apk
RUN apk update apk upgrade
RUN apk --no-cache add ca-certificates
# bash vim wget curl net-tools
RUN apk add bash bash-doc bash-completion
RUN apk add vim wget curl net-tools
RUN rm -rf /var/cache/apk/*
RUN /bin/bash
#setup glibc
RUN wget
RUN wget
RUN wget
RUN wget
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub
RUN apk add glibc-2.32-r0.apk
RUN apk add glibc-bin-2.32-r0.apk
RUN apk add glibc-dev-2.32-r0.apk
RUN apk add glibc-i18n-2.32-r0.apk
RUN rm -rf *.apk
#setup date
RUN apk add tzdata
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#setup language 解决中文乱码
RUN /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8
ENV LANG=en_US.UTF-8
#copy jdk-8u251-linux-x64.tar.gz
ADD jdk-8u251-linux-x64.tar.gz /usr/local
#setup java env
ENV JAVA_HOME=/usr/local/jdk1.8.0_251
ENV PATH=$PATH:.:$JAVA_HOME/bin
ENV CALSSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
构建镜像
docker build -t jdk17-orcle-alpine .
1
1
总结:由于alpine缺少很多东西,比如glibc,需要安装后才能运行jvm,所以暂时放弃这条路
自己安装glibc比较麻烦,可以使用已经安装好glibc的镜像
#FROM alpine:latest
FROM frolvlad/alpine-glibc
MAINTAINER lin
COPY ./jre17 /usr/local/jre17
#setup java env
ENV JAVA_HOME=/usr/local/jre17
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CALSSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
该方法构建的镜像体积是比较小,但是启动java应用(基于spring boot)的时候jvm会崩溃,原因不明
基于ubuntu
ubuntu镜像相对来说也不是很大,才70多M
FROM ubuntu:latest
MAINTAINER lin
#更新软件源
RUN apt-get update
#安装字体支持
RUN apt-get install fontconfig -y
#清理缓存
RUN apt-get clean
#在windows环境下构建,将/usr/share/zoneinfo/Asia/Shanghai拷贝到本地目录
COPY ./Shanghai /etc/localtime
#setup language 解决中文乱码
#设置中文支持
ENV LANG C.UTF-8
#解压jdk并删除lib目录下的源码
COPY ./jre17 /usr/local/jre17
#授执行权限
RUN chmod -R 750 /usr/local/jre17/bin
#setup java env
ENV JAVA_HOME=/usr/local/jre17
ENV PATH=$PATH:$JAVA_HOME/bin
ENV CALSSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
构建
docker build -t mydockerhub:5000/jdk17-orcle-ubuntu:jre-17 .
1
1
总结:除了需要处理语言问题外,其他都比较顺利,而且结果镜像211MB,比官方提供的小了很多,暂时就这样吧,以后有时间再折腾
打开CSDN,阅读体验更佳
最新发布 Docker部署SpringBoot项目(超详细)
Docker部署SpringBoot项目(超详细)
继续访问
JDK17抽取JRE并制作docker镜像
jre docker
继续访问
docker 搭建 Oracle JDK(版本可更换) 镜像
首先在本机创建jdk目录 mkdir -p /root/jdk 下载jdk到/root/jdk目录下 (版本随意)也可以直接使用 rpm 下载,各凭本事(!.!) 这里我下载的版本是jdk-8u211-linux-x64.tar.gz 在/root/jdk目录下创建Dockerfile文件 vim Dockerfile 内容为 # 基础镜像为 ce...
继续访问
Linux 安装 jdk8-17、运行 jar
前提是先把网络ip配置好官网下载地址: jdk各个版本下载 jdk各个版本档案A:网上随便兽兽道首;file–connect—hostName(linux的ip)—user name(系统用户)—prot(端口:默认)–authentication(选择password)—点击connect后----输入密码选中点击鼠标右键—Upload----- 删除 3.Ubuntu卸载jdk 4、在Linux解压文件 三、
继续访问
免密登录容器dockerfile ,docker部署openjdk-17 免密登录容器dockerfile
免密登录容器dockerfile
继续访问
笔记:Docker创建最小JDK运行环境
JDK1.8 Docker最小镜像
继续访问
jre-7u17-windows-x64.exe
JDK是一个开发环境,用于构建应用程序,applet程序,和使用Java编程语言的组成部分。 Java Development Kit(JDK)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。 定于2月19日发布的Java SE原来的重要补丁更新 - 2013年2月,但甲骨文决定加快释放该重要补丁更新,因为积极开发“野生”的Java漏洞影响在桌面浏览器,运行时环境(JRE)与该重要补丁更新解决。 更新日志:JDK 7u17 发布,该版本修复了浏览器插件的严重的安全漏洞:CVE-2013-1493,Oracle 强烈建议使用 Java 浏览器插件用户升级。 重要补丁更新是针对多个安全漏洞的补丁集合。为Java SE重要补丁更新还包括非安全修复程序。重要补丁更新是累积性的,每个公告只描述自上一个重要补丁更新和安全警报添加的安全修复。因此,以前的重要补丁更新和安全警报建议应检讨有关以前累积的安全修复程序。 请参考: 重要补丁更新和安全警报的信息,有关Oracle安全性公告。 由于一个成功的攻击所带来的威胁,Oracle强烈建议用户尽快应用CPU修复程序。该重要补丁更新包含50个新安全修复程序的Java SE的产品。 支持受影响的产品 该重要补丁更新解决的安全漏洞影响以下按类别列出的产品。请点击可用补丁列或可用补丁表中的链接来访问这些补丁的文档。
Java17 安装教程与环境配置(完整版)
Java17 安装教程与环境配置(完整版)掉坑经历安装步骤环境配置 掉坑经历 今天做项目的时候,发现新项目用的的spring-boot-starter-parent是最新的,一开始我使用2.5.7一直爆红,当时想着降低版本就能使用了,然后被告知,jdk需要最新版本的,才能运行项目。于是乎,开始找教程,但是我看了好几篇教程,都没正确找到最新jdk下载,这里拿个别人博文给的链接,结果你发现,你打开
继续访问
jre17 面向对象+集合的练习
简单的初学者综合练习
继续访问
使用docker容器运行java程序
使用docker容器运行java程序 java 18 一、文件准备 mkdir 11 cd 11 创建并进入目录 docker pull ubuntu:22.04 wget #sudo vim dockerfile内容如下 From ubuntu:22.04 Maintainer webrx "webrx@126.com" #把java添加到容器中 Add jdk-1
继续访问
docker安装JDK
docker安装jdk有很多种方式,这里使用自己构建镜像的方式。 1.下载jdk安装包 安装包下载可以自己去官网下载,如果闲速度慢可以找一些网络资源; 安装包下载好后,上传到/usr/local/docker/jdk下,这个文件目录需要自己创建 2.创建Dockerfile 在/usr/local/docker/jdk文件夹下创建Dockerfile,Dockerfile内容如下: FROM centos:centos7 MAINTAINER tao # 新建目录 RUN mkdir /usr
继续访问
jre.17_32位
jre.17_32位,适用于JAVA空间,安装在windows操作系统中!
jdk8、jdk11、jdk17版本下载
jdk8、jdk11、jdk17版本是长时间支持的版本
Java17(291)之后 , 禁用了TLS1.1 , 使JDBC无法用SSL连接SqlServer怎么办,以下是解决办法
修改java.security文件 1.找到jre的java.security文件 2.打开java.security并搜索 “jdk.tls.disabledAlgorithms=” 3.删掉TLSv1, TLSv1.1, 4.保存,可以了 修改后的样例,jre17可直接复制 修改java.security文件 1.找到jre的java.security文件 如果是jre , 在 {JAVA_HOME} / jre / lib / security中, 比如👇 C:\Java\jdk-17.0.3.1\c
继续访问
docker构建jdk基础镜像,部署程序
docker构建jdk基础镜像
继续访问
Docker工具的使用
初识 Docker jdk的版本问题,环境造成的问题很常见,称为代码的水土不服 把环境和代码一起传过去 软件跨环境迁移的问题就解决了 Docker 是一个开源的应用容器引擎 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。 容器是完全使用沙箱机制,相互隔离 容器性能开销极低。 Docker 从 1.
继续访问
热门推荐 jdk、jre各版本下载
jdk、jre各版本下载 JDK安装包中是包含JRE的。两者都可以单独下载安装。 安装包的下载官网: 当前最新版本出到了Java SE 10.0.1;官网上JRE分为JRE和ServerJRE。 JRE、ServerJRE 选择的区别如下图: 即JRE是...
继续访问
java17+javaFX17+openCV4.5.5 实现远程桌面功能 最全完整版
使用java17+javaFX17+openCV4.5.5+springboot开发的远程桌面客户端和服务端 99%通过JAVA实现,优化了CPU占用、内存占用、网络占用 新手小白也可以根据文章玩得转
继续访问
docker安装jdk并运行若依后端jar包
为了以后吹牛逼, 采用jdk8+centos镜像 =jdk镜像 吧jar包扔进持久化文件里 1 下载centos 下载指定centos镜像 docker pull centos:centos7 最新的版本docker pull centos 两百兆的系统 不可思议 2 下载jdk 就是下个linux版jdk8 传到服务器/home/docker/jdk # 路径 cd /home/docker/jdk # 解压 tar -zxvf jdk-8u291-linux-x64.tar.gz 编写D
继续访问
JDK和JRE下载大全
JDK下载和环境变量配置
继续访问
如何设置Docker容器中Java应用的内存限制
最近在和阿里的一些同事谈起使用Docker部署Java应用的场景,其中一个大家普遍关心的问题就是如何设置容器中JVM的内存限制。
如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数。比如,对于官方Tomcat 镜像,我们可以执行下面命令来启动一个最大内存为512M的tomcat实例
docker run --rm -e JAVA_OPTS='-Xmx512m' tomcat:8
在日志中,我们可以清楚地发现设置已经生效 “Command line argument: -Xmx512m”
02-Apr-2016 12:46:26.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version: Apache Tomcat/8.0.32
02-Apr-2016 12:46:26.974 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Feb 2 2016 19:34:53 UTC
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.32.0
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.1.19-boot2docker
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
02-Apr-2016 12:46:26.975 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-7-openjdk-amd64/jre
02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.7.0_95-b00
02-Apr-2016 12:46:26.976 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
02-Apr-2016 12:46:26.977 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
02-Apr-2016 12:46:26.978 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512m
...
然而在Docker集群上部署运行Java容器应用的时候,仅仅对JVM的heap参数设置是不够的,我们还需要对Docker容器的内存资源进行限制:
1. 限制容器使用的内存的最大量,防止对系统或其他应用造成伤害
2. 能够将Docker容器调度到拥有足够空余的内存的节点,从而保证应用的所需运行资源
关于容器的资源分配约束,Docker提供了相应的启动参数
对内存而言,最基本的就是通过 -m参数来约束容器使用内存的大小
-m, --memory=""
Memory limit (format: number[unit]). Number is a positive integer. Unit can be one of b, k, m, or g. Minimum is 4M.
那么问题就来了,为了正确设置Docker容器内存的大小,难道我们需要同时传递容器的内存限制和JAVA_OPTS环境变量吗? 如下所示:
docker run --rm -m 512m -e JAVA_OPTS='-Xmx512m' tomcat:8
这个方法有两个问题
1. 需要管理员保证容器内存和JVM内存设置匹配,否则可能引发错误
2. 当对容器内存限制调整时,环境变量也需要重新设定,这就需要重建一个新的容器
是否有一个方法,可以让容器内部的JVM自动适配容器的内存限制?这样可以采用更加统一的方法来进行资源管理,简化配置工作。
大家知道Docker是通过CGroup来实现资源约束的,自从1.7版本之后,Docker把容器的local cgroups以只读方式挂载到容器内部的文件系统上,这样我们就可以在容器内部,通过cgroups信息来获取系统对当前容器的资源限制了。
我创建了一个示例镜像 registry.aliyuncs.com/denverdino/tomcat:8-autoheap
,其源代码可以从Github 获得。它基于Docker官方Tomcat镜像创建,它的启动脚本会检查CGroup中内存限置,并计算JVM最大Heap size来传递给Tomcat。其代码如下
#!/bin/bash
limit_in_bytes=$(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
# If not default limit_in_bytes in cgroup
if [ "$limit_in_bytes" -ne "9223372036854771712" ]
then
limit_in_megabytes=$(expr $limit_in_bytes \/ 1048576)
heap_size=$(expr $limit_in_megabytes - $RESERVED_MEGABYTES)
export JAVA_OPTS="-Xmx${heap_size}m $JAVA_OPTS"
echo JAVA_OPTS=$JAVA_OPTS
fi
exec catalina.sh run
说明:
为了监控,故障排查等场景,我们预留了部分内存(缺省64M),其余容器内存我们都分配给JVM的堆。
这里没有对边界情况做进一步处理。在生产系统中需要根据情况做相应的设定,比如最大的堆大小等等。
现在我们启动一个tomcat运行在512兆的容器中
docker run -d --name test -m 512m registry.aliyuncs.com/denverdino/tomcat:8-autoheap
通过下列命令,从日志中我们可以检测到相应的JVM参数已经被设置成 448MB (512-64)
docker logs test
...
02-Apr-2016 14:18:09.870 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx448m
...
我们也可以方便的调整Java应用的内存.
Docker 1.10提供了对容器资源限制的动态修改能力。但是由于JVM无法感知容器资源修改,我们依然需要重启tomcat来变更JVM的内存设置,例如,我们可以通过下面命令把容器内存限制调整到1GB
docker update -m 1024m test
docker restart test
再次检查日志,相应的JVM Heap Size最大值已被设置为960MB
docker logs test
...
02-Apr-2016 14:21:07.644 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx960m
...
java 里面什么是镜像呢?我觉得我好模糊啊?
镜像(Mirroring)是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,
镜像就是像照镜子一样。我们一般说的镜像是指给系统作个ghost镜像。这样可以在很短时间,很方便的还原出一个完整的系统来。镜像可以说是一种文件,比如iso,gho都属于镜像文件,镜像文件可以直接刻录到光盘中,也可以用虚拟光驱打开
常见的镜像文件格式主要有.iso、.bin、.nrg、.vcd、.cif、.fcd、.img、.ccd、.c2d、.dfi、.tao、.dao和.cue等。
认为你所说的Java里面的镜像应该是指为某些Java 文件做了镜像,而且镜像是一种计算机通用的说法,没有专门的“Java里的镜像”这种说法或者概念。
java镜像太大的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java镜像太大的信息别忘了在本站进行查找喔。