首页 > 解决方案 > 我仍然对 Docker 容器和图像感到困惑

问题描述

我知道容器是应用程序和主机(托管运行进程)之间的一种隔离形式。我也知道容器映像基本上是运行时环境的包(希望我理解正确)。令我困惑的是,当他们说 Docker 映像不保留状态时。因此,如果我使用数据库(如 PostgreSQL)创建 Docker 映像,当我停止容器并重新启动时,所有数据不会被清除吗?为什么要在 Docker 容器中使用数据库?

我也很难掌握LXC。在另一个问题页面上,我看到:

Linux Containers (LXC) 是一种操作系统级别的虚拟化方法,用于在单个控制主机(LXC 主机)上运行多个隔离的 Linux 系统(容器)

这到底是什么意思?这是否意味着只要主机支持 LXC,我就可以在同一主机上运行多个版本的 Linux?它还有什么?

标签: dockercontainerslxc

解决方案


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 容器。


推荐阅读