跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 容器指南 / Linux 容器简介
适用范围 SUSE Linux Enterprise Server 15 SP3

1 Linux 容器简介

Linux 容器提供了轻量级虚拟化方法,可在单台主机上同时运行多个虚拟环境(容器)。在 Xen 或 KVM 之类的技术中,处理器会模拟整个硬件环境,超级管理程序会控制虚拟机。而容器则与此不同,它在操作系统级别提供虚拟化,在该级别,内核会控制隔离的容器。

使用容器的优势
  • 使用容器可将应用程序隔离在自给性单元中。

  • 容器提供近乎本机的性能。容器可以根据运行时环境直接使用主机内核,因而可最大程度地减少开销。

  • 可以通过内核控制组(参见第 9 章 “内核控制组)控制网络接口并在容器内部应用资源。

容器的限制
  • 容器在主机系统的内核中运行,因此无法使用不同的内核或不同的内核版本。

  • 只有基于 Linux 的应用程序才可容器化。

  • 容器不安全,总体安全性取决于主机系统。可以通过 AppArmor 或 SELinux 配置文件保护容器化应用程序。容器比虚拟机更难以保护,因为容器的受攻击面更大。

1.1 Podman 的重要概念和简介

尽管 Docker 开源引擎是用于处理映像和容器的流行解决方案,但具备诸多优势的 Podman 可以直接取代 Docker。有关 Podman 的详细信息,请参见第 10 章 “Podman 概述。本章将会简要介绍重要概念,以及创建容器映像并使用它来运行容器的基本过程。

基本的 Podman 工作流程如下:

Image

在本地计算机或云服务中运行容器通常涉及以下步骤:

  1. 提取基本映像,方法是将其从注册表中提取到本地计算机。

  2. 创建一个 Dockerfile,并使用它来基于基本映像构建一个自定义映像。

  3. 使用创建的映像启动一个或多个容器。

要运行容器,需要有一个映像。映像包含运行应用程序所需的全部依赖项。例如,SLE 基本映像包含选择了极少量软件包的 SLE 发行套件。

尽管可以从头开始创建映像,但很少有应用程序能够在这种空环境中正常运行。因此,在大多数情况下,使用现有的基本映像更为可行。基本映像没有父项,也就是说,它不以其他映像为基础。

尽管您可以使用基本映像来运行容器,但基本映像的主要用途是充当创建自定义映像的基础,自定义映像可以运行包含特定应用程序、服务器、服务等的容器。

基本映像和自定义映像通常都可以通过称作“注册表”的映像储存库获得。除非显式指定了注册表,否则 Podman 将从 Docker Hub 注册表中提取映像。尽管您可以手动提取基本映像,但 Podman 可以在构建自定义映像时自动提取基本映像。

要构建自定义映像,需要创建一个名为 Containerfile 或 Dockerfile 的特殊文件,其中包含构建指令。例如,Dockerfile 可以包含用于更新系统软件、安装所需应用程序、打开特定网络端口、运行命令等的指令。

您不仅可以基于基本映像构建映像,而且可以基于自定义映像构建映像。因此您可以构建由多个层组成的映像:

Image

1.1.1 实际示例

以下过程说明如何构建一个可用于运行容器的自定义 Docker 映像,该容器包含通过内置 PHP 开发服务器提供服务的简单 PHP 应用程序 example

过程 1.1︰ 构建映像并运行容器
  1. 安装 Podman:

    tux > sudo zypper in podman
  2. 切换到 PHP 项目所在的目录,并创建一个名为 Dockerfile 的文件:

    tux > cd example
    tux > touch Dockerfile
  3. 打开 Dockerfile 文件进行编辑,在其中添加以下代码:

    FROM php:7.4-cli
    COPY . /usr/src/example
    WORKDIR /usr/src/example
    EXPOSE 8000
    CMD [ "php", "-S", "0.0.0.0:8000" ]
  4. 构建容器映像:

    tux > sudo podman build -t example .
  5. 运行容器:

    tux > sudo podman run -it -p8000:8000 --rm example
  6. 将浏览器指向 localhost:8000 以访问容器中运行的应用程序。

请注意,SUSE 不为第三方映像(例如本示例中使用的映像)提供支持。