一旦"程序"被执行起来,它就从磁盘上的二进制文件,变成node
一、计算机内存中的数据 二、寄存器里的值 三、堆栈中的指令 四、被打开的文件 五、以及各类设备的状态信息的一个集合。
像这样一个程序运行起来后的计算机执行环境的综合,就是咱们今天的主角:进程docker
一、就是经过约束和修改进程的动态表现,从而为其创造出一个"边界"ubuntu
二、Cgroups 技术是用来制造约束的主要手段bash
三、Namespace 技术则是用来修改进程视图的主要方法。网络
[root@luoahong ~]# docker run -it busybox /bin/sh Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox 57c14dd66db0: Pull complete Digest: sha256:7964ad52e396a6e045c39b5a44438424ac52e12e4d5a25d94895f2058cb863a0 Status: Downloaded newer image for busybox:latest / # ps PID USER TIME COMMAND 1 root 0:00 /bin/sh 6 root 0:00 ps
请帮我启动一个容器,在容器里执行 /bin/sh,而且给我分配一个命令行终端跟这个容器交互性能
原本,每当咱们在宿主机上运行了一个 /bin/sh 程序,操做系统都会给他分配一个进程编号,好比PID=100
这个编号是进程的惟一标识,就像员工的工牌同样,因此PID=100,能够粗略地理解为这个/bin/sh是咱们公司里的第
100号员工,而第1号员工就天然是比尔 · 盖茨这样统领全局的人物。ui
而除了咱们刚刚用到的 PID Namespace,Linux操做系统还提供了 Mount、UTS、IPC、
Network 和 User 这些 Namespace用来对各类不一样的进程上下文进行“障眼法”操做spa
其实是在建立容器进程时,指定了这个进程所须要启用的一组 Namespace 参数。这样,容器就只能“看”到当前
Namespace 所限定的资源、文件、设备、状态,或者配置而对于宿主机以及其余不相关的程序,它就彻底看不到了。操作系统
这时,这些进程就会以为本身是各自 PID Namespace,里的第 1 号进程,只能看到各自 Mount Namespace里挂载命令行
用来对各类不一样的进程上下文进行“障眼法”操做
Namespace 技术实际上修改了应用进程看待整个计算机"视图"被操做系统作了限制,只能"看到"某些指定的内容
“敏捷”和“高性能”是容器相较于虚拟机最大的优点,也是它可以在 PaaS 这种更细粒度的资源管理平台上大行其道的重要缘由
优势:“敏捷”和“高性能”
缺点:隔离的不完全
不能被Namespace 化的资源和对象 好比时间
[root@luoahong container]# pwd /sys/fs/cgroup/cpu/container [root@luoahong container]# while : ; do : ; done & [1] 1447 [root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us -1 [root@luoahong container]# cat /sys/fs/cgroup/cpu/container/cpu.cfs_period_us 100000 [root@luoahong container]# echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us [root@luoahong container]# echo 1447 > /sys/fs/cgroup/cpu/container/tasks
docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash $ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_period_us 100000 $ cat /sys/fs/cgroup/cpu/docker/5d5c9f67d/cpu.cfs_quota_us 20000
[root@k8s-master ~]# docker run -it --cpu-period=100000 --cpu-quota=20000 ubuntu /bin/bash root@beac9236771e:/# cd /sys/fs/cgroup/cpu/ root@beac9236771e:/sys/fs/cgroup/cpu# ls cgroup.clone_children cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat cpuacct.usage notify_on_release cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares cpuacct.stat cpuacct.usage_percpu tasks root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_period_us 100000 root@beac9236771e:/sys/fs/cgroup/cpu# cat cpu.cfs_quota_us 20000 root@beac9236771e:/sys/fs/cgroup/cpu# pwd /sys/fs/cgroup/cpu $ mount -l | grep tmpfs none on /tmp type tmpfs (rw,relatime) [root@k8s-master cpu]# mount -l | grep tmpfs devtmpfs on /dev type devtmpfs (rw,nosuid,size=1006112k,nr_inodes=251528,mode=755) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755) tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,size=203192k,mode=700)
这就意味着这个 Docker 容器,只能使用到 20% 的cpu带宽