首页 > 解决方案 > 如何编写 Dockerfile 将我的 war 文件部署到 jboss 7.2 中?

问题描述

我想编写一个 Dockerfile 来将我的 war 文件部署到 jboss7.2 中。在我现有的 jboss 7.2 中,我们使用了密钥库文件以及数据库服务器配置。那么,我的 dockerfile 将如何进行这些配置?

标签: javadockerdeploymentjbosswar

解决方案


实际上,Dockerfile 只负责镜像构建,它不能包含所有提到的配置。

这是您的案例中的 Dockerization 设计

  1. 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}
  1. 数据库凭据

对于数据库凭据,最简单的方法是将它们作为环境变量传递给容器:

 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 的示例)。

  1. 密钥库文件

对于 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


推荐阅读