【问题标题】:Application server in Docker - war deployment with IntelliJDocker 中的应用程序服务器 - 使用 IntelliJ 进行战争部署
【发布时间】:2015-12-30 01:23:13
【问题描述】:

亲爱的程序员,你好,

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

  • 包含已启动且已运行的 jboss 的 docker 映像

  • 在我的 Windows 文件系统上签出的 hg 存储库已导入 IntelliJ

  • 映射到 docker 镜像中的部署文件夹的共享文件夹

每当我想部署我的战争时,我都会让 IntelliJ 将工件构建为爆炸式战争,并将输出目录指向 $THE_SHARED_FODLER/mywar.war。然后,我将使用 mywar.war.deploy 访问同一个 repo 中的文件。由于这是共享到 jboss docker 映像的部署文件夹,所以启动的 Jboss 现在部署我的战争。

但是,由于所有 IntelliJ 都知道我已经为文件系统构建了一个工件,因此如果我以正常方式部署战争(例如有一个本地 jboss 和一个部署爆炸工件的 jboss-run-configuration)。前端的东西(html/css)总是可以用 grunt 或类似的方法来解决,但是当涉及到 jar-libs 时,我迄今为止提出的最佳解决方案是:

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

  • 触摸文件 mywar.war.redeploy

然而,这使得从代码更改到结果的周转时间大约为 30 秒 o 这里有一个非常开放的问题:向在 docker 映像中运行的应用程序服务器进行开发的好方法是什么?今天怎么样?您是否尝试过类似的方法并决定不使用 docker 容器?

非常欢迎任何关于该主题的意见:-)

Brgrgs 史蒂夫电视

【问题讨论】:

  • 从你的问题中我不确定你是否使用 IntelliJ 的 Docker 集成,但如果不是,你应该看看它,也许它会解决你的问题:blog.jetbrains.com/idea/2015/03/…
  • 据我了解,intelliJ 中的 docker 集成工具每次都会构建一个新容器,因此我的猜测是我必须在新创建的容器中启动那个 jboss?如果是这种情况,那么它与重新启动整个服务器相同,并且我再次处于从更改到结果的非常漫长的“回退时间”

标签: java maven intellij-idea docker boot2docker


【解决方案1】:

以下是我解决您提出的问题的方法:

  • 假设您使用的是Intellij Docker plugin - 从 Intellij 14.1 开始支持它
  • 我正在使用maven 将战争复制到位于我的项目web-app 下的名为docker 的目录中。
  • docker 目录包含用于构建 Docker 映像的 Dockerfile
  • 在 Docker 文件中我将打包好的 war 文件复制到 docker 镜像中,创建一个管理用户来访问端口 9990 上的管理控制台并加载 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"]
  • 现在您需要创建一个设置文件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,如 here 所述
  • container_settings.json 的路径应放置在 UI 中的 Container settings 字段中
  • 完成后。您可以运行配置,它将使用您刚刚构建的新 your-awesome-app.war 构建您的 Docker 容器。

请注意,第一次构建 Docker 映像后,由于 Docker 会缓存映像更改,因此后续配置运行速度要快得多。
由于 Docker 镜像中唯一的变化是 war 文件,因此下一次配置运行将只传输这部分镜像。

一般来说,将变化最大的组件放在 Docker 文件的最后很重要,因为 Docker 文件中的每个操作都会被缓存。

希望我能提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2015-12-16
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多