erioe
latestuse
DockerBuildFile
由于篇幅所限,这里就不再展开翻译,可参见链接httpdocsdockerioe
latestusebuilder
DockersTrick
WhatDockerNeeds
Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同LXC其并不是一套硬件虚拟化方法无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法理解起来可能并不像VM那样直观。所以我们从虚拟化要docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的。
用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题
隔离性每个用户实例之间相互隔离互不影响。硬件虚拟化方法给出的方法是VMLXC给出的方法是co
tai
er,更细一点是ker
el
amespace
可配额可度量每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPUmemory可以方便实现LXC则主要是利用cgroups来控制资源
移动性用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供s
apshot和image来实现,docker主要利用AUFS实现
安全性这个话题比较大,这里强调是host主机的角度尽量保护co
tai
er。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的然而对于LXC用户的进程是lxcstart进程的子进程只是在Ker
el的
amespace中隔离的因此需要一些ker
el的patch来保证用户的运行环境不会受到来自host主机的恶意入侵dotcloud主要是利用ker
elgrsecpatch解决的
fLi
uxNamespace
s
LXC所实现的隔离性主要是来自ker
el的
amespace其中pid
etipcm
tuts等
amespace将co
tai
er的进程网络消息文件系统和host
ame隔离开。
pid
amespace
之前提到用户的进程是lxcstart进程的子进程不同用户的进程就是通过pid
amespace隔离开的,且不同
amespace中可以有相同PID。具有以下特征
1每个
amespace中的pid是有自己的pid1的进程类似sbi
i
it进程2每个
amespace中的进程只能影响自己的同一个
amespace或子
amespace中的进
程3因为proc包含正在运行的进程,因此在co
tai
er中的pseudofilesystem的
proc目录只能看到自己
amespace中的进程4因为
amespace允许嵌套,父
amespace可以影响子
amespace的进程,所以子
amespace的进程可以在父
amespace中看到,但是具有不同的pid
正是因为以上的特征,所有的LXC进程在docker中的父进程为docker进程,每个lxc
进程具有不同的
amespace。同时由于允许嵌套r