如何编写一个Dockerfile来将我的war文件部署到jboss 7.2中?

sqserrrh  于 2022-11-08  发布在  Docker
关注(0)|答案(1)|浏览(203)

我想写一个Dockerfile来把我的war文件部署到jboss7.2中。在我现有的jboss7.2中,我们使用了keystore文件和数据库服务器配置。那么,我的Dockerfile将如何进行这些配置呢?

mklgxw1f

mklgxw1f1#

实际上,Dockerfile只负责映像构建,它不能包括提到的所有配置。
这是您案例中的坞站化设计
1.停靠文件
您的Dockerfile需要有一个包含JDK和JBoss的基础映像,以及您首选的Linux发行版(请查看DockerHub),并且您需要在目标目录中复制应用程序war和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”属性选项的更多信息,请查看本指南How to use environment variables in WildFly configuration (standalone.xml or host.xml)
重要提示:如果您打算将应用程序部署为服务,请检查您的编排器是否支持secret以获得更好的安全性。Docker swarm和Kubernetes都支持敏感数据的secret(以下是一个用于Docker swarm的example)。
1.密钥库文件
对于密钥库,您可以创建一个共享卷来处理docker run命令中的密钥库文件:-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卷文档以获取更多信息Use volumes, Docker docs

相关问题