docker、lxc、cgroup、namespace是最近比较的技术。先了解一下他们分别是什么,然后说一下他们怎么用,具体实现机制以后再单独研究。
docker是lxc的管理器,lxc是cgroup的管理工具,cgroup是namespace的用户空间的管理接口。namespace是linux内核在task_struct中对进程组管理的基础机制。
再详细点说:
docker是用go来实现的,自动化了对lxc的管理过程,能够自动在线下载相应的发行版本的rootfs。
lxc可以直接chroot到任意的系统的rootfs上并通过cgroup的限制机制来控制容器内系统的资源占有率。
cgroup通过配置文件或者命令配置后,限制相应进程或一组进程使用的系统资源。
很明显,在lxc以上已经借助于chroot机制在一个限制的容器中运行一个完整的系统了,这样多个不通过虚拟化技术的新系统就在特定的占有物理资源的限制上运行起来。据说运行效率直逼实际机器。
下面说一下用法吧,先从下往上说:
cgroup
步骤:
- 在文件系统上建立层次结构
- 挂载文件系统并关联子系统
- 建立控制组
- 设置控制参数
- 将进程加入到控制组
通过/etc/cgconfig.conf配置或者cgroup-bin的相关指令来配置:
mount {
cpuset = /sys/fs/cgroup/cpuset;
momory = /sys/fs/cgroup/momory;
}
group cnsworder/my {
perm {
task {
uid = root;
gid = root;
}
admin {
uid = root;
gid = root;
}
}
cpu {
cpu.shares = 1000;
}
}
命令如下
mount -t group -o cpu cpu /sys/fs/cgroup/cpuset
cgcreate -g cpu,momory:/cnsworder
chown root:root /sys/fs/cgroup/cpuset/cnsworder/my/*
chown root:root /sys/fs/cgroup/cpuset/cnsworder/my/task
cgrun -g cpu,momory:/cnsworder/my bash
lxc
建立新容器 lxc-create -n name -t type
删除容器 lxc-destory -n name
运行容器lxc-start -n name
运行容器中的指令 lxc-execute -n name command
停止运行容器 lxc-stop -n name
连接运行容器 lxc-attach -n name
配置cgroup lxc-cgroup -n name
你当然可以借助一下命令做更多的事情
lxc的配置文件位于/etc/lxc中
支持发行版本的template位于/usr/share/lxc/templates中,我的archlinux上支持的如下:
lxc-start和lxc-execute区别是lxc-execute会启动lxc-init进程来作为启动其他程序的入口。
对容器的资源控制配置在${path}/config中
docker
docker run -t type command直接在线下载
如果有dockerfile一切将变得更简单,借助于github你可以直接运行一个桌面环境
docker build -t cnsworder/docker-desktop git://github.com/rogaha/docker-desktop.git
docker run -d cnsworder
docker run常用的选项有:
-e 设置容器的运行env环境变量
-v 映射服务的一个目录到容器中
-p 容器对服务器暴露的端口
-c cpu使用的权重
-m 限制容器的内存使用量
-i 标准输出到当前term
-t 分配一个tty
另外更让人羡慕的是借助有vargant可以在mac和windows上使用docker,当然vargant就是在virtualbox中跑了linux虚拟机。
来源:CSDN
作者:BAT-Battle
链接:https://blog.csdn.net/q454684431/article/details/42743507