一, 容器隔离
1,linux namespace隔离
-
namespace 是 linux 中用来隔离进程的手段。容器就是使用该技术来进行隔离的
-
当前 Linux一共实现了7 种不同类型的 Namespace
-
通过 cd /proc/19271(进程id)进入该进程目录的所有文件
- 在ns目录下可以查看该进程所有的namespace相关的信息
- 在ns目录下可以查看该进程所有的namespace相关的信息
2,docker资源限制cgroups
-
cgroups 是 linux 用来限制进程使用资源的手段。容器也是利用这个技术进行资源的隔离
-
mount -t cgroups 查看当前系统的 cgroups文件
-
设置ngnix资源为2核512G的命令:docker run --name nginx -d -m 512m --cpus=2 nginx
-
在对应的设置cpu的文件下的docker目录中,可以看到最新的设置
-
tasks文件可以查所有nginx进程ID
二, 容器的故障注入
-
使用
docker inspect image_name
命令查询当前容器的 PID
-
使用
nsenter -t pid -n
切换到容器的网络名称空间(-n 表示网络名称空间)
-
使用
iptables
/tc
等命令进行故障注入
三,docker 镜像分层设计
-
每个镜像都是由多个层组成的,每一层都可以复用。(比如dockerfile文件的RUN命令,一个命令就是一层)
-
docker每一层都是有缓存的,多次执行的时候未修改的部分会利用缓存。
-
编写 docker 时可以利用分层缓存的特点加速镜像开发的过程。
四,docker联合文件系统
-
联合文件系统(Union File System,Unionfs)是一种分层的轻量级文件系统,它可以把多个目录内容联合挂载到同一目录下,从而形成一个单一的文件系统,这种特性可以让使用者像是使用一个目录一样使用联合文件系统。
-
联合文件系统是 Docker 镜像和容器的基础,它让Docker 可以把镜像做成分层的结构,从而使得镜像的每一层可以被共享。
-
联合文件系统只是一个概念,真正实现联合文件系统才是关键,联合文件系统的实现方案有很多,Docker 中最常用的联合文件系统有三种:AUFS、Devicemapper 和 OverlayFS。
- 视图层:登陆到容器,就是视图层,也是目录联合挂载点
- 容器层:目录可读可写(然后merge给镜像层)
- 镜像层:就是目录和文件,拥有只读权限
五,Docker 镜像设计方法
-
镜像分层设计(基础镜像层 - 语言层java,python等 - APP应用层)
-
优点:节省磁盘空间