这个问题也与golang有关,在其中您可以提取静态链接的二进制文件并在某个地方运行它们,而Python或C ++则通常具有大量的链接库,这导致人们只需要在其中构建一个docker容器即可。开发环境。
这里有两点要回答:
一:必须有更好的方法,而有:您可以仅使用安装环境来构建较小(且效率更高)的Docker容器,这带来了与Golang-with-environment和Golang-just相比的类似优势-binaries容器。对于Java,可以构建一个胖jar或包含所有库jar和一个shell脚本的可安装应用程序。就Python而言,您可以使用auditwheel来构建独立于构建环境的独立轮子(也可以使用带有静态链接的C ++来达到几乎相同的效果)。
第二:您需要docker做什么?在Java领域中,您可以使用类加载器在不同组件之间进行很多分离,但是要点是Java应用程序的本质。没有Java应用程序会自己运行-如果它不在docker中运行,则通常必须由supervisor或systemd等进行监督。输入Kubernetes,Marathon或Docker云,它们使用容器抽象来虚拟化主机本身,而不是虚拟化整个网络,这样您就可以部署容器并且它们可以在某些随机主机上运行。
微服务通常在基于docker的云上运行,因为它使您可以将docker主机视为牛,而不是宠物,并且类似于docker化的应用程序。当然,一旦将主机卷安装到docker上,并且需要在具有这些卷的主机上准确运行docker容器,这种抽象就会泄漏。有些人甚至可以绕开它。