docker - 我仍然对 Docker 容器和图像感到困惑
问题描述
我知道容器是应用程序和主机(托管运行进程)之间的一种隔离形式。我也知道容器映像基本上是运行时环境的包(希望我理解正确)。令我困惑的是,当他们说 Docker 映像不保留状态时。因此,如果我使用数据库(如 PostgreSQL)创建 Docker 映像,当我停止容器并重新启动时,所有数据不会被清除吗?为什么要在 Docker 容器中使用数据库?
我也很难掌握LXC。在另一个问题页面上,我看到:
Linux Containers (LXC) 是一种操作系统级别的虚拟化方法,用于在单个控制主机(LXC 主机)上运行多个隔离的 Linux 系统(容器)
这到底是什么意思?这是否意味着只要主机支持 LXC,我就可以在同一主机上运行多个版本的 Linux?它还有什么?
解决方案
LXC 和 Docker,两者完全不同。但我们说两者都是容器持有者。
有两种类型的容器,
1.Application Containers:其主要座右铭是提供应用程序依赖项。这些是Docker 容器(轻量级容器)。它们在您的主机中作为一个进程运行,并完成您想要的所有事情。他们实际上不需要任何操作系统映像/启动的东西。他们来了,他们在几秒钟内就走了。您不能在 docker 容器内运行多个进程/服务。如果你愿意,你可以在一个 docker 容器中运行多个进程,但这很费力。在这里,资源(CPU、磁盘、内存、RAM)将被共享。
2.System Containers:这些是fat Containers,意味着它们很重,它们需要OS Image来启动自己,同时它们不像虚拟机那么重,它们与VM非常相似,但架构略有不同。
在这里,让我们说 Ubuntu 作为主机,如果您在 ubuntu 主机中安装和配置了 LXC,您可以在上面运行 Centos 容器、Ubuntu(不同版本)、RHEL、Fedora 和任何 linux 风格一个 Ubuntu 主机。您还可以在 LXC contianer 中运行多个进程。这里也将进行资源共享。
所以,如果你有一个巨大的应用程序在一个 LXC 容器中运行,它需要更多的资源,同时如果你有另一个应用程序在另一个需要更少资源的 LXC 容器中运行。资源需求少的容器会与资源需求多的容器共享资源。
回答您的问题:
因此,如果我使用数据库(如 PostgreSQL)创建 Docker 映像,当我停止容器并重新启动时,所有数据不会消失吗?
您不会创建包含一些数据的数据库 docker 映像(不推荐这样做)。您从图像运行/创建一个容器,并将数据附加/安装到它。
因此,当您停止/重新启动容器时,如果您将该数据附加到卷上,数据将永远不会丢失,因为该卷位于 docker 容器以外的某个位置(可能是 NFS 服务器或主机本身)。
这是否意味着只要主机支持 LXC,我就可以在同一主机上运行多个版本的 Linux?它还有什么?
是的,你可以这样做。我们在生产中运行 LXC 容器。
推荐阅读
- c++ - 如何在 find_if 算法中使用谓词函数?
- python - 如何在不启用安全性较低的应用程序的情况下从 python 发送电子邮件?
- neutrinos-platform - 无法使用来自 Neutrinos 平台的 Cordova 插件移动 OCR
- c# - 将列表框项转换为字符串 C#
- uniqueidentifier - 识别从 Qualtrics 重定向的唯一访问者
- javascript - React - 无法从 index.js 导出多个文件
- php - 在 wordpress 自动将帖子发布到 facebook 页面中,我没有在 facebook 中获得授权
- c# - User.IsInRole("Admin") 在 _Layout.cshtml 中总是返回 false
- html - 电子邮件 HTML 表格在 Gmail 中正确呈现,但在 Outlook 中失败
- ruby-on-rails - 如何防止完全相同参数的多个条目?