将Tomcatparameter passing给Docker

我是Docker的新手,我有一个问题,我似乎无法find答案。 我正在做一个Docker镜像(consol / tomcat-7.0),并写了一个加载这个镜像的Dockerfile,复制我的war文件,并将一个server.xml,具有唯一的数据库连接细节和默认主机复制到一个新镜像中。 如果我运行了许多带有这个映像的容器,那么让每一个使用相同的war文件,但连接到不同的数据库,并在server.xml中有不同的URL的正确方法是什么? 我目前正在使用不同的细节Dockerfilebuild立图像,每次我想要一个新的实例,这似乎是一个浪费。

所以每次我想要一个新的实例时,我使用这个Dockerfile运行'build':

FROM consol/tomcat-7.0:latest MAINTAINER xxx LABEL version="1.0" EXPOSE 80 443 RUN mkdir /vhost/ COPY FILES /vhost/ /vhost/ # my war files - same on every instance COPY FILES/server.xml /opt/tomcat/conf/ # my config file - different on each instance 

然后运行这个新的图像。

这样做的正确方法是什么?

docker集装箱的典型方法是通过环境variables传递。

扩展解决scheme以通过命令行传递端口 , server.xml需要被修改,以便从JAVA_OPTS

例如在server.xml

 <GlobalNamingResources> <Resource Name="jdbc/Addresses" auth="Container" type="javax.sql.Datasource" username="auser" password="Secret" driverClassName="com.mysql.jdbc.Driver" description="Global Address Database" url="${jdbc.url}" /> </GlobalNamingResources> 

然后,您可以${jdbc.url}上的属性传递${jdbc.url}值。

 JAVA_OPTS="-Djdbc.url=jdbc:mysql:mysqlhost:3306/" 

在运行docker映像时,使用-e标志在运行时设置此环境variables

 $ docker run -it -e "JAVA_OPTS=-Djdbc.url=jdbc:mysql:mysqlhost:3306/" --rm myjavadockerimage /opt/tomcat/bin/deploy-and-run.sh 

如果需要将mysqlhost映射到特定的IP地址,也可以select添加--add-host

至less有两个select我可以想到:

  • 如果server.xml支持环境variables,则可以通过--env甚至是--env-file将数据库连接详细信息传递给容器。 请注意,这具有一定的安全性影响。
  • 另一种select是通过--volume将特定实例的server.xml安装到容器中。