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:用于限制容器的网络带宽。

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

相关推荐
倔强的石头106几秒前
【Linux指南】文件系统基础操作与路径管理
linux·运维·服务器
TDengine (老段)37 分钟前
TDengine 快速体验(Docker 镜像方式)
大数据·数据库·物联网·docker·时序数据库·tdengine·涛思数据
中科三方1 小时前
如何通过DNS解析实现负载均衡?有哪些优势?
运维·负载均衡
安科瑞刘鸿鹏1 小时前
双碳时代,能源调度的难题正从“发电侧”转向“企业侧”
大数据·运维·物联网·安全·能源
小呆瓜历险记1 小时前
ubuntu 22.04搭建SOC开发环境
linux·运维·ubuntu
码农101号1 小时前
Linux中shell流程控制语句
linux·运维·服务器
聪明小萝卜2 小时前
无法与IP建立连接,未能下载VSCode服务器
运维·服务器
JuiceFS2 小时前
深度解析 JuiceFS 权限管理:Linux 多种安全机制全兼容
运维·后端
暗夜潜行2 小时前
ubuntu + nginx 1.26 + php7.4 + mysql8.0 调优
linux·运维·ubuntu
IU宝2 小时前
Linux下基础IO
linux·运维·服务器