• 拟化与容器

    虚拟化

        主机级虚拟化

            Type-I

            Type-II

        容器级虚拟化

            FreeBSD jail, 2000

            Linux VServer, 2001

    KVM and container      

            虚拟化使得许多操作系统可同时在单个系统上运行。

            容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。

    KVM and lxc Architecture

    Docker容器技术入门_第1张图片

  • LXC Linux Container

    Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

    Docker容器技术入门_第2张图片


  • Linux Namespaces 名称空间

    用户名称空间的改进推动了容器的进一步发展。用户名称空间“使得用户和组 ID 可以按名称空间进行映射。对于容器而言,这意味着用户和组可以在容器内部拥有执行某些操作的特权,而在容器外部则没有这种特权。

    Namespaces

        UTS namespaces:主机名与域名

        Mount namespaces:挂载点

        IPC namespaces:信号量、消息队列和共享内存

        PID namespaces:进程号

        Network namespaces:网络设备、网络栈、端口等

        User namespaces:用户和组

    Docker容器技术入门_第3张图片

  • Control Groups(cgroups) 控制组

    控制组 (cgroups) 是一项内核功能,能够控制和限制一个进程或多组进程的资源使用。而 systemd 初始化系统可设置用户空间,并且管理它们的进程,cgroups 使用该系统来更严密地控制这些隔离进程。

    cgroups

        blkio:块设备IO

        cpu:CPU

        cpuacct:CPU资源使用报告

        cpuset:多处理器平台上的CPU集合

        devices:设备访问

        freezer:挂起或恢复任务

        memory:内存用量及报告

        perf_event:对cgroup中的任务进行统一性能测试

        net_cls:cgroup中的任务创建的数据报文的类别标识符

  • Docker

    Docker容器技术入门_第4张图片

    早期版本:LXC ---> LXC的二次发行版

    一个容器中只运行一个进程;镜像构建:分层构建,联合挂载

    进程终止容器也可删除,容器有生命周期。与宿主机没有密切关联关系

    容器编排工具:Machine+Swarm+Compose

                  ASF:Mesos+marathon

      kubernetes:k8s

    Docker后来自建了容器引擎:---> libcontainer ---> runC

    Docker ---> Moby

    Docker容器的优势

        模块化

        层和镜像版本控制

        回滚

        快速部署

  • 参考文档:https://www.redhat.com/zh/topics/containers/whats-a-linux-container

  • Docker Architecture

    C/S架构的应用程序

    Docker容器技术入门_第5张图片

    Containers:容器

    Images:镜像

        存储镜像要使用特殊的文件系统,1.18版本默认使用的是:overlay2文件系统

        在Docker主机本地存储

    Registries:镜像仓库

        从Docker hub获取,站点:https://hub.docker.com/      

        Docker Registries有两重功能

            1、提供镜像存储的仓库

            2、用户来获取镜像的认证,当前服务器上所有可用镜像的搜索功能等

            repository ---> repo 一个仓库只放一个应用程序镜像;可以放同一程序的不同版本,仓库名+标签来唯一标识一个镜像;一个镜像可有多个标签(tag),不给标签名默认使用latest最新版。

    镜像与容器关系:

        镜像:静态

        容器:动态

    镜像与容器的关系就是程序与进程的关系;镜像是静态的,不会运行。容器则是动态的,它有生命周期。

  • Docker objects

    images

    containers

    networks

    volumes

    plugins