关于docker:Docker基础

5次阅读

共计 2142 个字符,预计需要花费 6 分钟才能阅读完成。

1、LXC 依赖什么技术实现容器化?

次要依赖:Namespace,cgroups,Capbility、SELinux、Chroots,UnionFS、IPTABLES 等。
Linux 底层的容器化,次要依赖两个内核性能来维持。命名空间和 cgroup。

  • 通过 Namespace 实现对各种资源的隔离(比方隔离 pid,两个不同的命名空间之前,无奈相互查看到 pid)
  • 【通过命名空间,并 不能达到 KVM/ 虚拟化 那样的齐全资源隔离。】
  • 通过 cgroups 实现资源限度 / 管制 / 配额,cpu,内存,网络等计算资源进行管制。(比方限度某个过程的 cpu 应用下限)

Capability 与权限管制相干,SELinux 做平安隔离,IPTABLES 实现端口映射和 NAT(比方容器间相互拜访等)。
chroot(pivot_root) 零碎级别切换 rootfs,目录隔离。UnionFS 和 Docker 镜像分层相干,能够将相干层合并挂载。

参考:
[lxc] https://linuxcontainers.org/lxc/introduction/
[lxc] https://www.cnblogs.com/kinwin/archive/2013/01/14/2859393.html
[chroot pivot_root] https://www.jianshu.com/p/46791cbbb48a
https://www.cnblogs.com/feisky/p/4105739.html
http://www.178linux.com/104355

2、Docker 底层应用了什么技术?根本架构如何?runc 是什么?

2.1、Docker 底层技术

晚期 Docker 也是用 LXC(Linux Container)做底层,所以 LXC 中应用到的技术,Docker 根本也都应用了。
namespace,cgroup,chroot,UnionFS 都用到了。【前两个是内核个性】

  • namespace:用于 资源隔离 ,通过应用独立的 namespace 来实现过程隔离,网络隔离,挂载隔离(文件隔离) 等。
  • cgroup:用于 资源限度,对一组过程的 cpu/ 内存 / 网络 /IO 等资源进行调配限度。
  • UnionFS:AUFS 是一种联结文件系统(UnionFS),能够将多个目录合并 再 mount 到一个目录上。DockerFile 镜像分层构造具体就是利用了 AUFS 的个性。每一层都是一个目录。镜像的构建过程能够简略了解为将多个目录进行合并【Docker 反对泛滥 UnionFS,AUFS 只是其中一种。】

参考:
[namespace] https://coolshell.cn/articles/17010.html
[cgroup] https://coolshell.cn/articles/17049.html
[aufs]  https://coolshell.cn/articles/17061.html
https://segmentfault.com/a/1190000016357628
http://dockone.io/article/2941

2.2、docker 基础架构:

Docker 是一种软件平台,是容器的操作系统,在 基础设施和宿主操作系统之上 。能够治理、管制容器。
【Docker 由服务端和客户端组成,这里 Docker 指的是 Docker Deamon 或者说服务端 /Docker 守护过程】

从 Docker 本身来看,次要分为 docker 守护过程(服务端),REST API,和 docker CLI(客户端)。
客户端通过 API 连贯服务端,服务端创立并治理如下性能:

  • 存储管理(data volumes)
  • 网络管理(docker network)
  • 容器运行时(containered)
  • 镜像相干(eg: image build. Etc.)


换一个角度来看(将存储和网络临时疏忽),就能够更分明看清 docker 的架构:

  • docker 守护过程管制治理容器、同时也治理镜像和仓库。
  • docker CLI(客户端)应用命令和守护过程交互。【docker 命令行能够近程操控服务端】

参考:
https://docs.docker.com/get-started/overview/

2.3、其余常识


Docker –> containerd –> docker shim –> runC(libcontainer):
containerd 是 Docker 的容器运行时(rumtime) https://containerd.io/
【containerd 一个残缺的运行时,能够独立运行。不依赖 docker deamon,应用 grpc 与下层交互。
【次要负责镜像治理(镜像、元信息等)、容器执行(调用最终运行时组件执行)

runC 是依照 OCI 进行的一个容器运行时的具体实现。https://github.com/opencontainers/runc
【刚开始用的 libcontainer,起初将其移交给 OCI 组织,当初是 runc 的子项目。】
【同时,runc 是在 libcontainer 的根底上进化来的,而且后续会用 runc 代替前者作为容器的 runtime】
参考:
https://book.51cto.com/art/201710/554421.htm

正文完
 0