Docker碎碎念

docker和虚拟机的区别

虚拟机(VM)是通过在物理硬件上运行一个完整的操作系统来实现的。

每个虚拟机都有自己的内核、设备驱动程序和用户空间,它们是相互独立且完全隔离的。

虚拟机可以在不同的物理服务器之间迁移,因为它们是以整个操作系统作为单元进行迁移的。

而容器则是在单个操作系统实例中运行的,所有容器共享相同的内核。

容器可以更快地启动和停止,并且占用更少的系统资源。

容器之间的隔离是通过命名空间和控制组等内核特性来实现的。

docker共享的linux内核,这个内核中有些什么东西呢?

Docker容器共享宿主机的Linux内核,这意味着容器中运行的应用程序和服务与宿主机共享同一个内核。这种共享内核的设计可以提供更高的性能和更低的资源消耗。

Linux内核是开源的,拥有庞大的代码库和功能丰富的特性。一些常见的内核组件和功能包括:

  1. 进程管理:内核负责管理系统中的进程和线程,包括创建、调度、终止等操作。

  2. 内存管理:内核分配和管理系统的物理内存和虚拟内存,包括页面置换、内存映射等。

  3. 文件系统:内核提供文件系统的支持,包括磁盘驱动、文件缓存、文件访问权限等。

  4. 网络协议栈:内核实现了各种网络协议,如TCP/IP、UDP等,以便应用程序进行网络通信。

  5. 设备驱动程序:内核提供了对硬件设备的驱动支持,包括网卡、磁盘控制器、USB设备等。

  6. 系统调用接口:内核定义了应用程序与内核之间的接口,通过系统调用来访问内核功能。

  7. 安全和权限管理:内核维护系统的安全性和权限控制,包括文件访问权限、进程访问控制等。

  8. 调度器:内核负责调度系统中的进程和线程,以便合理地分配CPU时间片。

这只是一些常见的内核组件和功能,实际上Linux内核非常复杂并且具有丰富的特性。Docker利用宿主机的Linux内核,并通过命名空间和cgroups等内核特性来实现容器的隔离和资源管理。

docker的资源控制

在容器中,可以使用资源限制和控制组(cgroups)来限制硬件资源的使用。

控制组是Linux内核提供的一种机制,用于将进程组织成一个层次结构,并为每个组设置资源使用限制。通过控制组,可以对CPU、内存、网络带宽等资源进行限制和分配。

Docker利用了控制组来实现对容器的资源管理。通过在创建容器时设置资源限制参数,可以限制容器使用的CPU核心数、内存量、磁盘空间等。这样就能够确保容器不会过度占用硬件资源,从而保证系统的稳定性和性能。

例如,可以使用以下参数来限制容器的资源使用:

  • --cpus:指定容器可以使用的CPU核心数量;

  • --memory:限制容器可以使用的内存量;

  • --blkio-weight:用于限制磁盘I/O的权重;

  • --network:用于限制容器的网络带宽。

通过这些资源限制参数,可以在共享内核的情况下,对每个容器进行资源隔离和控制,以避免某个容器过度占用硬件资源而影响其他容器的正常运行。

相关推荐
fetasty1 天前
rustfs加picgo图床搭建
docker
蝎子莱莱爱打怪2 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
小p3 天前
docker学习7:docker 容器的通信方式
docker
小p3 天前
docker学习5:提升Dockerfile水平的5个技巧
docker
小p3 天前
docker学习3:docker是怎么实现的?
docker
小p4 天前
docker学习: 2. 构建镜像Dockerfile
docker
小p5 天前
docker学习: 1. docker基本使用
docker
蝎子莱莱爱打怪5 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀5 天前
Docker部署Nacos
docker·容器