【RH134 问答题】第 13 章 运行容器
目录
- 相比较虚拟机,容器有哪些技术优势?
- 容器镜像是什么?
- RHEL 提供了哪些容器工具?
- 根容器和无根容器有什么区别?
- 请谈一下容器镜像(image)和仓库/注册表 (registry)的关系。
- 请写出以 shell 交互方式运行容器的命令。
- 请说明如何配置容器仓库。
- 如何检查仓库中的和本地的容器镜像?
- 如何移除本地镜像?
- 使用容器时,如何将主机端口和容器端口进行映射?
- 在运行容器时如何给容器传递参数?
- 写出管理容器时的常见命令,比如查看、 终止、 删除、 重启等。
- 如何在容器中运行业务系统的命令?
- 如何为容器提供持久存储?
- 如何进行配置才能使容器在 Linux 启动时自动运行?
相比较虚拟机,容器有哪些技术优势?
启动更快
,容器启动时间为秒级甚至毫秒级,而虚拟机通常需要几十秒。资源占用更少
,容器共享主机操作系统内核,避免了虚拟机运行完整操作系统的开销。更高的运行密度和效率
,同一硬件上可运行更多容器实例,提升资源利用率。便携性更强
,容器镜像包含应用及依赖,方便在不同环境快速部署和迁移。保证环境一致性
,减少开发、测试和生产环境间的差异。适合自动化和微服务架构
,支持快速扩展和弹性伸缩。
容器镜像是什么?
容器镜像是一个包含应用程序及其运行环境(如代码、依赖库、配置文件和系统工具等)的只读模板
。它用于创建容器实例,保证应用在任何环境中都能以一致的方式运行。容器镜像通常分层构建,便于复用和高效存储。
RHEL 提供了哪些容器工具?
podman
:无守护进程的容器管理工具,用于构建、运行和管理容器和容器组。
buildah
:专注于构建容器镜像的工具,支持灵活的镜像创建和定制。
skopeo
:用于查看、复制和签名容器镜像,支持远程镜像仓库操作。
根容器和无根容器有什么区别?
根容器和无根容器的区别主要在于运行权限
。
根容器
以root
身份运行,拥有更高权限,可以访问和操作系统的底层资源,但安全风险较大。
无根容器
则以普通用户
身份运行,不需要管理员权限,权限受限,更加安全,适合普通用户和多租户环境。
请谈一下容器镜像(image)和仓库/注册表 (registry)的关系。
容器镜像是包含应用及其运行环境的只读模板
,而仓库(registry)则集中存储和管理这些镜像
。用户从仓库拉取镜像到本地运行,也可以将本地镜像推送到仓库共享。
请写出以 shell 交互方式运行容器的命令。
podman run -it <镜像名> /bin/bash
-i 表示保持标准输入(interactive),
-t 分配伪终端(terminal),
/bin/bash 是容器内启动的 shell。
请说明如何配置容器仓库。
在registries.conf
文件中的[registries.search]
配置项中配置容器仓库。
此文件默认在etc/containers/registries.conf
,
用户可在 $HOME/.config/containers/registries.conf
覆盖默认设置。
如何检查仓库中的和本地的容器镜像?
检查远程仓库
中的容器镜像:skopeo inspect
。
检查本地
的容器镜像:podman images
或 podman inspect
。
如何移除本地镜像?
podman rmi <镜像ID或镜像名称>
使用容器时,如何将主机端口和容器端口进行映射?
podman run -p <主机端口>:<容器端口> <镜像>
在运行容器时如何给容器传递参数?
使用 podman run 命令和-e
选项,将环境变量
传递到容器内的进程。
写出管理容器时的常见命令,比如查看、 终止、 删除、 重启等。
查看正在运行的容器:podman ps
查看所有容器(包括已停止的):podman ps -a
查看容器详细信息:podman inspect <容器ID/容器名称>
查看容器日志:podman logs <容器ID/容器名称>
停止容器:podman stop <容器ID/容器名称>
启动容器:podman start <容器ID/容器名称>
重启容器:podman restart <容器ID/容器名称>
删除容器:podman rm <容器ID/容器名称>
查看容器资源使用情况:podman stats <容器ID/容器名称>
如何在容器中运行业务系统的命令?
非交互式:podman exec <容器ID/容器名称> <业务系统命令>
交互式:podman exec -it <容器ID/容器名称> <业务系统命令>
如何为容器提供持久存储?
- 使用数据卷(Volume)
创建数据卷:
podman volume create <卷名>
挂载数据卷运行容器:
podman run -v <卷名>:<容器内路径> <镜像名>
- 挂载主机目录
将主机目录挂载到容器内:
podman run -v <主机目录路径>:<容器内路径> <镜像名>
如何进行配置才能使容器在 Linux 启动时自动运行?
-
使用 podman 生成 systemd 服务单元文件,如:
podman generate systemd --name <容器名> > ~/.config/systemd/user/<服务名>.service
如果加 --new 选项:
podman generate systemd --new --name <服务名> > ~/.config/systemd/user/<服务名>.service
作用:启动时创建新容器,停止时删除容器(适合一次性运行的容器) -
重新加载 systemd 用户配置:
systemctl --user daemon-reload
-
启用服务,使其随系统启动自动运行:
systemctl --user enable <服务名>
-
如果需要用户未登录也自动启动容器,运行命令:
loginctl enable-linger <用户名>
允许该用户的 systemd 服务在无登录状态下持续运行。