运行容器的知识点
目录
5. 请谈一下容器镜像(image)和仓库/注册表 (registry)的关系。
12. 写出管理容器时的常见命令,比如查看、 终止、 删除、 重启等。
15.如何进行配置才能使容器在 Linux 启动时自动运行?
1. 相比较虚拟机,容器有哪些技术优势?
轻量级:容器共享主机内核,无需独立操作系统,启动快(秒级)、资源占用低(内存、磁盘开销小)。
可移植性:打包应用及依赖,在不同环境(开发、测试、生产)中一致运行,解决 “环境不一致” 问题。
高效部署:镜像体积小,分发和部署速度快,支持快速扩缩容。
资源隔离:通过 namespace 和 cgroups 实现进程级隔离,兼顾隔离性和资源利用率(优于虚拟机的硬件级隔离)。
2. 容器镜像是什么?
容器镜像是一个只读的模板,包含运行应用所需的代码、运行时、库、环境变量和配置文件。它是容器的 “蓝图”,容器基于镜像创建,且镜像可被多次复用、分发。镜像采用分层存储(Layer),每层对应一次修改,可共享重复层,节省存储空间。
3. RHEL 提供了哪些容器工具?
Podman:无守护进程(daemonless)的容器引擎,兼容 Docker CLI,支持 root 和无根容器。
Buildah:用于构建容器镜像的工具,可独立于容器引擎运行,支持多格式镜像。
Skopeo:用于管理容器镜像的工具,支持镜像复制、检查、删除(跨仓库操作)。
CRI-O:专为 Kubernetes 设计的容器运行时,兼容容器运行时接口(CRI)。
4. 根容器和无根容器有什么区别?
|
对比项 |
根容器(Root Container) |
无根容器(Rootless Container) |
|
运行权限 |
以主机 root 用户运行 |
以普通用户(非 root)运行 |
|
安全隔离 |
隔离性较弱,容器内 root 等效主机 root |
隔离性更强,容器内 root 权限被限制 |
|
资源限制 |
可直接访问主机资源,限制配置较简单 |
受用户 namespace 限制,部分功能需额外配置 |
|
适用场景 |
需高权限操作(如挂载系统目录) |
普通应用部署,优先考虑安全性 |
5. 请谈一下容器镜像(image)和仓库/注册表 (registry)的关系。
容器镜像是应用的静态打包形式,仓库 / 注册表(Registry)是存储和分发镜像的中心化服务。
关系类似:镜像 ≈ 软件安装包,仓库 ≈ 软件仓库(如 yum 仓库)。
流程:本地构建镜像后,可推送到仓库(push),其他主机从仓库拉取(pull)镜像并运行容器,实现镜像的共享和分发。
6. 请写出以 shell 交互方式运行容器的命令。
podman run -it --rm <镜像名> /bin/bash
7. 请说明如何配置容器仓库。
(1)添加仓库配置文件:在 /etc/containers/registries.conf 中定义仓库地址。
(2)配置镜像拉取策略:通过 unqualified-search-registries 指定默认搜索仓库
(3)私有仓库认证:若仓库需认证,使用 podman login <仓库地址> 输入用户名密码,凭据存储在 ~/.config/containers/auth.json。
8. 如何检查仓库中的和本地的容器镜像?
查看本地镜像:podman images # 列出所有本地镜像
查看仓库中的镜像:podman search <镜像名> # 搜索仓库中的镜像(默认Docker Hub)
skopeo list-tags docker://<仓库地址>/<镜像名> # 列出指定仓库的镜像标签。
9. 如何移除本地镜像?
podman rmi <镜像ID或名称> # 移除指定镜像
podman rmi -f <镜像ID或名称> # 强制移除(即使有容器依赖)
podman image prune # 清理无标签(dangling)的镜像
10. 使用容器时,如何将主机端口和容器端口进行映射?
运行容器时通过 -p 或 --publish 指定映射:
podman run -p <主机端口>:<容器端口> <镜像名>
# 示例:将主机8080端口映射到容器80端口
podman run -p 8080:80 nginx
11. 在运行容器时如何给容器传递参数?
命令行参数:直接在镜像名后添加,作为容器内启动命令的参数。
podman run <镜像名> <参数1> <参数2>
环境变量:通过 -e 传递,
12. 写出管理容器时的常见命令,比如查看、 终止、 删除、 重启等。
查看容器:
运行中:podman ps
所有(包括停止的):podman ps -a
终止容器:podman stop <容器ID或名称>
删除容器:podman rm <容器ID或名称>(需先停止,或加 -f 强制删除)
重启容器:podman restart <容器ID或名称>
暂停 / 恢复容器:podman pause <容器ID> / podman unpause <容器ID>
13. 如何在容器中运行业务系统的命令?
(1)进入运行中的容器执行:podman exec -it <容器ID或名称> <命令>
(2)启动容器时直接运行命令:podman run <镜像名> <命令>
14. 如何为容器提供持久存储?
绑定挂载(Bind Mount):将主机目录挂载到容器,数据保存在主机:
podman run -v <主机目录>:<容器目录> <镜像名>
命名卷(Named Volume):由容器引擎管理的存储卷,独立于主机目录结构:
podman volume create myvolume # 创建卷
podman run -v myvolume:<容器目录> <镜像名> # 挂载卷到容器
15.如何进行配置才能使容器在 Linux 启动时自动运行?
通过 --restart 策略配置容器自启动(适用于 Podman):
podman run --restart=always --name myservice <镜像名>
其他策略:on-failure(失败时重启)、unless-stopped(除非手动停止,否则重启)。
对于已创建的容器,可通过 podman update --restart=always <容器ID> 修改策略。
更多推荐

所有评论(0)