1. 相比较虚拟机,容器有哪些技术优势?
答:轻量级:容器共享宿主操作系统的内核,比虚拟机更轻量级,启动速度更快,资源占用更少。
高效性:容器可以快速部署和扩展,适合于微服务架构和持续集成/持续部署(CI/CD)流程。
一致性:容器镜像提供了环境的一致性,使得在不同环境中的部署更加可靠和可重复。
隔离性:虽然容器共享宿主操作系统内核,但使用了 Linux 内核的各种隔离技术,能有效隔 离应用进程,提高安全性。
易管理性:容器可以通过编排工具(如 Kubernetes)集中管理,简化了应用的部署、更新和 扩展过程。
2. 容器镜像是什么?
答:容器镜像是一个轻量级、独立、可执行的软件包;包含运行应用所需的所有内容:代码、运 行时环境、库、环境变量和配置文件等。容器镜像是容器的静态模板,用来创建和运行容器 实。
3. RHEL 提供了哪些容器工具?
答:Docker:用于创建、部署和运行容器的开源平台。
Podman:一个容器和镜像引擎,可以直接替代Docker,并提供了更强的安全性和命令行工 具的兼容性。
4. 根容器和无根容器有什么区别?
答:根容器:运行在操作系统的用户空间,需要使用特权访问系统资源,如访问宿主操作系统的 内核。
无根容器:在普通用户空间下运行,不需要特权访问,通过用户命名空间和其他技术提供了类 似根容器的隔离和安全性,但更安全且不影响宿主系统。
5. 请谈一下容器镜像(image)和仓库/注册表 (registry)的关系。
答:容器镜像是包含应用及所有依赖的不可变模板,是容器运行的 “原材料”,类似一个打包好的 软件安装包。
仓库 / 注册表是专门存储和分发镜像的平台,相当于镜像的 “存储中心” 和 “分发枢纽”。
容器镜像通过标签(tag )与仓库相关联,标签通常包括版本信息和其他元数据,使得镜像可 以被唯一标识和获取。二者协同保障了容器应用的高效分发和可靠运行。
6. 请写出以 shell 交互方式运行容器的命令。
答:podman run -it <image_name_or_id> /bin/bash
7. 请说明如何配置容器仓库。
答:可以使用podman login命令来认证并配置镜像仓库。
8. 如何检查仓库中的和本地的容器镜像?
答:查看仓库中的镜像:podman inspect <image_name>
查看本地镜像:podman images
9. 如何移除本地镜像?
答:使用 podman rmi <image_name_or_id>
10. 使用容器时,如何将主机端口和容器端口进行映射?
答:使用 -p 参数可以将主机的端口映射到容器的端口。
podman run -p <host_port>: <container_port> <image_name>
11. 在运行容器时如何给容器传递参数?
答:podman run <image_name> <command> <args>
12. 写出管理容器时的常见命令,比如查看、 终止、 删除、 重启等。
答:查看容器:podman ps
终止容器:podman stop <container_id>
删除容器:podman rm <container_id>
重启容器:podman restart <container_id>
13. 如何在容器中运行业务系统的命令?
答:用podman exec 命令可以在运行的容器中执行任意命令。
podman exec -it <container_id> <command>
14. 如何为容器提供持久存储?
答:可以使用Podman 的数据卷(Volumes)功能,或者直接挂载主机文件系统中的目录到容器内 部的路径来实现持久存储。
创建数据卷:podman volume create <volume_name>
挂载数据卷:podman run -v <host_path>:<container_path> <image_name>
15. 如何进行配置才能使容器在 Linux 启动时自动运行?
答:1)创建一个.service文件,比如mycontainer.service。
2)在文件中定义容器的启动命令,例如使用docker run或podman run。
3)将文件放置在/etc/systemd/system/ 目录下。
4)使用systemctl命令重新加载(daemon-reload)并启动(start 或 restart)该服务。