Docker原理解析

谈到Docker,就不得不先谈谈Moby Project(http://mobyproject.org)。在DockerCon17上,Docker发布了新的开源项目: the Moby Project。而原来在Github上托管的docker也随之变为Moby(GitHub地址: https://github.com/moby/moby)。

1、The Moby Project

引用GitHub上对Moby的定义,Moby Project是: A collaborative project for the container ecosystem to assemble container-based systems.

Moby Project的建立,是“An effort to decentralize and decompose what used to be known as the Docker Engine into smaller components. Docker (the product) is now a consumer of Moby components.”,而Docker作为一个开源产品将依然存在,用户依然可以从docker官网下载Docker产品使用。

Moby Project遵循如下原则:

  • Modular: the project includes lots of components that have well-defined functions and APIs that work together.
  • Batteries included but swappable: Moby includes enough components to build fully featured container system, but its modular architecture ensures that most of the components can be swapped by different implementations.
  • Usable security: Moby provides secure defaults without compromising usability.
  • Developer focused: The APIs are intended to be functional and useful to build powerful tools. They are not necessarily intended as end user tools but as components aimed at developers. Documentation and UX is aimed at developers not end users.

2、容器的概念

Docker的思想源于虚拟机和集装箱,虚拟机是对整个机器的虚拟化,包括硬件和操作系统,这样做的结果是虚拟机本身会耗费服务器大量资源,在虚拟机里面再部署应用,则是“杀鸡用牛刀”;而集装箱的思想则是打包,将应用隔离打包,则无论将集装箱放到哪里,其内部运行环境能够保持一致,从而不受外界环境影响,保持应用运行的环境一致性。两者结合,则可以保持Docker相对虚拟机的轻量化以及应用环境的不变性。

3、Docker的打包:进程隔离

谈到进程隔离,我们先来看看linux实现进程的概念(新的Mody Project中,对于容器的建立基础已不再仅仅局限于Linux,其已经在开始探索基于Windows等其它系统的容器,并已卓有成效),在Linux中建立新的进程的步骤:

  • 在内存中从父进程fork出一个子进程,设置该子进程的pid,parent_pid以及其特有的内容

Docker有自己的namespace,从而与外界隔离(Linux系统内实现进程隔离的基本方法,参见http://man7.org/linux/man-pages/man7/namespaces.7.html),其实现的基本步骤如下:

  • 自定义自己的root根目录,例如,重新定义root跟目录为/home/mydir/,则该文件地址被映射为 "/"
  • 将自身pid 映射为0,且看不到其它任何的pid,这样,该pid成为容器内唯一存在pid,看起来就像一个新系统
  • 用户名隔离,例如,将用户名设置为“root”
  • hostname隔离,可以另取一个hostname,成为新进程的hostname
  • IPC隔离,隔离掉进程间通信
  • 网络隔离,隔离掉进程和主机间的网络

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源容器化平台,它可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,以实现跨平台的部署和运行。下面是Docker底层原理的简要介绍: 1. 命名空间(Namespaces):Docker使用Linux的命名空间功能来实现容器之间的隔离。命名空间可以将系统资源(如进程、网络、文件系统等)隔离开,使得每个容器都拥有自己独立的资源视图。 2. 控制组(Control Groups):Docker利用Linux的控制组功能来限制和隔离容器对系统资源的使用。控制组可以对CPU、内存、磁盘IO等资源进行限制和分配,确保容器之间不会相互干扰。 3. 联合文件系统(Union File System):Docker使用联合文件系统来构建容器镜像。联合文件系统允许将多个文件系统挂载到同一个目录下,形成一个统一的文件系统视图。这样,Docker可以通过层叠的方式来管理和共享镜像的文件系统,实现镜像的高效复用和快速部署。 4. 容器镜像(Container Image):Docker容器镜像是一个只读的模板,包含了运行一个容器所需的所有文件和配置。镜像可以通过Dockerfile定义,其中包括了构建镜像所需的步骤和指令。镜像可以通过Docker Hub或私有仓库进行分享和分发。 5. 容器运行时(Container Runtime):Docker使用容器运行时来创建和管理容器。常用的容器运行时包括Docker Engine、containerd等。容器运行时负责解析容器镜像、创建容器、启动进程、管理容器的生命周期等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值