1.容器的概念及与虚拟机的区别。
容器是一种轻量级的操作系统层面的虚拟化技术,它为应用软件及其依赖组件提供一个独立的运行环境,与其他容器和宿主机环境隔离。容器共享宿主机的操作系统内核,无需为每个容器单独安装操作系统,因此具有更轻量、更高效的特性。
虚拟机则是在物理机上运行完整的操作系统实例,每个虚拟机都有自己的操作系统内核和应用程序。虚拟机之间完全隔离,但资源消耗较大,启动速度较慢。
区别:
启动速度: 容器秒级,虚拟机分钟级
复杂度: 容器基于内核namespace技术,对现有基础设施侵入较少;虚拟机部署复杂度较高,且很多基础设施不兼容
执行性能: 容器性能几乎与原生一致;虚拟机性能较差
可控性: 容器依赖简单,与进程无本质区别;虚拟机依赖复杂,存在跨部门问题
体积: 容器MB级别;虚拟机GB级别
并发性: 容器可以启动几百几千个;虚拟机最多几十个
资源利用率: 容器高;虚拟机低
2.容器化的关键技术及其优势是什么?
关键技术:
命名空间 (Namespaces): 实现容器之间的资源隔离
控制组 (Cgroups): 限制容器对资源的访问
切根 (chroot): 改变程序运行时的根目录位置
容器镜像: 包含应用及其依赖组件,采用分层存储
容器运行时引擎: 例如 Docker, rkt, Hyper, CRI-O
容器编排工具: 例如 Kubernetes, Docker Swarm, Apache Mesos, CoreOS Fleet
优势:
敏捷开发: 轻量级的打包方式,提高开发效率
版本管理: 可追踪、记录、生成不同版本,方便版本控制
计算环境可移植: 容器封装了应用依赖,可在不同环境中迁移
标准化: 基于开放标准设计,具有良好兼容性
安全性: 容器间进程相互独立,提高安全性
弹性伸缩: 可通过编排工具快速进行资源扩容
高可用性: 可及时发现节点变化并进行调整
管理便利: 通过简单命令即可管理容器
3.简述Docker的系统架构及基本使用流程。
Docker 架构:
Docker daemon (守护进程): 负责管理 Docker 容器和镜像
Docker client (客户端): 与 Docker daemon 交互,发送命令
Docker registry (镜像仓库): 存储和分发 Docker 镜像
Docker image (镜像): 包含应用及其依赖组件
Docker container (容器): 运行中的 Docker 镜像实例
使用流程:
应用程序开发: 开发应用程序代码
编写 Dockerfile: 定义 Docker 镜像构建过程
构建 Docker 镜像: 使用 Dockerfile 构建镜像
发布 Docker 镜像: 将镜像推送到 Docker registry
下载并运行 Docker 镜像: 从 Docker registry 下载镜像并启动容器
4.Docker有哪些自身局限性?
安全隐患: 共享内核可能存在安全风险
分布式应用的容器化: 需要额外的网络配置和管理
运维体系的改变: 需要学习新的运维知识
5.Rkt容器与Docker有哪些差别?
标准化尝试: Rkt 旨在推动容器标准化,支持 AppC 规范
安全性: Rkt 更注重安全性,例如使用 AppArmor 进行安全加固
可组合性: Rkt 支持将多个容器组合成 Pod 运行
使用方式: Rkt 使用命令行界面,而 Docker 提供更友好的图形界面
社区支持: Docker 社区更成熟,生态更完善
6.Garden容器是如何实现资源控制的?
Garden 使用以下组件实现资源控制:
Namespaces: 实现容器之间的隔离
ResourceControl: 限制容器对 CPU、内存等资源的访问
NetworkingFacilities: 管理容器的网络连接
7.当前比较流行的容器技术有哪些?各自都具有什么特点?
Docker: 最流行的容器引擎,功能完善,生态丰富
rkt (Rocket): 注重安全性和标准化,支持 AppC 规范
Kata Containers: 解决容器共享内核的安全问题,每个容器运行在轻量级虚拟机中
Garden: Cloud Foundry 使用的容器技术,提供可靠的容器管理功能