第 7 章 将软件添加到 UBI 容器中
红帽通用基础镜像 (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元数据包已安装。
流程
在新目录中创建一个包含以下内容的
Containerfile:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Containerfile安装httpd软件包,使httpd服务在引导时启动,创建了一个测试文件(index.html),将 Web 服务器公开给主机(端口 80),并在容器启动时启动systemdinit 服务(/sbin/init)。构建容器:
podman build --format=docker -t mysysd .
# podman build --format=docker -t mysysd .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果要使用
systemd运行容器,且在您的系统上启用了 SELinux,您必须设置container_manage_cgroup布尔值变量:setsebool -P container_manage_cgroup 1
# setsebool -P container_manage_cgroup 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行名为
mysysd_run的容器:podman run -d --name=mysysd_run -p 80:80 mysysd
# podman run -d --name=mysysd_run -p 80:80 mysysdCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysysd镜像作为mysysd_run容器运行,并作为守护进程,容器的端口 80 暴露在主机系统上的端口 80 上。注意在 rootless 模式中,您必须选择主机端口号 >= 1024。例如:
podman run -d --name=mysysd -p 8081:80 mysysd
$ podman run -d --name=mysysd -p 8081:80 mysysdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用 < 1024 的端口号 ,您必须修改
net.ipv4.ip_unprivileged_port_start变量:sysctl net.ipv4.ip_unprivileged_port_start=80
# sysctl net.ipv4.ip_unprivileged_port_start=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查容器是否正在运行:
podman ps
# podman ps a282b0c2ad3d localhost/mysysd:latest /sbin/init 15 seconds ago Up 14 seconds ago 0.0.0.0:80->80/tcp mysysd_runCopy to Clipboard Copied! Toggle word wrap Toggle overflow 测试 Web 服务器:
curl localhost/index.html
# curl localhost/index.html Successful Web Server TestCopy to Clipboard Copied! Toggle word wrap Toggle overflow