是什么?

  1. 容器引擎——核心
  2. 开源
  3. go 编写
  4. 基于 LXC(Linux Container) 内核虚拟化实现

能干什么?

  1. 持续集成
    1. 简化配置
    2. 代码流水线管理
    3. 快速部署
    4. 提高开发效率
  2. 版本控制
  3. 可移植性 —— 可以移动到任意一台 Docker 主机上
  4. 标准性—— 容器保证所有配置依赖不变
  5. 隔离性与安全

和虚拟机比的优势

  1. 轻量 M G —— 资源都是钱
  2. 性能高
    1. 共享主机内核, 没有 Hypervisor 层开销
    2. 系统级虚拟化,
    3. 占用资源少
  3. 使用更加方便
    1. 配置简单——标准化
    2. 要求低,不需要 CPU 虚拟化技术支持

虚拟机也有优势

  1. 安全性好——docker 只是进程级别的隔离,虚拟机是物理层面的隔离
  2. 有自己完整的操作系统

涉及到的技术

  1. LXC: Linux 容器技术,共享内核
  2. Cgroups :control groups
    1. 内核提供的限制资源的技术(CPU,内存)
  3. namespace:隔离技术:
    1. UTS—— 每个容器可以有自己的 hostname 和 domainame
    2. IPC——进程间通信 每个容器有其自己的 System V IPC 和 POSIX 消息队列文件系统,因此,只有在同一个 IPC namespace 的进程之间才能互相通信
    3. PID——进程 每个 PID namespace 中的进程可以有其独立的 PID
    4. Network、每个容器用有其独立的网络设备,IP 地址,IP 路由表,
    5. Mount——每个容器能看到不同的文件系统层次结构
    6. User 每个 container 可以有不同的 user 和 group id
  4. AUFS(advanced multi layered unification filesystem):高级多层统一文件系统,是 UFS 的一种

docker engine

关键词:洋葱模型,cs 架构

三层洋葱模型:

  1. Cli
  2. restapi
  3. docker daemon

c/s 架构:

  1. client
  2. restapi(http)
  3. server

容器和镜像

镜像

  1. 静态
  2. 类似与面向对象中的类
  3. 只有多层只读层

数据持久化

网络

  1. bridge
  2. host-only
  3. none
  4. overlay