我一直在重读Docker文档,试图理解Docker和完整VM之间的区别。它是如何设法提供一个完整的文件系统、隔离的网络环境等而不那么沉重的?
为什么将软件部署到Docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?
我一直在重读Docker文档,试图理解Docker和完整VM之间的区别。它是如何设法提供一个完整的文件系统、隔离的网络环境等而不那么沉重的?
为什么将软件部署到Docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?
当前回答
好答案。为了获得容器与VM的图像表示,请查看下面的一个。
来源
其他回答
Docker封装了一个应用程序及其所有依赖项。
虚拟机封装了一个OS,该OS可以运行它通常可以在裸机上运行的任何应用程序。
好答案。为了获得容器与VM的图像表示,请查看下面的一个。
来源
我喜欢肯·科克伦的回答。
但我想补充一点观点,这里没有详细介绍。在我看来,Docker在整个过程中也有所不同。与虚拟机不同,Docker不仅仅是硬件的最佳资源共享,而且它还为打包应用程序提供了一个“系统”(作为一组微服务是可取的,但不是必须的)。
对我来说,它正好填补了面向开发人员的工具(如rpm、Debian包、Maven、npm+Git)与操作工具(如Puppet、VMware、Xen)之间的差距,你可以这么说。。。
为什么将软件部署到docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?
您的问题假定了某种一致的生产环境。但如何保持一致?考虑一些数量(>10)的服务器和应用程序,这是管道中的阶段。
为了保持同步,您将开始使用类似木偶、厨师或您自己的供应脚本、未发布的规则和/或大量文档。。。理论上,服务器可以无限期运行,并保持完全一致和最新。实践无法完全管理服务器的配置,因此存在很大的配置漂移和运行服务器的意外更改空间。
因此,有一种已知的模式可以避免这种情况,即所谓的不可变服务器。但不可变的服务器模式并不受欢迎。主要是因为Docker之前使用的VM的限制。处理几个千兆字节的大图像,移动这些大图像,只是为了改变应用程序中的一些字段,这是非常费力的。可以理解。。。
有了Docker生态系统,你永远不需要在“小改动”上移动千兆字节(感谢aufs和Registry),也不必担心在运行时将应用程序打包到Docker容器中会导致性能下降。您不必担心该图像的版本。
最后,即使在您的Linux笔记本电脑上,您也可以经常复制复杂的生产环境(如果在您的情况下不起作用,请不要打电话给我;)
当然,您可以在VM中启动Docker容器(这是一个好主意)。减少VM级别的服务器资源调配。所有这些都可以由Docker管理。
同时Docker使用自己的实现“libcontainer”而不是LXC。但LXC仍然可用。
我在生产环境和登台中使用过Docker。当你习惯了它,你会发现它对于构建一个多容器和隔离环境非常强大。
Docker是基于LXC(Linux容器)开发的,在许多Linux发行版中都能完美运行,尤其是Ubuntu。
Docker容器是隔离的环境。当您在Docker容器中发出top命令时,可以看到它,Docker容器是从Docker映像创建的。
此外,由于dockerFile配置,它们非常轻便和灵活。
例如,您可以创建一个Docker映像并配置一个DockerFile,然后告诉它,例如,当它运行时,运行wget“this”,apt-get“that”,运行“some shell script”,设置环境变量等等。
在微服务项目和架构中,Docker是一项非常可行的资产。您可以通过Docker、Docker swarm、Kubernetes和Docker Compose实现可伸缩性、弹性和弹性。
Docker的另一个重要问题是Docker Hub及其社区。例如,我使用Prometheus、Grafana、PrometheusJMXExporter和Docker实现了一个用于监控kafka的生态系统。
为此,我为zookeeper、kafka、Prometheus、Grafana和jmx收集器下载了已配置的Docker容器,然后使用YAML文件为其中一些容器安装了自己的配置,我更改了Docker容器中的一些文件和配置,并在一台机器上使用多容器Docker构建了一个用于监控kafka的完整系统,该系统具有隔离性、可扩展性和弹性,该架构可以轻松移动到多个服务器中。
除了Docker Hub站点之外,还有一个名为quay.io的站点,您可以使用它在那里创建自己的Docker图像仪表板,并将其推送到码头。您甚至可以将Docker图像从DockerHub导入码头,然后在自己的机器上从码头运行。
注意:学习Docker一开始看起来既复杂又困难,但当你习惯了它之后,你就不能没有它了。
我记得在使用Docker的第一天,我发出了错误的命令,或者错误地删除了我的容器和所有数据和配置。
Feature |
Virtual Machine |
(Docker) Containers |
---|---|---|
OS | Each VM Does contains an Operating System |
Each Docker Container Does Not contains an Operating System |
H/W | Each VM contain a virtual copy of the hardware that OS requires to run. | There is No virtualization of H/W with containers |
Weight | VM's are heavy -- reason sited above-- | containers are lightweight and, thus, fast |
Required S/W | Virtuliazation achieve using software called a hypervisor | Containerzation achieve using software called a Docker |
Core | Virtual machines provide virtual hardware (or hardware on which an operating system and other programs can be installed) | Docker containers don’t use any hardware virtualization. **It helps to use container |
Abstraction | Virtual machines provide hardware abstractions so you can run multiple operating systems. | Containers provide OS abstractions so you can run multiple containers. |
Boot-Time | It takes a long time (often minutes) to create and require significant resource overhead because they run a whole operating system in addition to the software you want to use. | It takes less time because Programs running inside Docker containers interface directly with the host’s Linux kernel. |