docker进阶与实战 2 关于容器技术

news/2024/7/5 11:31:05
2.1 容器技术
    2.1.1 关于容器技术
        容器技术是轻量级的操作系统虚拟化.
        容器技术在linux内核原生集成.
        容器主要使用2大linux内核特性:
            Cgroup:资源控制
            NameSpace:访问隔离
            Cgroup与Namespace两种技术并不强相关,可以单独使用.同时使用时就创建了一个容器.
    2.1.2 容器技术的历史
        文件系统隔离:chroot(不安全)=>pivot_root(安全加强,目前在用)
        容器:virtuozzo=>OpenVZ=>Cgroup,NameSpace(docker让容器技术获得世界的关注)
            NameSpace:    使用3个系统调用:clone,setns,unshare
                Mount
                UTS
                IPC
                PID
                Net
                User
            Cgroup:    使用cgroupfs虚拟文件系统,标准挂载点 /sys/fs/cgroup
                cpuset
                CPU
                memory
                device
                freezer
                blkio
                net cls
                hugetlb ...
2.2 一分钟理解容器
    2.2.1 容器的组成
        容器=namespace+cgroup+rootfs+容器引擎(用户态工具)
                访问隔离+资源控制+文件系统隔离+生命周期控制
    2.2.2 容器的创建原理
         clone namespace=>cgroup=>pivot rootfs=>执行命令
2.3NameSpace
    2.3.1namespace对内核全局资源做封闭,每个namespace都有独立资源,不同进程在各自的namespace中调用同一资源互不干扰.
            NameSpace  6大组件:
                IPC:    隔离system V IPC和posix消息队列(IPC用到了标识符)       
                Mount:    隔离文件系统
                UTS:    隔离主机名和域名
                PID:    隔离进程ID
                Net:    隔离网络资源
                User:    隔离用户ID和组ID

    2.3.2 namespace的接口和使用
       操作:
            clone(创建新),
            unshare(为旧进程创建新namespace),
            setns(将旧进程放入新namespace)(docker exec的实现原理就是setns)

       pid=clone(flags,...)
            (flags:CLONE_NEWNS(这个是mount namespace),CLONE_NEWIPC,CLONE_NEWPID,CLONE_NEWUSER,CLONE_NEWUTS,CLONE_NEWNET,) 新进程创建出来的子进程也使用这个namespace
        setns通过procfs(/proc/$$/ns)指定namespace信息
2.4 Cgroup(control group)
    组件:    之前只能使用ulimit对单一进程时行控制
        devices:     设备权限控制
        cpuset:      分配指定CPU和内存节点(避免进程跨节点访问CPU内存导致性能下降)
        CPU:          控制CPU占有率
        cpuacct:    统计CPU使用情况
        memory:    控制内存使用上限
        freezer:      冻结或暂停Cgroup中的进程
        net_cls:        配合tc限制网络流量
        net_prio:      设置进程网络流量优先级
        huge_tlb:      限制hugeTLBr使用.
        perf_event:        允许perf基于cgroup做性能监测
systemd默认使用cgroupfs
[root@220 ~]# ls -l /sys/fs/cgroup/
total 0
drwxr-xr-x 2 root root  0 Jan 11 18:00 blkio
lrwxrwxrwx 1 root root 11 Jan 11 18:00 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Jan 11 18:00 cpuacct -> cpu,cpuacct
drwxr-xr-x 2 root root  0 Jan 11 18:00 cpu,cpuacct
drwxr-xr-x 2 root root  0 Jan 11 18:00 cpuset
drwxr-xr-x 4 root root  0 Jan 11 18:00 devices
drwxr-xr-x 2 root root  0 Jan 11 18:00 freezer
drwxr-xr-x 2 root root  0 Jan 11 18:00 hugetlb
drwxr-xr-x 2 root root  0 Jan 11 18:00 memory
drwxr-xr-x 2 root root  0 Jan 11 18:00 net_cls
drwxr-xr-x 2 root root  0 Jan 11 18:00 perf_event
drwxr-xr-x 4 root root  0 Jan 11 18:00 systemd

直接操作namespace,cgroup还是有点难的,但docker通过libcontainer很容易搞定这些复杂的操作
2.5容器造就docker
    容器是docker核心技术之一.
    微服务(micro service)设计哲学.

http://www.niftyadmin.cn/n/2757451.html

相关文章

《高可用架构·中国初创故事(第3期)》一2.6 激励你的团队成员

本节书摘来异步社区《高可用架构中国初创故事(第3期)》一书中的第2章,第2.6节,作者: 高可用架构, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.6 激励你的团队成员 管好团队做对事——软件企业成长手册开…

4大开源协议及Linux基础命令汇点

一,4大开源协议 四大协议的相同点和不同点 GPL,LGPL,BSD, Apache 四大协议中,GPL作为GNU通用公共许可证,只要在一个软件中使用GPL协议的产品,则该产品必须采用GPL协议,也必须开源和免费&…

Shiro入门(一)Shiro简介

前言 本章学习Shiro安全框架的基本概念 方法 1.概念 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 2.为什么要学习S…

linux 2 unit10 selinux

selinux的管理####安全上下文的查看与更改####vim /etc/sysconfig/selinux ###更改状态[rootlocalhost ~]# systemctl status vsftpd ##查看vsftpd服务状态vsftpd.service - Vsftpd ftp daemonLoaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)Active: in…

多台路由器同时上网

为什么80%的码农都做不了架构师?>>> 现在生活中总是会出现这样的情况: 1:通过拨号上网(即通过用户名、密码如长城宽带上网)时。 2:通过别的人路由器接到一根可以上网的线。 然而现在的手机或是…

《Java程序员面试秘笈》—— 面试题13 Java开发原则

本节书摘来异步社区《Java程序员面试秘笈》一书中的第1章,第1.13节,作者:常建功,更多章节内容可以访问云栖社区“异步社区”公众号查看。 面试题13 Java开发原则 Java程序员面试秘笈请选择下面Java语言描述正确的项。 &#xff08…

Shiro入门(二)Shiro登录认证

前言 本章讲解使用Shiro实现登陆验证 方法 1.概念 Authentication,验证用户是否合法,说白了就是登陆。 需要提交用户的身份和凭证给shiro,简单点来说就是用户名和密码。 Principals:用户的身份信息,是Subjec的标识…

Android使用属性动画ValueAnimator动态改变SurfaceView的背景颜色

以下是主要代码,难点和疑问点都写在注释中: /*** 开始背景动画(此处为属性动画)*/private void startBackgroundAnimator(){/**参数解释:*target:设置属性动画的目标类,此处是当前自定义view所以…