Docker 特性与原理
首先看看Docker提供了哪些特性:
交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell 文件系统隔离:每个进程容器运行在完全独立的根文件系统里 写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间 资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置从以上特性分别看实现原理
1. 交互式Shell
首先我们允许一个交互式的容器
$docker run -i -t <image name> /bin/bash
这样就建立了一个到容器内的交互式连接,看到的是如下的命令行:
root@df3880b17407:/#
这里我们启动了一个容器,以bash作为其根进程.
root@df3880b17407:/# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 18164 2020 ? S 06:06 0:00 /bin/bash
可以看到,在这个容器中,bash 的 PID为 1,而实体机平常情况下,是这样的:
root@ubuntu:~# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 24716 2612 ? Ss Sep04 0:01 /sbin/init
大家都知道,所有进程的共同祖先都是 PID=1的进程
所以在容器中,所有以后创建的进程都是通过/bin/bash 创建的,PID=1的 bash是容器中所有进程的祖先理解了这点后,对容器的理解就很简单了.
2. 文件系统隔离
对于一个正在运行的容器,其文件系统都是一个从根目录开始的虚拟文件系统,在容器中看到的是这样的:
root@df3880b17407:/# ll /total 68drwxr-xr-x 2 root root 4096 Jul 22 22:51 bindrwxr-xr-x 2 root root 4096 Apr 10 22:12 bootdrwxr-xr-x 3 root root 4096 Jul 22 22:49 devdrwxr-xr-x 85 root root 4096 Sep 5 06:49 etcdrwxr-xr-x 2 root root 4096 Apr 10 22:12 homedrwxr-xr-x 16 root root 4096 Jul 22 22:50 libdrwxr-xr-x 2 root root 4096 Aug 12 03:30 lib64drwxr-xr-x 2 root root 4096 Jul 22 22:48 mediadrwxr-xr-x 2 root root 4096 Apr 10 22:12 mntdrwxr-xr-x 2 root root 4096 Jul 22 22:48 optdr-xr-xr-x 356 root root 0 Sep 5 06:06 procdrwx------ 2 root root 4096 Jul 22 22:51 rootdrwxr-xr-x 7 root root 4096 Sep 5 07:23 rundrwxr-xr-x 2 root root 4096 Aug 12 03:30 sbindrwxr-xr-x 2 root root 4096 Jul 22 22:48 srvdr-xr-xr-x 13 root root 0 Sep 5 06:06 sysdrwxrwxrwt 2 root root 4096 Sep 5 06:55 tmpdrwxr-xr-x 20 root root 4096 Sep 5 06:11 usrdrwxr-xr-x 19 root root 4096 Sep 5 06:11 var
其实真是情况是这样的,容器中的文件系统都是挂载到了真是系统中的一个目录下面.
/var/lib/docker/containers/<image-long-id>/rootfs
这个配置是怎么来的呢,其实所有容器的管理都是通过lxc来管理的,lxc的配置文件放在
/var/lib/docker/containers/<image-long-id>/config.lxc
文件中有字段表示容器挂载到哪个文件目录, 比如我的是这样的:
新闻热点
疑难解答