如何编写 Dockerfile 将我的 war 文件部署到 jboss 7.2 中?
Posted
技术标签:
【中文标题】如何编写 Dockerfile 将我的 war 文件部署到 jboss 7.2 中?【英文标题】:How to write a Dockerfile to deploy my war file into jboss 7.2? 【发布时间】:2021-09-26 14:55:54 【问题描述】:我想编写一个 Dockerfile 来将我的 war 文件部署到 jboss7.2 中。 在我现有的 jboss 7.2 中,我们使用了密钥库文件以及数据库服务器配置。 那么,我的 dockerfile 将如何进行这些配置呢?
【问题讨论】:
【参考方案1】:其实Dockerfile只负责镜像的构建,不能包含上面提到的所有配置。
这是你案例中的 Dockerization 设计
-
Dockerfile
您的 Dockerfile 需要有一个带有 JDK 和 JBoss 的基础镜像以及您喜欢的 Linux 发行版(请查看 DockerHub 了解此内容),并且您需要复制您的应用程序战争和standalone.xml 配置(改编于第 2 部分)在目标目录中,然后最后设置一个入口点或命令来启动应用程序服务器。
这是一个例子:
FROM jboss/wildfly:16.0.0.Final
USER jboss
WORKDIR /home/jboss
#Copy your application war and configuration file :
COPY ./app_runtime_resources <runtime_path_in_container>
#Launch the application server with the appropriate options
CMD $JBOSS_HOME/bin/standalone.sh -c app-standalone.xml \
-Djboss.server.base.dir=<runtime_path_in_container> $ADDITIONAL_OPTS
-
数据库凭据
对于数据库凭据,最简单的方法是将它们作为环境变量传递给容器:
docker run -e DB_URL=<myURL> -e DB_USERNAME=<myuser> \
-e DB_PASSWORD=<mypassword> myAppImage:latest
然后您需要更改standalone.xml 中的属性值以指向环境变量,Jboss 支持环境变量作为配置文件中的属性,使用“env”关键字如下$env.ENV_NAME。 这是数据源配置的示例:
<datasources>
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="$wildfly.datasources.statistics-enabled:$wildfly.statistics-enabled:false">
<connection-url>$env.DB_URL</connection-url>
<driver>h2</driver>
<security>
<user-name>$env.DB_USERNAME</user-name>
<password>$env.DB_PASSWORD</password>
</security>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
您也可以添加默认值,有关“env.ENV”属性选项的更多信息,请查看本指南How to use environment variables in WildFly configuration (standalone.xml or host.xml)。
重要提示:如果您要将应用程序部署为服务,请检查您的编排器是否支持机密以提高安全性。 Docker swarm 和 Kubernetes 都支持敏感数据的机密(这里是 docker swarm 的 example)。
-
密钥库文件
对于 Keystore,您可以创建一个共享卷来处理 Keystore 文件
在 docker 运行命令中:-v <keystore_files_path_localy>:/app/Keystore
docker run -e DB_URL=<myURL> -e DB_USERNAME=<myuser> \
-e DB_PASSWORD=<mypassword> \
-v <keystore_files_path_localy>:/app/keystore \
myAppImage:latest
您还将在生产检查 docker volumes doc 中使用日志持久性卷以获取更多信息Use volumes, Docker docs。
【讨论】:
以上是关于如何编写 Dockerfile 将我的 war 文件部署到 jboss 7.2 中?的主要内容,如果未能解决你的问题,请参考以下文章
实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署
实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署
通过Dockerfile部署TomcatApacheNginxMySQL服务