实现目标
为容器添加资源限制,如内存,cpu等。
./mydocker run ti -m 100m /bin/bash
相比于3.1增加了一个参数:
-m 100m
:限制容器的内存大小为XXX(例子中为100M);
目前code3.2中已经增加了管道。
依赖
流程图
cgroup组件调用流程图如下所示:
整体容器启动过程体现在run.go
中的Run函数中:
1、创建并启动容器进程;
2、进去host的cgroups目录,创建(若不存在)指定cgroup子目录;
3、设置资源限制 -> 即把限制值写入指定文件;
4、将本进程加入该组cgroup -> 即把本进程的pid写入指定cgroup的tasks文件;
5、初始化容器;
6、容器退出后,销毁该cgroup子目录。
func Run(tty bool, comArray []string, res *subsystems.ResourceConfig) {
parent, writePipe := container.NewParentProcess(tty)
if parent == nil {
log.Errorf("New parent process error")
return
}
if err := parent.Start(); err != nil {
log.Error(err)
}