在Docker容器中配置数据源

在本文中,我将展示如何在Docker容器中配置在Tomcat上运行的ADF应用程序使用的数据源。

在Docker容器中配置数据源_第1张图片

因此,有一个Docker容器sample-adf,其中的Tomcat应用程序服务器预先配置了ADF库,并且在Tomcat之上运行了ADF应用程序。 ADF应用程序需要连接到外部数据库。

该应用程序是使用ADF BC实现的,其应用程序模块是指数据源jdbc / appDS

在Docker容器中配置数据源_第2张图片

该数据源在Tomcat /conf/context.xml文件的容器内配置。 JDBC URL,用户名和密码由环境变量提供:

这些变量在Tomcat / bin / setenv.sh文件中传播到应用程序服务器:

CATALINA_OPTS='-DDB_URL=$DB_URL -DDB_USERNAME=$DB_USERNAME -DDB_PWD=DB_PWD ...

设置好这些配置后,我们可以运行一个提供变量值的容器:

docker run –name adf -e DB_URL =” jdbc:oracle:thin:@myhost:1521:xe” -e DB_USERNAME = system -e DB_PWD = welcome1 sample-adf

如果我们要在K8s集群中运行容器,则可以在yaml文件中提供变量值:

spec:
spec:
      containers:
      - image: sample-adf
        env:
        - name: DB_URL
           value: "jdbc:oracle:thin:@myhost:1521:xe"
        - name: DB_USERNAME
          value: "system"
        - name: DB_PWD
          value: "welcome1"

为了使此yaml文件可移植,我们将避免提供确切的值,而是使用K8s ConfigMapsSecrets代替

ConfigMap是一个名为K8s的资源,它使我们能够将配置工件与图像内容分离,以使容器化的应用程序具有可移植性。 这只是一组简单的键值对。 显然,在每个环境中,每个K8s群集中的值都不同。

当涉及敏感数据(例如用户名和密码)时,使用类似的方法。 仅在这种情况下,我们使用特殊资源而不是configmaps称为
秘密 数据被编码,并且仅在该节点上的Pod需要该节点时才将其发送到该节点。 一旦删除依赖于它的窗格,就将其删除。

我们可以根据键值文件或仅通过在命令行中提供值来创建ConfigMap和Secrets:

kubectl create configmap adf-config  
from-literal=db.url="jdbc:oracle:thin:@myhost:1521:xe"

kubectl create secret generic adf-secret 
--from-literal=db.username="system" 
--from-literal=db.pwd="welcome1"

完成之后,我们可以在yaml文件中指定应从adf-config ConfigMap和adf-secret Secret中获取环境变量的值:

spec:
containers:
- image: sample-adf
env:
- name: DB_URL
valueFrom:
configMapKeyRef:
name: adf-config
key: db.url
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: adf-secret
key: db.username
- name:
DB_PWD
valueFrom:
secretKeyRef:
name: adf-secret
key: db.pwd

而已!

翻译自: https://www.javacodegeeks.com/2018/10/configuring-datasource-docker-container.html

你可能感兴趣的:(在Docker容器中配置数据源)