我一直在重读Docker文档,试图理解Docker和完整VM之间的区别。它是如何设法提供一个完整的文件系统、隔离的网络环境等而不那么沉重的?
为什么将软件部署到Docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?
我一直在重读Docker文档,试图理解Docker和完整VM之间的区别。它是如何设法提供一个完整的文件系统、隔离的网络环境等而不那么沉重的?
为什么将软件部署到Docker映像(如果这是正确的术语)比简单地部署到一致的生产环境更容易?
当前回答
我在生产环境和登台中使用过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的第一天,我发出了错误的命令,或者错误地删除了我的容器和所有数据和配置。
其他回答
Docker是这样介绍自己的:
Docker是推动集装箱运输的公司,也是唯一容器平台提供程序,以解决混合云。今天的企业面临着数字化的压力转换,但受现有应用程序和同时合理化日益多样化的投资组合云、数据中心和应用程序架构。Docker启用应用程序和基础架构之间的真正独立性开发人员和IT运营人员释放他们的潜力并创建一个模型以实现更好的协作和创新。
所以Docker是基于容器的,这意味着你有可以在当前机器上运行的图像和容器。它不包括像VM这样的操作系统,而是像Java、Tomcat等一组不同的工作包。
如果你了解容器,你就会了解Docker是什么,以及它与VM的区别。。。
那么,什么是容器?
容器映像是一个轻量级、独立的可执行包一个包含运行它所需的一切的软件:代码,运行时、系统工具、系统库、设置。两者都可用基于Linux和Windows的应用程序、容器化软件将始终运行无论环境如何,都是一样的。容器隔离软件从其环境来看,例如发展和分段环境,帮助减少运行团队之间的冲突同一基础设施上的不同软件。
如下图所示,每个容器都有一个单独的包,并且在一台机器上运行,共享该机器的操作系统。。。它们安全且易于运输。。。
Docker封装了一个应用程序及其所有依赖项。
虚拟机封装了一个OS,该OS可以运行它通常可以在裸机上运行的任何应用程序。
这里有很多很好的技术答案,清楚地讨论了VM和容器之间的差异以及Docker的起源。
对我来说,VM和Docker之间的根本区别在于如何管理应用程序的推广。
使用VM,您可以将应用程序及其依赖关系从一个VM提升到下一个DEV,从UAT提升到PRD。
这些VM通常会有不同的补丁和库。多个应用程序共享一个VM并不罕见。这需要管理所有应用程序的配置和依赖关系。回退需要撤消VM中的更改。或者在可能的情况下恢复。
使用Docker的想法是,将应用程序与其所需的库一起打包到自己的容器中,然后将整个容器作为一个单元进行升级。
除了内核之外,补丁和库都是相同的。一般来说,每个容器只有一个应用程序,这简化了配置。回退包括停止和删除容器。
因此,在最基本的层面上,使用VM,您可以将应用程序及其依赖项作为独立的组件进行推广,而使用Docker,您可以一次性推广所有内容。
是的,包括管理容器在内的容器存在问题,尽管Kubernetes或Docker Swarm等工具极大地简化了任务。
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. |
资料来源:Kubernetes in Action。