构建Java镜像的10个卓越实例
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哈希值。行使哈希将确保你每次构建镜像时都行使完全沟通的基本镜像。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |