第 6 章 将软件添加到 UBI 容器中
红帽通用基础镜像(UBI)是从 RHEL 内容的子集构建的。UBI 还提供了 RHEL 软件包的一个子集,其可以免费安装并与 UBI 一起使用。要对正在运行的容器添加或更新软件,您可以使用包含 RPM 软件包和更新的 DNF 存储库。UBI 提供了一组预先构建的语言运行时容器镜像,如 Python、Perl、Node.js、Ruby,等等。
要将 UBI 存储库中的软件包添加到正在运行的 UBI 容器中:
-
在 UBI init 和 UBI 标准镜像中,使用
dnf
命令 -
在 UBI 最小镜像上,请使用
microdnf
命令
直接在运行的容器中安装和使用软件包会临时添加一些软件包。更改不会保存在容器镜像中。要使软件包更改持久,请参阅 使用 Buildah 从 Containerfile 构建镜像 部分。
6.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),并在容器启动时启动systemd
init 服务(/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 1
Copy 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 mysysd
Copy 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 mysysd
Copy 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=80
Copy 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_run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 测试 Web 服务器:
curl localhost/index.html
# curl localhost/index.html Successful Web Server Test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow