1. 容器的概念

  • 一种虚拟化的解决方案
    • 与虚拟机所不同的是,虚拟机通过中间层,将一台或多台独立的机器虚拟运行于物理硬件之上;
    • 而容器是直接运行于操作系统内核之上的用户空间;
  • 基于上述,容器虚拟化也被称为操作系统虚拟化;
    • 由于依赖于操作系统的特性,因此容器只能运行与底层操作系统相同或相似的操作系统
  • 而 docker 使用的容器技术则是依赖于 Linux 内核特性:namespace 和 cgroups(control group)
    • 因此 docker 上只能运行 Linux 类型系统,而不能运行 windows 系统;

2. Linux 容器技术 vs 虚拟机技术

如下图示为二者的层次化的分别:


这里写图片描述

  • docker,占用更少的磁盘空间;
    • 使用虚拟机,不但依赖应用(App)和其依赖的库(bins/libs),还需要包含完整的操作系统(Guest OS),为了运行数 MB 的应用,却需要安装占用几个 GB 的操作系统;

3. docker

  • 将应用程序自动部署到容器的一种开源引擎,其使用 go 语言编写;
  • 提供简单轻量的建模方式;
  • 职责的逻辑分离;

使用场景:

  • 使用 docker 容器开发、测试、部署服务;
  • 创建隔离的运行环境;
  • 搭建测试环境;
  • 构建多用户的平台即服务(PaaS)基础设施
  • 提供软件即服务(SaaS)应用程序

4. docker 的基本组成


这里写图片描述

  • docker client:客户端; docker daemon:守护进程;
    • c/s 架构
  • docker image:镜像;
    • 镜像是容器的基石;
    • 层叠的只读文件系统
  • docker container:容器;
    • 通过镜像启动;
    • 启动和执行;
    • 写时复制(copy on write)
  • docker registry:仓库
    • 公有/私有
    • Docker Hub

5. namespace/cgroups

  • namespace
    • 对于编程语言,实现封装时的代码隔离;
    • 对于操作系统,则可实现对系统资源的隔离,系统资源包括:进程、网络、文件系统…
    • namespace 包涵一下几种:
      • PID(process id),进程隔离;
      • NET(network),管理网络接口
      • IPC(InterProcess Communication),管理跨进程通信的访问;
      • MNT(Mount),管理挂载点;
      • UTS(Unix Timesharing System),隔离内核和版本标识;
  • Control groups
    • 使用 control groups 对隔离的资源进行管理;
    • 用来分配资源,实现了:资源限制,优先级设定,资源计量,资源控制;
posted on 2017-04-29 23:59  未雨愁眸  阅读(206)  评论(0编辑  收藏  举报