知乎上一篇讲解docker比较好的文章
阮一峰一篇讲Docker比较好的文章
阮一峰另一篇讲解Docker的文章
Docker教程
Docker中控制容器带宽等
Linux中cgroups简介-美团技术团队
Linux cgroups详解博客
docker 容器基础技术:linux cgroup 简介
镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
(这段从这位大佬那抄来的)
对Docker与虚拟机软件VMware做一个类比:
Docker引擎就相当于VMware,但Docker是客户端-服务器模型。
Docker中镜像的概念就类似于操作系统ISO安装镜像的概念。
Docker中从镜像生成的容器文件就相当于虚拟机中从ISO镜像生成的存在于硬盘上的系统文件一样。
cgroups学习记录
在/sys/fs/cgroup里面已经有各种子资源的目录,比如cpuset、memory、cpu等等,,这些应该是cgroups挂载之后默认创建的cgroup,只要把进程号加入到对应的子资源文件夹中的tasks中应该就可以直接使用这些cgroup对进程所作出的限制来控制进程。。。不过一般情况下我们是通过在这些对应的子资源目录下面创建新的cgroup来控制我们想要控制的进程,新创建的目录算是继承的父目录的控制设置,比如在cpu文件夹下面新创建一个文件夹(使用cgroup-tools或者mkdir创建)系统会自动在新创建的文件夹下面填充对应的文件,包括参数设置文件和进程设置的文件。。。。这样就保证了cgroup之间是一个有继承关系的树状结构。
使用cgroup-tools工具,不用给定冗长的cgroup路径,它自己应该是把路径给固定死了;使用mkdir或者rmdir控制cgroup则需要记住cgroup在文件系统中的路径。。。。
通过VFS使用cgroup的方式和使用/proc虚拟文件系统来查看和设置内核的各种参数是一样的。都是使用cat来查看并且使用echo将内容写入
设计cgroup的人把cgroup各种相关的文件在系统中应该放在那个地方都固定了,只要挂载cgroup系统,对应的文件一定在事先设定好的目录当中
Docker如何使用cgroup
docker会在执行run命令或者start命令的时候在cgroup的各个子系统中创建docker目录,然后在该docker目录里面创建一个与运行容器ID相同的目录,在这个目录里面设置该容器中进程运行的各项控制参数,应该是启动一个进程就在对应的容器cgroup的tasks中添加一个该进程的PID。当容器运行结束退出时,docker会清理掉对应的cgroup目录。