我想澄清一下我脑子里的一些模糊。我正在NAT后面的本地业务网络上运行一个带有CentOS7的裸金属服务器。由于CentOS7上的主要软件需要PHP5.4.16并且不能升级,所以我必须围绕我想要实现的目标工作,即在虚拟机(VM)或Docker /Image/Repository上安装多个软件,并为其域设置自己的ip地址和dns。挑战是我不知道该和哪一个一起工作。假设这个场景有大量的∞用户,所以我的硬件将成为瓶颈。
据我理解,VM就像它自己的“实体”,与我目前运行的CentOS7操作系统是相互排斥的,但仍然运行在CentOS7服务器的硬件上。
我可以在这个VM上安装多个软件,它将在CentOS7重新启动后自动启动,保存ip和dns配置。
现在,Docker容器是无状态的,这意味着如果我重新启动服务器,容器/Image/Repository将丢失所有软件安装和ip地址/ dns配置。然而,这听起来并不准确。我觉得我可以用VM或Docker实现同样的结果
发布于 2020-11-05 07:31:51
码头集装箱将记住他们的配置。因此,当您用docker start重新启动它或它自动重新启动时,您设置的任何东西都应该重新启动。当您最初使用docker run创建一个容器时,网络配置就完成了。因此,仍然存在着破坏容器并丢失其配置的风险。
一个更好的选择是使用码头工来定义您想要运行的内容(包括网络)。这样,如果您确实破坏您的容器,您总是可以旋转一个新的配置相同。
不过,Docker确实不应该被认为是一个VM。容器被设计用来包装单个服务,而不是整个机器。
如果您只需要使用PHP5.4.16运行一些东西,那么您可以轻松地在一个带有PHP (docker pull php:fpm)之类的对接器容器中运行PHP,然后使用nginx或apache提供服务。
如果需要,可以在容器中运行的进程之间以及在主机上本地运行的进程之间进行混合和匹配。
发布于 2020-11-07 23:12:49
不,VM和容器之间的区别不是状态。
是的,码头工人可以忘记一些状态,而不是配置。但是当文件系统重新启动时,通常会忘记对它所做的更改。但是,可以将其配置为不执行此操作。不过,你可能不想这么做。
主要的区别是虚拟机虚拟化硬件。你必须在上面运行一个完整的操作系统。容器运行在主机内核上。它是在命名空间(隔离环境)中运行进程的一种方式。名称空间是Linux内核的一部分。Docker使用内核的特性,任何足够特权的进程都可以使用这些特性。
有时,您可以同时执行容器和VM。当您运行Linux容器时,这就是MS的docker所做的。
https://unix.stackexchange.com/questions/618088
复制相似问题