jdk升级17docker如何部署
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\java>docker 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 "http://mirrors.aliyun.com/alpine/latest-stable/community" > /etc/apk/repositories
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main" >> /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 https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-2.32-r0.apk
RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-bin-2.32-r0.apk
RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-i18n-2.32-r0.apk
RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.32-r0/glibc-dev-2.32-r0.apk
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/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配置好https://www.eclipse.org/downloads/packages/官网下载地址: 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下载,这里拿个https://www.oracle.com/java/technologies/downloads/#java17别人博文给的链接,结果你发现,你打开
继续访问
jre17 面向对象+集合的练习
简单的初学者综合练习
继续访问
使用docker容器运行java程序
使用docker容器运行java程序 java 18 一、文件准备 mkdir 11 cd 11 创建并进入目录 docker pull ubuntu:22.04 wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz #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的。两者都可以单独下载安装。 安装包的下载官网:http://www.oracle.com/technetwork/java/javase/downloads/index.html 当前最新版本出到了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下载和环境变量配置
继续访问 参考技术A 利用Dockerfile构建一个简单的java应用镜像,依赖环境比较简单,JDK,定制化的Tomcat(名为star-appserver) 1、环境准备 ubuntu:14.04 docker : 1.4 jdk:jdk-8u31-linux-x64.gz tomcat : 7.0(star-appserver) 在/usr/local下创建目录:sms.
如何使用 docker 高效部署 Node 应用
❝如何在生产环境部署一个 Node 应用?[1]
❞
一个合理并且高效的部署方案,不仅能够实现快速升级,平滑切换,负载均衡,应用隔离等部署特性,而且配有一套成熟稳定的监控。
kubernetes
把 Node 应用视作一个服务端应用的黑盒子,完美匹配了以上条件,越来越多的团队把 node 部署在 k8s 上。
但在此之前,需要先把 Node 应用跑在一个 Docker 容器上,这也是本章的主题。
❝关于前端在 docker 上部署,山月曾写了两篇文章:
❞
如何在 docker 中部署前端 [2] 前端部署 Prview 与 Production [3] 前端部署的发展过程 [4]
一个简单的 Node 应用
「index.js」
一个 hello, world
版的 Node Web App
const http = require('http')
const app = async (req, res) => {
res.end('hello, world')
}
http.createServer(app).listen(3000, () => console.log(3000))
「package.json」
配置 npm start
来启动应用
"scripts": {
"start": "node index.js"
},
但这仅仅是最简单的 Node 应用,真实环境中还有各种数据存储及定时任务调度等,暂撇开不谈,这已经足够了。
再稍微复杂一点点的 Node 应用可以查看山月的项目 whoami[5]: 一个最简化的 serverless
与 dockerize
示例。
NODE_ENV=production
在生产环境中,无需安装 devDependecies
中依赖,NODE_ENV 环境变量设置为 production 时将会跳过 devDep
。
# 通过设置环境变量,只安装生产环境依赖
$ NODE_ENV=production npm ci
# 通过显式指定 flag,只安装生产环境依赖
$ npm ci --production
另一方面,某些第三方模块会根据 NODE_ENV 环境变量做出一些意料不到的配置。因此在生产环境注意该环境变量的配置。
一个 Node 应用的简单部署
一个典型的、面向服务端的 Node 应用是这么跑起来的:
-
npm install
-
npm run config
,从配置服务(consul/vault)拉取配置 ,如数据库与缓存的账号密码,此时构建服务器需要配置服务权限 -
npm run migrate
,数据库迁移脚本,执行数据库表列行更改操作,此时构建服务器需要数据库访问权限 -
npm start
,启动一个 Node 服务
把运行步骤翻译为 Dockerfile:
# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine
# 环境变量设置为生产环境
ENV NODE_ENV production
WORKDIR /code
# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json /code
RUN npm ci
ADD . /code
# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present
EXPOSE 3000
CMD npm start
这对于大部分 Node 应用已经是足够了,如果精益求精,可以再走接下来的多阶段构建
node-gyp 与 Native Addon
在 Node 中有可能存在着一些 Native Addon,它们通过 node-gyp 进行编译,而它依赖于 python
,make
与 g++
。
$ apk --no-cache add python make g++
在带有编译过程的镜像构建中,源文件与构建工具都会造成空间的浪费。借助镜像的「多阶段构建」可以高效利用空间。Go App
与 FE App
的构建也遵循此规则。
-
多阶段构建 Go 应用 [6] -
多阶段构建前端应用 [7]
在构建 Node 应用镜像时,第一层镜像用以构造 node_modules
。
# 选择一个体积小的镜像 (~5MB)
FROM node:12-alpine as builder
# 环境变量设置为生产环境
ENV NODE_ENV production
# 更好的根据 Image Layer 利用缓存
ADD package.json package-lock.json ./
RUN npm ci
# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
# 多阶段构建之第二阶段
FROM node:12-alpine
WORKDIR /code
ENV NODE_ENV production
ADD . .
COPY --from=builder node_modules node_modules
# 配置服务及数据库迁移
RUN npm run config --if-present && npm run migrate --if-present
EXPOSE 3000
CMD npm start
相关文章
-
N-API and getting started with writing C addons for Node.js [8] -
Using Docker for Node.js in Development and Production [9]
Reference
如何在生产环境部署一个 Node 应用?: https://github.com/shfshanyue/Daily-Question/issues/420
[2]如何在 docker 中部署前端: https://shanyue.tech/frontend-engineering/docker.html
[3]前端部署 Prview 与 Production: https://shanyue.tech/frontend-engineering/feature-deploy.html
[4]前端部署的发展过程: https://shanyue.tech/frontend-engineering/deploy.html
[5]whoami: https://github.com/shfshanyue/whoami
[6]多阶段构建 Go 应用: https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
[7]多阶段构建前端应用: https://shanyue.tech/frontend-engineering/docker.html#%E5%A4%9A%E9%98%B6%E6%AE%B5%E6%9E%84%E5%BB%BA
[8]N-API and getting started with writing C addons for Node.js: https://hackernoon.com/n-api-and-getting-started-with-writing-c-addons-for-node-js-cf061b3eae75
[9]Using Docker for Node.js in Development and Production: https://dev.to/alex_barashkov/using-docker-for-nodejs-in-development-and-production-3cgp
以上是关于jdk升级17docker如何部署的主要内容,如果未能解决你的问题,请参考以下文章