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;'"