跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / 容器指南 / 创建自定义容器映像
适用范围 容器指南

11 创建自定义容器映像

要创建自定义映像,需要有 SUSE Linux Enterprise Server 的基本映像。您可以使用任何预构建的 SUSE Linux Enterprise Server 映像。

11.1 提取基本 SLES 映像

要获取 SLE 12 SP5 和更高版本的预构建基本映像,请使用以下命令:

> podman pull registry.suse.com/suse/IMAGENAME

例如,对于 SUSE Linux Enterprise Server 15,命令如下:

> podman pull registry.suse.com/suse/sle15

有关获取特定基本映像的信息,请参见第 4.1 节 “SLE 基本容器映像简介”

容器映像准备就绪后,您可以按照第 11.2 节 “自定义 SLES 容器映像”中所述对其进行自定义。

11.2 自定义 SLES 容器映像

11.2.1 储存库和注册

预构建的映像未配置任何储存库,也不包含任何模块或扩展。它们包含一个 zypper 服务,该服务根据运行容器的 SUSE Linux Enterprise Server 主机的配置联系 SUSE Customer Center 或 Repository Mirroring Tool (RMT) 服务器。该服务会获取容器映像所用产品的可用储存库列表。您还可以直接在 Dockerfile 中声明扩展。有关详细信息,请参见第 5.2 节 “container-suseconnect”

注意
注意:SLE_BCI 储存库

从 SLE 15 SP3 开始,默认基本映像包含 SLE_BCI 储存库。仅当某个容器是在未注册的 SLES 主机上构建的或是在此类主机上运行时,或者当容器无法使用注册身份凭证时,才使用此储存库。该储存库提供一部分可用于自定义 SLES 容器映像的 SLE 软件包。无需注册即可使用该储存库,但 SUSE 不对其提供支持。

您不需要在容器映像中添加任何身份凭证,因为 docker 守护程序会自动将计算机身份凭证插入到容器中的 /run/secrets 目录。这同样适用于主机系统的 /etc/SUSEConnect 文件,该文件会自动插入到 /run/secrets 目录中。

注意
注意:身份凭证和安全性

/run/secrets 目录的内容永远不会包含在容器映像中,因此不存在身份凭证泄露的风险。

注意
注意:在已于 RMT 中注册的系统上构建映像

如果用于构建容器映像的主机系统已在 RMT 中注册,则默认行为只允许构建其代码库与主机相同的容器。例如,如果您的容器主机是 SLE 15 系统,则默认只能在该主机上构建基于 SLE 15 的映像。要为不同的 SLE 版本(例如,SLE 15 主机上的 SLE 12)构建映像,可将目标版本的主机计算机身份凭证插入到容器中,如下所述。

请注意,如果 RMT 服务器使用自我签名证书,则需要将匹配的 CA 证书添加到 CA_TRUSTSTORE/rmt-server.pem 中的容器才能接受证书。

如果主机系统已在 SUSE Customer Center 中注册,则此限制不适用。

要获取储存库列表,请使用以下命令:

> sudo zypper repos

这会自动将所有储存库添加到容器中。对于添加到系统的每个储存库,都会在 /etc/zypp/repos.d 下创建一个新文件。这些储存库的 URL 包含一个在 12 小时后自动失效的访问令牌。要续订令牌,请运行命令 zypper ref -s。将这些文件包含在容器映像中不会带来任何安全风险。

要使用一组不同的身份凭证,请将自定义 /etc/zypp/credentials.d/SCCcredentials 文件放入容器映像中。该文件中的计算机身份凭证包含您要使用的订阅。这同样适用于 SUSEConnect 文件:要覆盖运行容器的主机系统上的现有文件,请将自定义 /etc/SUSEConnect 文件添加到容器映像中。

现在,您便可以按照第 11.2.2 节 “为 SLE 12 SP5 和更高版本创建自定义映像”中所述使用 Dockerfile 来创建自定义容器映像。

编辑 Dockerfile 后,通过在 Dockerfile 所在的同一目录中运行以下命令来构建映像:

> podman build .

有关 podman build 选项的详细信息,请参见官方 Podman 文档

11.2.2 为 SLE 12 SP5 和更高版本创建自定义映像

下面的 Dockerfile 会创建一个基于 SUSE Linux Enterprise Server 15 的简单容器映像:

FROM registry.suse.com/suse/sle15
RUN zypper ref -s && zypper -n in vim && zypper -n clean

如果 Podman 主机计算机已在内部 RMT 服务器中注册,则该映像需要 RMT 使用的 SSL 证书:

FROM registry.suse.com/suse/sle15
# Import the crt file of our private SMT server
ADD http://smt./smt.crt /etc/pki/trust/anchors/smt.crt
RUN update-ca-certificates && \
    zypper ref -s && \
    zypper -n in vim && \
    zypper -n clean

如果您要将 SLE 扩展和模块添加到映像,请参见:第 5.2.4 节 “将模块添加到容器或容器映像”

11.2.3 在公有云中的按需 SLE 实例上构建容器映像

在公有云(AWS、GCE 或 Azure)中以按需或即用即付实例形式启动的 SLE 实例上构建容器映像需要执行额外的步骤。要安装软件包和更新,需将按需公有云实例连接到更新基础架构。此基础架构基于 SUSE 在公有云提供商处运营的 RMT 服务器工作。

因此,您的计算机需要找到所需的服务并向其进行身份验证。这可以使用 containerbuild-regionsrv 服务来完成。通过公有云提供商的商城提供的公有云映像中提供此服务。在构建映像之前,必须通过运行以下命令在公有云实例上启动此服务:

> sudo systemctl start containerbuild-regionsrv

要让该服务在系统启动时自动启动,请启用该服务:

> sudo systemctl enable containerbuild-regionsrv

SLE 基本映像提供的 Zypper 插件将连接到此服务,并检索身份验证细节以及有关要与哪个更新服务器通讯的信息。为此,必须在启用主机网络的情况下构建容器,例如:

> podman build --network host build-directory/

由于公有云中的更新基础架构基于 RMT 工作,因此,为不同于主机 SLE 版本的 SLE 版本构建 SLE 映像也存在同样的限制(参见注意:在已于 RMT 中注册的系统上构建映像)。