搜索

第 7 章 将软件添加到 UBI 容器中

download PDF

红帽通用基础镜像 (UBI) 是从 RHEL 内容的子集构建的。UBI 还提供了 RHEL 软件包的一个子集,其可以免费安装并与 UBI 一起使用。要在正在运行的容器中添加或更新软件,您可以使用包含 RPM 软件包和更新的 dnf 软件仓库。UBI 提供了一组预先构建的语言运行时容器镜像,如 Python、Perl、Node.js、Ruby,等等。

要将 UBI 存储库中的软件包添加到正在运行的 UBI 容器中:

  • 在 UBI init 和 UBI 标准镜像中,使用 dnf 命令
  • 在 UBI 最小镜像上,请使用 microdnf 命令
注意

直接在运行的容器中安装和使用软件包会临时添加一些软件包。更改不会保存在容器镜像中。要使软件包更改持久,请参阅 使用 Buildah 从 Containerfile 构建镜像 部分。

注意

当您将软件添加到 UBI 容器时,其流程与在订阅的 RHEL 主机上或未订阅(或非 RHEL)系统上更新 UBI 的流程有所不同。

7.1. 使用 UBI init 镜像

您可以使用安装并配置 Web 服务器(httpd)的 Containerfile 构建一个容器,来在容器在主机系统上运行时由 systemd 服务(/sbin/init)自动启动。podman build 命令使用一个或多个 Containerfiles 中指令和一个指定的构建上下文目录构建镜像。上下文目录可以指定为存档的 URL、Git 存储库或 Containerfile。如果没有指定上下文目录,则当前工作目录被视为构建上下文,且必须包含 Containerfile。您还可以使用 --file 选项指定 Containerfile

先决条件

  • container-tools 元数据包已安装。

流程

  1. 在新目录中创建一个包含以下内容的 Containerfile

    FROM registry.access.redhat.com/ubi9/ubi-init
    RUN dnf -y install httpd; dnf clean all; systemctl enable httpd;
    RUN echo "Successful Web Server Test" > /var/www/html/index.html
    RUN mkdir /etc/systemd/system/httpd.service.d/; echo -e '[Service]\nRestart=always' > /etc/systemd/system/httpd.service.d/httpd.conf
    EXPOSE 80
    CMD [ "/sbin/init" ]

    Containerfile 安装 httpd 软件包,使 httpd 服务在引导时启动,创建了一个测试文件(index.html),将 Web 服务器公开给主机(端口 80),并在容器启动时启动 systemd init 服务(/sbin/init)。

  2. 构建容器:

    # podman build --format=docker -t mysysd .
  3. 可选:如果要使用 systemd 运行容器,且在您的系统上启用了 SELinux,您必须设置 container_manage_cgroup 布尔值变量:

    # setsebool -P container_manage_cgroup 1
  4. 运行名为 mysysd_run 的容器:

    # podman run -d --name=mysysd_run -p 80:80 mysysd

    mysysd 镜像作为 mysysd_run 容器运行,并作为守护进程,容器的端口 80 暴露在主机系统上的端口 80 上。

    注意

    在 rootless 模式中,您必须选择主机端口号 >= 1024。例如:

    $ podman run -d --name=mysysd -p 8081:80 mysysd

    要使用 < 1024 的端口号 ,您必须修改 net.ipv4.ip_unprivileged_port_start 变量:

    # sysctl net.ipv4.ip_unprivileged_port_start=80
  5. 检查容器是否正在运行:

    # podman ps
    a282b0c2ad3d  localhost/mysysd:latest  /sbin/init  15 seconds ago  Up 14 seconds ago  0.0.0.0:80->80/tcp  mysysd_run
  6. 测试 Web 服务器:

    # curl localhost/index.html
    Successful Web Server Test
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.