gpt4 book ai didi

java - Docker 中的应用程序服务器 - 使用 IntelliJ 进行 war 部署

转载 作者:行者123 更新时间:2023-11-29 06:56:48 25 4
gpt4 key购买 nike

你好亲爱的程序员,

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

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

  • 在我导入 IntelliJ 的 Windows 文件系统上 check out 一个 hg 存储库

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

每当我想部署我的 war 时,我都会让 IntelliJ 将 Artifact 构建为爆炸 war ,输出目录为 $THE_SHARED_FODLER/mywar.war。然后我将使用 mywar.war.deploy 在同一个 repo 中使用一个文件。由于这是共享到 jboss docker 镜像的 deploymentfolder,启动的 Jboss 现在部署我的 war。

但是,由于所有 IntelliJ 都知道我已经为文件系统构建了一个 Artifact ,所以如果我以正常方式部署 war(例如,有一个本地 jboss 和一个部署分解 Artifact 的 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 容器不是解决此问题的方法?

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

兄弟会看电视

最佳答案

以下是我如何解决您提出的问题:

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

  • Dockerfile 内容:


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

  • 现在您需要创建一个设置文件 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 }
    }<br/>

  • 打开 Intellij Run/Debug Configurations 并添加一个新的 Docker Deployment,如 here 所述
  • container_settings.json 的路径应该放在 UI 的 Container settings 字段中
  • 完成后。您可以运行配置,它将使用您刚刚构建的新 your-awesome-app.war 构建您的 Docker 容器。

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

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

希望我能帮上忙。

关于java - Docker 中的应用程序服务器 - 使用 IntelliJ 进行 war 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32896899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com