Docker开发和生产

我有一个类似于这个的Dockerfile

 FROM tomcat:7-jre8-alpine ... ENTRYPOINT ["sh", "docker-entrypoint.sh"] 

我想在完成所有testing和开发之后能够在生产中使用它。 在开发过程中,我想使用JRebel并激活debugging,最好不要更改Dockerfile或需要额外的。 要使用JRebel,不幸的是jrebel.jar需要成为容器/图像的一部分, JAVA_OPTS需要增强:

 "-javaagent:/jrebel.jar -Drebel.remoting_plugin=true" 

此外,tomcatdebugging必须启用:

 "-agentlib:jdwp=transport=dt_socket, address=1043, server=y, suspend=n" 

是否有可能有一个Dockerfile ,然后通过运行选项或类似的东西,使我需要的开发选项? 在开发过程中可以使用一个“高效的”docker镜像来运行一个容器,这将是一个可行的select吗?

然后通过运行选项或类似的东西,使我需要的开发选项?

作为一个可能的“运行选项”,您可以使用您在docker run命令 (或docker-compose '指令 )中定义的环境variables。

  docker run -e "env=dev" ... 

然后你可以使用一个脚本来调整JAVA_OPTS或者tomcat选项,这取决于$ENV

如果$ENV没有被定义,或者被定义并且等于除了“ dev ”以外的任何东西,那么你不会激活debugging选项。

典型的方法是在启动容器时指定不同的命令。 您可以覆盖入口点和CMD。

 docker run -d --entrypoint "[]" myimage sh -c "./init.sh && ./some-other-script.sh && echo 'about to start' && ./docker-entrypoint.sh" 

如果命令中的最后一条指令是主应用程序,请记住使用exec以便它以PID 1的forms运行并接收适当的SIGKILL和SIGTERM。 例如:

 docker run -d nginx sh -c "./inject-my-vars.sh && exec nginx -g 'daemon off;'"