Docker所代表的Container技术,是对内核的Cgroups、namespace等内容的使用.

Linux Container=lxc

wKiom1jAprzwVHaOAAFyK4UeqDY660.png

借助BootZdocker可以实现在Mac和Windows上运行


CGroups限制容器的资源使用

Namespace机制,实现荣期间的隔离

chroot,文件系统的隔离


Linux内核提供的限制,记录和隔离进程组所使用的资源,由Google的工程师提出,后来被整合到kernel.

通过不同的子系统(blkio,cpu,cpuacct等)来实现对不同资源使用的控制和记录。


pid,容器有自己独立的进程表和1号进程

net,容器有自己独立的network info

ipc,在ipc通信时候,需要加入额外信息来标示进程

mnt,每个容器有自己唯一的目录挂在

utc,每个容器有独立的hostname和domain


wKiom1jBLNeTC5h_AAD8jL8L-fk762.png

adcanced multi layer unification filesystem

可以实现把多个不同目录的内容合并在一起

允许read-only和read-write目录并存


docker使用aufs来实现分层的文件系统的管理

只读部分定义为p_w_picpath,可写部分是container

p_w_picpath类似一个单链表系统,每个p_w_picpath包含一个指向parent p_w_picpath的指针

没有parent p_w_picpath的p_w_picpath是base p_w_picpath


docker pull {p_w_picpath name}

如果不指定tag的话,会把p_w_picpath的所有的tags都会download下来

wKioL1jB4hKjMtwLAAbB4PinB6A152.png

wKiom1jB4hPgTePxAAHmO-N3V6g893.png

wKioL1jB4haD_MvFAAZY5ICtaVE941.png

wKiom1jB4hnQ0ipLAATQ8VJM2Yo471.png


使用RUN来运行一个DOcker Container

网络设置

Volume 共享文件系统

使用Link来连接两个容器


wKioL1jB5Aazt1IoAAD-3kBdCoo185.png

对于不存在的p_w_picpath,Docker会自动去Registry里面下载对应的p_w_picpath,然后再运行Container

wKiom1jB5ReiYBzFAACMDGnHfYg954.png

wKioL1jB5RiRNpmaAAC7hHe86jc188.png


wKiom1jB6iCjwHIWAACEO1z1xSU280.png

wKioL1jB6l7xpc3ZAADIuxCPbxU826.png


通过Logs命令可以看到Container中Command所指向进程的STDOUT,STDERR数据

通过-e参数,可以在运行container的时候添加系统环境变量