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