5 注册和联机储存库 #
5.1 SLE Containers 模块 #
要在 SUSE Linux Enterprise Server 上使用容器,首先必须启用 SLE Containers 模块。此模块包含围绕容器的软件包,其中包括容器引擎以及与容器相关的核心工具,例如本地注册表。有关 SLE 模块的详细信息,请参见 https://documentation.suse.com/sles/html/SLES-all/article-modules.html。
常规 SLES 订阅包含免费的 SLE Containers 模块。
5.1.1 使用 YaST 图形界面启用 Containers 模块 #
启动 YaST,然后选择软件 > 软件储存库。
单击添加打开附加产品对话框。
在注册服务器中选择扩展和模块,然后单击下一步。
在可用扩展和模块列表中选择“Containers Module 15 SP4 x86_64”,然后单击下一步。这会将 Containers 模块及其储存库添加到系统中。
如果您使用 Repository Mirroring Tool,请更新 RMT 服务器上的储存库列表。
5.1.2 使用 SUSEConnect 从命令行启用 Containers 模块 #
您也可以使用以下命令添加 Containers 模块:
> sudo SUSEConnect -p sle-module-containers/15.4/x86_64
5.2 container-suseconnect #
5.2.1 什么是 container-suseconnect? #
container-suseconnect
是 Zypper 随附的所有基本容器映像中的一个可用插件。当该插件检测到主机的 SUSE Linux Enterprise Server 注册身份凭证时,它会使用这些身份凭证来向容器授予对 SUSE Linux Enterprise 储存库的访问权限。这包括不属于免费 SLE_BCI 储存库的其他模块和以前的软件包版本。
5.2.2 如何在 SLES 和 openSUSE 上使用 container-suseconnect #
如果您正在使用 Docker 运行已注册的 SLES 系统,container-suseconnect
会自动检测和使用订阅,而无需您执行任何操作。
在包含 Docker 的 openSUSE 系统上,您必须将文件 /etc/SUSEConnect
和 /etc/zypp/credentials.d/SCCcredentials
从已注册的 SLES 计算机复制到本地计算机。请注意,仅当您使用 RMT 管理注册身份凭证时才需要 /etc/SUSEConnect
文件。
5.2.3 如何在非 SLES 主机上使用 container-suseconnect 或将其与 Podman 和 Buildah 配合使用 #
需要一个已注册的 SLES 系统才能在非 SLES 主机上使用 container-suseconnect
或将其与 Podman 和 Buildah 配合使用。此系统可以是物理机、虚拟机或者安装并注册了 SUSEConnect
的 bci-base 容器。
如果您不使用 RMT,请将 /etc/zypp/credentials.d/SCCcredentials
复制到开发计算机。否则请复制 /etc/zypp/credentials.d/SCCcredentials
和 /etc/SUSEConnect
文件。
可以使用以下命令获取 SCCcredentials
(请将 REGISTRATION_CODE
替换为您的 SCC 注册码)
podman run --rm registry.suse.com/suse/sle15:latest bash -c \ "zypper -n in SUSEConnect; SUSEConnect --regcode REGISTRATION_CODE; \ cat /etc/zypp/credentials.d/SCCcredentials"
如果您正在运行基于 SLE BCI 的容器,请将 SCCcredentials
(以及可选的 /etc/SUSEConnect
)挂载到正确的目标中。以下示例说明如何在当前工作目录中挂载 SCCcredentials
:
podman run -v /path/to/SCCcredentials:/etc/zypp/credentials.d/SCCcredentials \ -it --pull=always registry.suse.com/bci/bci-base:latest
请不要将 SCCcredentials
和 SUSEConnect
文件复制到容器映像中,以免无意中将这些文件添加到最终映像中。请改用机密,因为它们仅适用于单个层,而不是构建的映像的一部分。为此,请将 SCCcredentials
(以及可选的 SUSEConnect
)的副本放到文件系统上的某个位置,并修改调用 Zypper 的 RUN
指令,如下所示:
FROM registry.suse.com/bci/bci-base:latest RUN --mount=type=secret,id=SUSEConnect \ --mount=type=secret,id=SCCcredentials \ zypper -n in fluxbox
Buildah 支持通过 --secret
标志装载机密,如下所示:
buildah bud --layers --secret=id=SCCcredentials,src=/path/to/SCCcredentials \ --secret=id=SUSEConnect,src=/path/to/SUSEConnect .
每次调用 Zypper 时,container-suseconnect 都会自动运行。如果未使用已注册的 SLES 主机,您可能会看到以下错误消息:
> zypper ref Refreshing service 'container-suseconnect-zypp'. Problem retrieving the repository index file for service 'container-suseconnect-zypp': [container-suseconnect-zypp|file:/usr/lib/zypp/plugins/services/container-suseconnect-zypp] Warning: Skipping service 'container-suseconnect-zypp' because of the above error.
可以忽略该消息,因为它仅表明 container-suseconnect 无法检索您的 SUSE Customer Center 身份凭证,因此无法添加完整的 SLE 储存库。您仍然拥有对 SLE_BCI 储存库的完全访问权限,并且可以继续按预期使用容器。
5.2.4 将模块添加到容器或容器映像 #
container-suseconnect
允许您自动将 SLE 模块添加到容器或容器映像。可添加哪些模块由环境变量 ADDITIONAL_MODULES
决定,该变量包含逗号分隔的模块名称列表。在 Dockerfile
中,可以使用 ENV
指令完成此操作,如下所示:
FROM registry.suse.com/bci/bci-base:latest ENV ADDITIONAL_MODULES sle-module-desktop-applications,sle-module-development-tools RUN --mount=type=secret,id=SCCcredentials zypper -n in fluxbox && zypper -n clean