Docker核心实现技术

2018-06-07  本文已影响16人  云师兄

从操作系统功能上看,Docker底层依赖的核心技术主要包括linux操作系统的命名空间,控制组,联合文件系统和linux网络虚拟化支持。

基本架构

命名空间

命名空间是linux内核的一个强大特性,每个容器拥有自己单独的命名空间,运行在容器的应用像是在独立的操作系统中一样,保证了容器之间互不影响。

控制组

控制组是linux内核的一个特性,主要用来对共享资源进行隔离,限制,审计等。通过控制分配到具体容器的资源 ,来避免多个容器同时运行时对宿主主机系统的资源竞争。

联合文件系统

联合文件系统支持将文件系统中的修改信息作为一次提交,并层层叠加,是Docker镜像的实现基础。可以通过docker history来查看一个镜像由哪些层组成。
执行docker history hub.c.163.com/public/ubuntu:16.04-tools后输出如下:

[vagrant@localhost ~]$ docker history hub.c.163.com/public/ubuntu:16.04-tools
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
1196ea15dad6        14 months ago       /bin/sh -c #(nop)  CMD ["/usr/bin/supervisor…   0B
<missing>           14 months ago       /bin/sh -c #(nop) COPY file:32c4496c7e250e69…   70B
<missing>           14 months ago       /bin/sh -c #(nop)  EXPOSE 22/tcp                0B
<missing>           14 months ago       /bin/sh -c cp -f /usr/share/zoneinfo/Asia/Sh…   414B
<missing>           14 months ago       /bin/sh -c sed -i s/"PermitRootLogin without…   2.53kB
<missing>           14 months ago       /bin/sh -c apt-get update     && apt-get upd…   112MB
<missing>           15 months ago       /bin/sh -c mkdir -p /var/run/sshd               0B
<missing>           15 months ago       /bin/sh -c #(nop)  MAINTAINER netease "ops"     0B
<missing>           2 years ago         /bin/sh -c #(nop) CMD ["/usr/sbin/sshd" "-D"]   0B
<missing>           2 years ago         /bin/sh -c #(nop) EXPOSE 22/tcp                 0B
<missing>           2 years ago         /bin/sh -c sed -ri 's/^#PasswordAuthenticati…   2.54kB
<missing>           2 years ago         /bin/sh -c mkdir /var/run/sshd                  0B
<missing>           2 years ago         /bin/sh -c apt-get install -y openssh-server…   83.5MB
<missing>           2 years ago         /bin/sh -c apt-get update                       22.4MB
<missing>           2 years ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0B
<missing>           2 years ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$…   1.9kB
<missing>           2 years ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/poli…   701B
<missing>           2 years ago         /bin/sh -c #(nop) ADD file:9ade4e2863c54c630…   118MB

这些层都是只读,不可修改的 。当docker利用镜像启动一个容器的时候,在文件系统的顶层再挂载一个新的可读写的层给容器,进行更新操作。

上一篇 下一篇

猜你喜欢

热点阅读