加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

构建Java镜像的10个卓越实例

发布时间:2021-05-17 22:31:07 所属栏目:编程 来源:互联网
导读:1.Docker镜像行使确定性的标签 2.在Java镜像中仅安装必要的内容 3.查找并修复Java镜像中的安详裂痕 4.行使多阶段构建Java镜像 5.不要以root用户身份运行Java应用

1.Docker镜像行使确定性的标签

2.在Java镜像中仅安装必要的内容

3.查找并修复Java镜像中的安详裂痕

4.行使多阶段构建Java镜像

5.不要以root用户身份运行Java应用措施

6.Java应用措施不要行使PID为1的历程

7.优雅下线Java应用措施

8.行使 .dockerignore文件

9.确保Java版本支持容器

10.审慎行使容器自动化天生器材

构建一个简朴的Java容器镜像

让我们从简朴的Dockerfile开始,在构建Java容器时,我们常常会有如下相同的内容:

FROM maven 

 

RUN mkdir /app 

 

WORKDIR /app 

 

COPY . /app 

 

RUN mvn clean install 

 

CMD "mvn" "exec:java"

 

Copy that to a file named Dockerfile, then build and run it. 

 

$ docker build . -t java-application 

 

$ docker run -p 8080:8080 java-application 

这很简朴,并且有用。可是,此镜像布满错误。

我们不只应该相识怎样正确行使Maven,并且还应停止像上述示例那样构建Java容器。

下面,让我们开始慢慢改造这个Dockerfile,使你的Java应用措施天生高效,安详的Docker镜像。

Docker镜像行使确定性的标签

当行使Maven构建Java容器镜像时,我们起首必要基于Maven镜像。可是,你知道行使Maven根基镜像时现实上引入了哪些内容吗?

当你行使下面的代码行构建镜像时,你将得到该Maven镜像的最新版本:

FROM maven

这好像是一个风趣的成果,可是这种回收Maven默认镜像的计策也许存在一些隐藏题目:

你的Docker构建不是幂等的。这意味着每次构建的功效也许会完全差异,本日的最新镜像也许差异于来日诰日或下周的最新镜像,导致你的应用措施的字节码也是差异的,而且也许产买卖外。因此,构建镜像时,我们但愿具有可复制简直定性举动。

Maven Docker镜像是基于完备的操纵体系镜像。这样会导致很多其他二进制文件呈此刻最终的出产镜像中,可是运行你的Java应用措施不必要许多这些二进制文件。因此,将它们作为Java容器镜像的一部门存在一些弱点:

1.镜像体积变大,导致更长的下载和构建时刻。

2.特另外二进制文件也许会引入安详裂痕。

怎样办理呐?

行使得当你需求的最小基本镜像 思量一下-你是否必要一个完备的操纵体系(包罗全部特另外二进制文件)来运行你的措施?假如没有,大概基于alpine镜像或Debian的镜像会更好。

行使特定的镜像 假如行使特定的镜像,则已经可以节制和猜测某些举动。假如我行使maven:3.6.3-jdk-11-slim镜像,则已经确定我正在行使JDK 11和Maven 3.6.3。JDK和Maven的更新,将不再影响Java容器的举动。为了越发准确,你也可以行使镜像的SHA256哈希值。行使哈希将确保你每次构建镜像时都行使完全沟通的基本镜像。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读