java - 如何编写 Dockerfile 将我的 war 文件部署到 jboss 7.2 中?
问题描述
我想编写一个 Dockerfile 来将我的 war 文件部署到 jboss7.2 中。在我现有的 jboss 7.2 中,我们使用了密钥库文件以及数据库服务器配置。那么,我的 dockerfile 将如何进行这些配置?
解决方案
实际上,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”属性选项的更多信息,请查看本指南如何在 WildFly 配置中使用环境变量(standalone.xml 或 host.xml)。
重要提示:如果您要将应用程序部署为服务,请检查您的协调器是否支持机密以获得更好的安全性。Docker swarm 和 Kubernetes 都支持敏感数据的机密(这里是 docker swarm 的示例)。
- 密钥库文件
对于 Keystore,您可以在 docker run 命令中创建一个共享卷来处理 Keystore 文件:-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。
推荐阅读
- ios - 创建应用程序不工作的可下载 ios 链接
- docker - 通过配置文件设置 gitlab-ci 服务
- docker - Traefik 2.0 和 docker 简单配置不起作用
- c# - Authorization_IdentityNotFound 从守护程序应用程序访问 Microsoft Graph
- spring-batch - ExecutionContext 信息的 StepContribution 或 ChunkContext
- r - 当日期范围跨越日历年的更改时,将行拆分为两行
- python - 《函数调用栈:keras_scratch_graph》——手套嵌入文本情感分析
- xpath - 在 Google 表格 ImportXML 中提取元数据
- android - 没有 LeakCanary 的 Profiler 中的 android-Memory 使用量不会减少
- angular - 找不到具有未指定名称属性的控件 (formArray)