认识docker

栏目: 服务器 · Linux · 发布时间: 6年前

内容简介:本文学习总结自进程:程序运起来后的计算机执行环境的总和。容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。

本文学习总结自 极客时间 深入剖析Kubernetes

进程:程序运起来后的计算机执行环境的总和。

容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。

Cgroups 技术是用来制造约束的主要手段,而Namespaces 技术则是用来修改进程视图的主要方法。

Namespace

参考: man7 namespaces

将系统资源进行了一层抽象封装,使得在不同Namespaces 下的进程看到的系统资源都是相互独立的。

Linux提供的Namespaces:

  • Cgroup:Cgroup root directory
  • IPC:System V IPC, POSIX message queues
  • Network:Network devices, stacks, ports, etc
  • Mount:Mount points
  • PID:Process IDs
  • User:User and group IDs
  • UTS:Hostname and NIS domain name

Namespaces API系统调用:

  • clone:创建新的进程,并且可以将新的进程加入到新创建的Namespaces中
  • setns:将当前进程加入到已存在的Namespace中
  • unshare:将当前进程移动到新创建的Namespace中

CGROUP

参考:

Linux CGroups全称Linux Control Groups, 是 Linux 内核的一个功能,用来控制与监控一个进程组群的资源(如CPU、内存、磁盘输入输出等)。

内核的cgroup 接口暴露为cgroupfs的伪文件系统。

详细介绍文章: Linux的资源限制功能cgroups v1和cgroups v2的详细介绍

IPC

IPC namespace 用来隔离 System V IPC 对象和 POSIX message queues。

Mount

新创建Mount namespace后,需要把对应目录重新挂载,否则看到的会是从宿主机继承过来的挂载点。

UTS

UTS namespaces 提供2个系统标识的隔离:hostname 和 NIS domain name。这些标识可以通过sethostname(2)和setdomainname(2)设置,通过uname(2),gethostname(2)和getdomainname(2)获取。

NID domain name: 第十四章、账号控管: NIS 服务器

容器镜像

挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统。又名rootfs。通过联合文件系统(Union File System)实现,其最主要的功能是将多个不同位置的目录联合挂载(union mount)到同一个目录下。

容器镜像是分层的:

  • 只读层:包含多个层
  • init层:它是一个以“-init”结尾的层,夹在只读层和读写层之间。Init 层是 Docker 项目单独生成的一个内部层,专门用来存放 /etc/hosts、/etc/resolv.conf 等信息。
  • 可读写层:只有一层,在没有写入文件之前,这个目录是空的。而一旦在容器里做了写操作,修改产生的内容就会以增量的方式出现在这个层中。为了实现删除只读层文件的操作,AuFS 会在可读写层创建一个 whiteout 文件,把只读层里的文件“遮挡”起来。

容器启动主要步骤:

  1. 启用 Linux Namespace 配置;
  2. 设置指定的 Cgroups 参数;
  3. 切换进程的根目录(Change Root)。

Dockerfile中CMD和ENTRYPOINT的使用区别: understand-how-cmd-and-entrypoint-interact

数据卷

Volume 机制,允许你将宿主机上指定的目录或者文件,挂载到容器里面进行读取和修改操作。通过Linux的绑定挂载机制实现,它的主要作用就是,允许你将一个目录或者文件,而不是整个设备,挂载到一个指定的目录上。并且,这时你在该挂载点上进行的任何操作,只是发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响。

绑定挂载实际上是一个 inode 替换的过程。在 Linux 操作系统中,inode 可以理解为存放文件内容的“对象”,而 dentry,也叫目录项,就是访问这个 inode 所使用的“指针”。

docker commit是发生在宿主机空间的镜像操作,由于 Mount Namespace 的隔离作用,宿主机并不知道绑定挂载的存在。所以,在宿主机看来,容器中可读写层的通过Volume 机制挂载的目录始终是空的。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithms in Python

Data Structures and Algorithms in Python

Michael T. Goodrich、Roberto Tamassia、Michael H. Goldwasser / John Wiley & Sons / 2013-7-5 / GBP 121.23

Based on the authors' market leading data structures books in Java and C++, this book offers a comprehensive, definitive introduction to data structures in Python by authoritative authors. Data Struct......一起来看看 《Data Structures and Algorithms in Python》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具