docker容器技术基础入门(转载)
docker容器技术基础入门
主机级虚拟化
type-I: VMware ESXi/XenServer/PVE/
主机硬件 -> hypervisor -> 创建使用虚拟机
type-II: VMware Workstation/VirtualBox
主机硬件 -> host os -> vmm -> 创建使用虚拟机
主机级别虚拟化分为两种类型:Type-I(裸机虚拟化)和Type-II(托管虚拟化),以下是两种类型的代表产品:
Type-I 虚拟化(Bare-Metal Virtualization)
Type-I 虚拟化直接运行在硬件之上,无需操作系统,性能更高且适用于企业级环境。
代表产品:
-
VMware ESXi
- 企业级虚拟化解决方案,广泛应用于数据中心。
-
Microsoft Hyper-V (Server Core Mode)
- 微软提供的企业虚拟化平台,作为 Windows Server 的组件或独立版本。
-
Citrix Hypervisor (原 XenServer)
- 开源 Xen 虚拟化技术的企业版本,广泛用于服务器虚拟化。
-
KVM (Kernel-based Virtual Machine)
- 基于 Linux 内核的开源虚拟化技术,性能强大,适合云计算环境。
-
Oracle VM
- 基于 Xen 的 Oracle 企业虚拟化产品。
-
Proxmox VE
- 开源虚拟化解决方案,集成了 KVM 和容器技术。
Type-II 虚拟化(Hosted Virtualization)
Type-II 虚拟化运行在宿主操作系统之上,适用于桌面用户,方便快捷,但性能稍逊。
代表产品:
-
VMware Workstation/Player
- 桌面虚拟化软件,支持多操作系统开发和测试环境。
-
Oracle VirtualBox
- 开源跨平台虚拟化软件,适合个人开发者和轻量级测试环境。
-
Microsoft Hyper-V (GUI Mode)
- 在 Windows 10/11 Pro 和 Enterprise 上可用的托管虚拟化平台。
-
Parallels Desktop
- 专为 macOS 用户设计,支持运行 Windows、Linux 等操作系统。
-
QEMU
- 开源虚拟化解决方案,可与 KVM 配合使用,也可独立运行。
-
Linux Containers (LXC)
- 虽非传统意义上的虚拟化工具,但常与 Type-II 虚拟化进行对比,适合轻量级隔离。
区别总结:
- Type-I 更适合企业环境,强调性能和资源优化,适用于大规模虚拟化部署。
- Type-II 适合个人开发和测试,强调易用性和跨平台支持。
如果你正在寻找某种特定产品的使用建议或对比,我可以提供更多详细信息!
容器级虚拟化
CGroups:Control Groups
控制容器使用cpu、内存资源
Namespaces:名称空间,
隔离各容器资源
LXC:LinuX Container
lxc-create:快速创建一个用户空间
template:基于模板完成安装过程,创建名称空间
LXC
Linux Containers 的缩写,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器,内含应用软件本身的代码,以及所需要的操作系统核心和库。
Namespaces
namespace:名称空间,在内核空间实现多个隔离IPC,User,Net等,原生支持 (UTS,Mount,IPC,PID,User,Net)
UTS namespace 主机名与域名
Mount namespace 挂载点
IPC namespace 信号量、消息队列和共享内存
PID namespace 进程号
User namespace 用户和组
Network namespace 网络设备、网络栈、端口等
namespace | 系统调用参数 | 隔离内容 | 内核版本 |
---|---|---|---|
UTS | CLONE_NEWUTS | 主机名与域名 | 2.6.19 |
IPC | CLONE_NEWIPC | 信号量、消息队列和共享内存 | 2.6.19 |
PID | CLONE_NEWPID | 进程编号 | 2.6.24 |
Network | CLONE_NEWNET | 网络设备、网络栈、端口等 | 2.6.29 |
Mount | CLONE_NEWNS | 挂载点(文件系统) | 2.4.19 |
User | CLONE_NEWUSER | 用户和用户组 | 3.8 |
cgroups
cgroups:控制组群(英语:control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源
blkio :块设备 IO
cpu : CPU
cpuacct : CPU 资源使用报告
cpuset :多处理器平台上的 CPU 集合
devices :设备访问
freezer :挂起或恢复任务
memory :内存用量及报告
perf_event :对 cgroup 中的任务进行统一性能测试
net_cls : cgroup 中的任务创建的数据报文的类别标识符
docker
- docker中的容器引擎
lxc -> libcontainer -> runC
早起使用lxc技术进行二次封装
使用lxc-create创建用户空后,连接docker镜像仓库(不是使用template启动),使用images(镜像)启动容器
一个容器内只运行一个进程
后期弃用了lxc,
编写了libcontainer实现lxc功能,
后续标准化为runC :runcontainer
runcontainer:新版docker容器运行引擎
隔离,安全
分层构建,联合挂载层
容器编排技术
machine + swarm + compose
mesos + marathon
kubernetes -> k8s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2018-04-28 从任意长度的可迭代对象中分解元素
2018-04-28 将序列分解为单独的变量