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

简介: 2.1 容器技术     2.1.1 关于容器技术         容器技术是轻量级的操作系统虚拟化.         容器技术在linux内核原生集成.         容器主要使用2大linux内核特性:             Cgroup:资源控制        ...
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)设计哲学.
目录
相关文章
|
1天前
|
运维 Kubernetes Docker
这是一项颠覆性技术 - 容器
这是一项颠覆性技术 - 容器
|
1天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
2天前
|
存储 Ubuntu 安全
Docker容器常用命令
Docker容器常用命令
10 1
|
7天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
13 0
|
10天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
16天前
|
JavaScript 前端开发 Docker
全栈开发实战:结合Python、Vue和Docker进行部署
【4月更文挑战第10天】本文介绍了如何使用Python、Vue.js和Docker进行全栈开发和部署。Python搭配Flask创建后端API,Vue.js构建前端界面,Docker负责应用的容器化部署。通过编写Dockerfile,将Python应用构建成Docker镜像并运行,前端部分使用Vue CLI创建项目并与后端交互。最后,通过Nginx和另一个Dockerfile部署前端应用。这种组合提升了开发效率,保证了应用的可维护性和扩展性,适合不同规模的企业使用。
|
16天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
13 0
|
16天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
28 0