虚拟化:虚拟机或 Docker π

虚拟化:虚拟机或 Docker π

我想澄清我脑子里的一些歧义。我正在 NAT 后面的本地业务网络上运行带有 CentOS7 的裸机服务器。因为 CentOS7 上的主要软件需要 PHP 5.4.16 并且无法升级,所以我必须解决我想要实现的目标,即使用自己的 ip 在虚拟机(VM)或 Docker 容器/映像/存储库上安装多个软件他们的域的地址和 DNS。挑战是我不确定与哪一个合作。假设这个场景有无穷多个用户,所以我的硬件将成为瓶颈。

据我了解,虚拟机就像它自己的“实体”,与我当前运行的 CentOS7 操作系统互斥,但仍然在 CentOS7 服务器的硬件上运行。

我可以在这个虚拟机上安装多个软件,它会在 CentOS7 重新启动时自动启动,并保存 ip 和 dns 配置。

现在 Docker 容器是无状态的,这意味着如果我重新启动服务器,容器/映像/存储库将丢失所有软件安装和 IP 地址/DNS 配置。然而,这听起来并不准确。我觉得使用VM或Docker可以达到相同的结果

答案1

Docker 容器会记住它们的配置。因此,无论您设置什么,当您重新启动它时都应该恢复,docker start否则它会自动重新启动。当您最初使用docker run.因此,仍然存在丢弃容器并丢失其配置的风险。

更好的选择是使用docker 撰写准确定义您想要运行的内容(包括网络)。这样,如果您确实销毁了容器,您始终可以启动一个具有相同配置的新容器。


不过,Docker 确实不应该被视为虚拟机。容器旨在包装单个服务而不是整个机器。

如果您只需要使用 PHP 5.4.16 运行某些内容,那么您可以使用 php-fpm () 之类的内容轻松在 docker 容器内运行 PHP docker pull php:fpm,然后使用 nginx 或 apache 提供服务。

如果需要,您可以在容器中和主机上本机运行的进程之间进行混合和匹配。

答案2

虚拟机和容器之间的区别不是状态。

是的,Docker 会忘记一些状态,而不是配置。但会通常情况下重新启动时忘记对文件系统所做的更改。但是可以将其配置为不这样做。然而你大概不想这样做。

主要区别在于虚拟机虚拟化硬件。您必须在其上运行完整的操作系统。容器在主机内核上运行。它是一种在命名空间(隔离环境)中运行进程的方法。命名空间是 Linux 内核的一部分。 Docker 使用任何具有足够特权的进程都可以使用的内核功能。

有时您可以同时使用容器和虚拟机。这就是运行 Linux 容器时 docker for MS-Windows 所做的事情。

相关内容