我想要做的是为我的Java应用程序构建一个docker镜像,但对于大多数编译语言,以下注意事项应该是正确的.

问题

在我的构建服务器上,我想为我的应用程序生成一个docker镜像作为可交付成果.为此,我必须使用一些构建工具(通常是Gradle,Maven或Ant)编译应用程序,然后将创建的JAR文件添加到docker镜像.因为我希望docker镜像只执行JAR文件,我当然会从已安装Java的基本映像开始.

有三种方法可以做到这一点:

让构建工具控制进程

在这种情况下,我的构建工具控制整个过程.因此它准备了JAR文件,在创建JAR之后,它调用Docker来创建映像.这是因为事先创建了JAR,Docker可能会忘记创建JAR所需的构建过程.

但我的Dockerfile不再是独立的.这取决于在Docker之外发生的步骤.在我的Dockerfile中,我将有一个COPY或ADD语句,它应该将JAR文件复制到映像中.事先未创建jar时,此语句将失败.所以只是执行Dockerfile可能不起作用.如果要与使用Dockerfile构建的服务集成(如DockerHub上的自动构建功能),则会出现问题.

让Docker控制构建

在这种情况下,创建映像的所有必要步骤都将添加到Dockerfile中,因此只需执行Docker构建即可创建映像.

这种方法的主要问题是无法添加应该在正在创建的docker镜像之外执行的Dockerfile命令.这意味着我必须将我的源代码和构建工具添加到docker镜像并在图像中构建我的JAR文件.这将导致我的图像比必须更大,因为添加的所有文件在运行时都是不必要的.这也将为我的图像添加额外的图层.

编辑:

正如@adrian-mouat所指出的,如果我要添加源代码,构建应用程序并在一个RUN语句中删除源代码,我可以避免向Docker镜像添加不必要的文件和图层.这意味着要创造一些疯狂的链式命令.

两个独立的构建

在这种情况下,我们将构建分为两部分:首先,我们使用构建工具创建JAR文件,然后将其上传到存储库(Maven或Ivy存储库).然后,我们触发一个单独的Docker构建,只是从存储库添加JAR文件.

结论

在我看来,更好的方法是让构建工具控制流程.这将产生干净的泊坞窗图像,因为图像是我们想要提供的,这是非常重要的.为避免可能无法正常工作的Dockerfile,应将其作为构建的一部分创建.因此,没有人会不小心使用它来开始破坏构建.

但这不允许我与DockerHub集成.

我还有另一种方法吗?

java添加容器_如何为Java应用程序构建docker容器相关推荐

  1. java 添加注解_你知道Java中的package-info的作用吗?

    package-info.java对于日常业务开发的开发者来说,可能有点陌生,如果我们再项目中创建一个package-info.java,你会发现该类只有一个packge,如下 我们无法在该java文 ...

  2. 设置java进程名称_如何为Java程序设置进程名称? - java

    如果启动了Java程序,它将在系统进程中监视名称java.许多Java程序很难区分.因此,如果存在设置名称的方法,它将很好地显示在过程监视器中.我知道这在不同的操作系统上可能会有所不同. 一个简单的方 ...

  3. java中为按钮添加图片_如何在Java中为字符串添加双引号?

    java中为按钮添加图片 In Java, everything written in double-quotes is considered a string and the text writte ...

  4. 什么java web容器_什么是java web容器,_Java_ 少侠科技

    详细内容 我们讲到servlet可以理解服务器端处理数据的java小程序,那么谁来负责管理servlet呢?这时候我们就要用到web容器.它帮助我们管理着servlet等,使我们只需要将重心专注于业务 ...

  5. 容器云java开发_使用码云构建 Docker 容器镜像并部署到华为云

    华为公有云平台的容器镜像服务开放了对码云代码库的支持. 华为云平台的容器镜像服务(SWR),能够支持从源码到镜像.从镜像到应用的容器镜像全生命周期的管理服务,为用户提供简单易用.安全可靠的镜像管理功能 ...

  6. 在线报名竞赛网站java源码_我用Java写出了一个QQ!可在线聊天(附源码)~

    来源:blog.csdn.net/weixin_44048140 正文如下: 一. 功能实现 1.修改功能(密码.昵称.个性签名) 2.添加好友.删除好友 3.单聊功能 4.判断好友是否在线 二. 模 ...

  7. java编程学习方法_在线学习Java编程的最佳方法

    java编程学习方法 1.简介 Java是使用最广泛的编程语言之一. 根据Github的最新报告 ,Java被列为仅次于JavaScript的第二大最常用的编程语言. 掌握Java的人有很多话题. 好 ...

  8. 马士兵 java 学习笔记_马士兵java教程笔记1

    ---恢复内容开始--- 前记 虽然已经是个研究生了,但是会的东西还是特别的少 甚至连java都不能说是很会 所以准备从现在开始能好好的学习java 变成java master 标识符 标识符是由字母 ...

  9. java 监听器作用_浅谈java监听器的作用

    监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特 ...

最新文章

  1. centos php pdo mysql_mysql - CentOS6.5下php无法使用pdo - Pho
  2. SAP Promotion Managementfor Retail (SAP PMR)
  3. Nancy总结(三)Nancy资料介绍
  4. keras 以图搜图
  5. Java多线程可以分组,还能这样玩!
  6. c++中实现域内,左,右对齐的方法
  7. k8s部署nacos集群:3个pod、连接外部mysql读写分离集群
  8. win10下cmd ping不通虚拟机,xshell连不上虚拟机【如果实在想不出来原因,就看看吧】
  9. js判断数组里是否有重复元素的方法
  10. hadoop运行wordcount实例,hdfs简单操作
  11. 关于微信wx.getUserInfo使用不了的问题
  12. linux下ssh/sftp配置和权限设置
  13. 扩展中断控制器8259实验_PCIe的中断机制
  14. 测试评审要点说明(测试计划、用例、报告)
  15. Adobe DreamweaverCS4 beta+可用序列号,FireworkCS4 beta及SoundboothCS4 beta 官方下载地址...
  16. ImageJ工具使用简介
  17. [已解决]360极速浏览器.为什么后台一直占用20%的cpu?
  18. Python学习笔记(十五):python 中的面向对象
  19. BAPI_PO_CREATE1 创建采购订单
  20. poj 3295 Tautology

热门文章

  1. OpenCV3.2+VS2013+Tesseract3.02.02配置
  2. 关于winodows下编程c++遇到的引用文件路径问题
  3. p4: php5ts.dll p5: 5.6.14.0,服务器httpd.exe 应用程序错误
  4. android设置title_所见即所得的 Android 自动化神器,用 Automate 一键收藏文章
  5. c.语言2017试卷,2017年全国计算机等级考试二级C 语言真题及答案7
  6. pcie和usb哪个带宽高_了解数字示波器采样率和模拟带宽的规格
  7. 文件夹里面照片自动分成子文件夹_Windows居然自带这个功能,自动整理你硬盘里的照片...
  8. ios 请求头设置token_HTTP中的OPTIONS请求
  9. php text留言本,PHP+TEXT留言本(五)
  10. newduba首页怎么去掉_京喜小程序首页瘦身实践