docker中应用程序部署的原则是什么?
我看到两个概念
也许还有其他人,我个人喜欢第一个,但如果你经常发布,我必须拥有大量的数据。如何选择一个而不是另一个?
我想知道其他人如何部署他们的Java应用程序,以便我可以发表个人意见。
答案 0 :(得分:0)
作为任何权衡,它取决于您的情况/发布周期。
但是,考虑到Java的性质,首先考虑Java也可能不适合码头环境 请参阅" Nobody puts Java in a container"
因此,我们已经完成了基于JVM的应用程序的开发,现在将其打包成docker镜像并在我们的笔记本上进行本地测试。一切都很好,所以我们将该容器的10个实例部署到我们的生产集群上。突然之间,应用程序受到限制,并没有达到我们在测试系统上看到的相同性能。我们的测试系统甚至是具有64个内核的高性能系统......
发生了什么事? 为了允许多个容器并排运行,我们已将其指定为限制为一个cpu(或CPU份额中的等效比率)。不幸的是,JVM将看到该节点上的核心总数(64),并使用该值初始化我们之前看到的默认线程数。在开始的10个实例中,我们最终得到:
10 * 64 Jit Compiler Threads
10 * 64 Garbage Collection threads
10 * 64 ….
我们的应用程序受限于它可以使用的cpu周期数,主要是处理不同线程之间的切换,并且无法完成任何实际工作。
容器的承诺,“包装一次,随处运行”似乎都被违反了......
具体来说,如何处理每个版本构建映像时生成的数据量?如果您每次在tomcat映像上构建应用程序,存储映像所需的磁盘空间将快速增长,对吧?
2种技巧: