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

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)设计哲学.
优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/683812

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。