亲爱的程序员,您好
我正在考虑使用docker容器设置我的开发,因为我目前正在使用Windows,我的设置现在如下:
包含已启动且已在运行的jboss的泊坞窗图像
我的Windows文件系统上签出的hg repo已导入IntelliJ
映射到泊坞窗图像中的部署文件夹的共享文件夹
每当我想部署我的战争时,我都会让IntelliJ将这个工件构建为与输出目录爆炸的战争到$ THE_SHARED_FODLER / mywar.war。然后我将使用mywar.war.deploy触摸同一个repo中的文件。由于这是与jboss docker镜像的部署文件夹共享的,因此启动的Jboss现在部署了我的战争。
然而,由于所有IntelliJ都知道我已经为文件系统构建了一个工件,如果我以正常方式部署战争,我无法得到任何好的支持(例如有一个本地jboss和一个部署爆炸工件的jboss-run-configuration)。前端的东西(html / css)总是可以用咕噜声或类似的东西来解决,但是当谈到jar-libs时,到目前为止我提出的最佳解决方案是:
使用maven重建jar并将其复制到$ THE_SHARED_FOLDER / mywar.war / web-inf / lib /
触摸文件mywar.war.redeploy
然而,这使得从代码更改到结果的转换时间大约为30秒o这里提出了一个非常开放的问题:开发一个在docker镜像中运行的应用程序服务器的好方法是什么?今天怎么样?您是否尝试过类似的东西,并认为Docker容器不适合这样做?
非常欢迎有关该主题的任何意见: - )
Brgrgs 史蒂夫电视
答案 0 :(得分:6)
以下是我如何解决你正在崛起的问题:
maven
将war复制到位于我的项目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 }
}
Run/Debug Configurations
并添加新的Docker Deployment
container_settings.json
的路径应放在用户界面中的Container settings
字段请注意,首次构建Docker镜像后,由于Docker缓存图像更改,因此连续配置运行速度要快得多。
由于Docker镜像中唯一的更改是war文件,因此下一个配置运行只会传输图像的这一部分。
一般情况下,当Docker文件中的每个操作都被缓存时,将最多变化的组件放在Docker文件中是很重要的。
希望我能帮到你。