docker 是什么

  1. 应用容器引擎
  2. 基于内核虚拟化技术: Linux Container
  3. 开源的
  4. Go 语言编写
  5. 理念————容器
    1. 标准化包:将应用和依赖打包成一个可移植的容器(镜像),
    2. 任意系统:可发布、运行到任意 docker 引擎上,
    3. 进程级隔离:进行沙箱运行机制,程序之间相互隔离

基本架构:C/S

  1. Server: Dcoker daemon 作为服务端接受来自客户端请求, 并处理这些请求, 比如创建运行容器等
  2. Client: 主要是 Cli 命令行,客户端为用户提供一系列指令与 Docker daemon 交互
  3. 通过 restful api 进行通信

有人命名为:洋葱模型 洋葱模型

  • 远程还有个 Registry 存储仓库,类似 github 一样,有公共的 dockerhub,也可以自己搭私有的仓库

技术组件

  1. LXC: Linux 容器技术,共享内核,容器共享宿主机资源,使用 namespace 和 cgroups 对资源限制与隔离。
  2. Cgroups(control groups): Linux 内核提供的一种限制单进程或者多进程资源的机制;比如 CPU、内存等资源的使用限制。
  3. NameSpace:命名空间,也称名字空间, Linux 内核提供的一种限制单进程或者多进程资源隔离机制;一个进程可以属于多个命名空间。 Linux 内核提供了六种 NameSpace:
    1. UTS:文件
    2. IPC:通信
    3. PID:进程
    4. Network:网络
    5. Mount:
    6. User:用户
  4. UFS(UnionFS):联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型;成员目录称为虚拟文件系统的一个分支(branch)
  5. AUFS(advanced multi layered unification filesystem):高级多层统一文件系统,是 UFS 的一种,每个 branch 可以指定 readonly(只读)readwrite(读写)和 whiteout-able(wo 隐藏)权限;一般情况下, aufs 只有最上层的 branch 才有读写权限,其他 branch 均为只读权限。

和虚拟机对比

同样是虚拟化技术,它和虚拟机的区别:

区别

  1. 更快,启动时间快:Docker 秒级, KVM 分钟级。
  2. 更轻,轻量级:容器资源占用小,要比虚拟机部署更快速。
    1. 容器镜像大小通常以 M 为单位,
    2. 虚拟机以 G 为单位。
  3. 更好,性能:
    1. 容器共享宿主机内核,系统级虚拟化,占用资源少,没有 Hypervisor 层开销,容器性能基本接近物理机;
    2. 虚拟机需要 Hypervisor 层支持,虚拟化一些设备,具有完整的 GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。
  4. 要求低:使用要求
    1. KVM 基于硬件的完全虚拟化,需要硬件 CPU 虚拟化技术支持;
    2. 容器共享宿主机内核,可运行在主流的 Linux 发行版,不用考虑 CPU 是否支持虚拟化技术
  5. 不太安全:由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全隐患。
  • 各有优势,结合使用最好了~~
  • 历史发展:主机-集群-服务器-虚拟机-容器

应用场景

使用

  1. 打包/部署:应用打包与部署自动化:
    1. 构建标准化的运行环境;现在大多方案是在物理机和虚拟机上部署运行环境,面临问题是环境杂乱、完整性迁移难度高等问题,容器即开即用。
  2. CI/CD: 自动化测试和持续集成/部署:自动化构建镜像和良好的 REST API,能够很好的集成到持续集成/部署环境来。
  3. 弹性:部署与弹性扩展:由于容器是应用级的,资源占用小,弹性扩展部署速度要更快。
  4. 微服务:Docker 这种容器华隔离技术,正式应对了微服务理念,将业务模块放到容器中运行,容器的可复用性大大增加了业务模块扩展性