Docker中的应用程序服务器 – 使用IntelliJ进行战争部署

亲爱的程序员,

我正在考虑设置我的Docker容器的开发,因为我目前正在使用Windows,现在我的设置如下:

  • 一个包含一个jboss的docker镜像,它已经启动并且正在运行

  • 在我的windows文件系统中检出一个hg repo,导入到IntelliJ中

  • 映射到泊坞窗镜像中的部署文件夹的共享文件夹

每当我想部署我的战争,我会让IntelliJ构build的产品作为爆炸战争输出目录$ THE_SHARED_FODLER / mywar.war。 然后,我将用mywar.war.deploy触摸相同的回购文件。 由于这是共享的jboss泊坞窗图像的部署文件夹,发射的Jboss现在部署我的战争。

然而,因为所有的IntelliJ知道我已经构build了一个文件系统的工件,所以如果我以普通的方式部署这场战争,我不会得到任何好的支持(例如,拥有本地jboss和一个部署爆炸神器的jboss-run-configuration)。 前端的东西(html / css)总是可以用grunt或者类似的方式来解决,但是对于jar-libs来说,我现在提出的最好的解决scheme是:

  • 使用maven重buildjar并将其复制到$ THE_SHARED_FOLDER / mywar.war / web-inf / lib /

  • 触摸文件mywar.war.redeploy

但是,这会使代码更改的周转时间大约为30秒。这里提出了一个相当悬而未决的问题:在泊坞窗映像中运行的应用程序服务器的发展方向是什么? 今天怎么样? 你有没有尝试类似的东西,并决定docker集装箱是不是这样的路?

任何关于这个问题的意见都非常欢迎:-)

Brgrgs stevie电视

下面是我如何解决你正在上升的问题:

  • 假设你正在使用Intellij Docker插件 – 从Intellij 14.1开始支持
  • 我正在使用maven将war复制到位于我的项目web-app下的名为docker的目录。
  • Dockerfile目录包含用于构buildDocker镜像的Dockerfile
  • 在Docker文件中,我将打包的war文件复制到docker镜像,创build一个pipe理用户来访问9990端口上的pipe理控制台,并加载JBoss

  • Dockerfile内容:

     FROM jboss/wildfly MAINTAINER e.dahari@company.com 
    ADD your-awesome-app.war /opt/jboss/wildfly/standalone/deployments/
    RUN /opt/jboss/wildfly/bin/add-user.sh admin Admin#70365 --silent
    CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement", "0.0.0.0"]

  • 现在你需要创build一个设置文件container_settings.json 。 这个文件包含了运行Docker镜像的参数:

     { "_comment" : "My service", "Image": "your-awesome-app-name", "HostConfig": { "PortBindings":{ "9990/tcp": [{ "HostIp": "0.0.0.0", "HostPort": "9990" }] }, "RestartPolicy": { "Name": "on-failure", "MaximumRetryCount": 5 } } 

  • 打开Intellij Run/Debug Configurations并添加一个新的Docker Deployment如下所述
  • container_settings.json的path应放置在UI中的Container settings字段处
  • 一旦你完成了。 你可以运行这个configuration,它将用你刚刚构build的新的awesome-app.war构build你的Docker容器。

请注意,在第一次构buildDocker镜像之后,由于Dockercaching镜像更改,所以连续的configuration运行速度要快得多。
由于Docker镜像中唯一的变化就是war文件,下一次configuration运行将只传输这部分镜像。

一般来说,将Docker文件中的每个操作caching起来,将最多变化的组件放在Docker文件中是非常重要的。

希望我已经设法帮助。