Docker介绍

Docker介绍

什么是Docker

  • Docker是一个开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供了一系列更强的功能,比如镜像,DockerFile等;
  • Docker理念是将应用及依包打包到一个可移植的容器中,可以发布到任意Linux发行版Docker引擎上。使用沙箱机制运行程序,程序之间相互格式;
  • Docker使用GO语音开发。

Docker架构与内部组件

架构

  • Docker采用C/S架构,Docker daemon作为服务端接受来自客户端请求,并处理这些请求,比如创建,运行容器等。客户端为用户提供一系列指令与Docker daemon交互。

内部结构

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

Docker有什么优点

  • 持续集成:
    • 在项目快速迭代情况下,轻量级容器对项目构建,环境打包,发布等流程就能提高工作效率。
  • 版本控制:
    • 每个镜像就是一个版本,在一个项目多个版本时可以很方便管理。
  • 可移植性:
    • 容器可以移动到任意一台Docker主机上,而不需要过多关注底层系统。
  • 标准化:
    • 应用程序环境依赖,操作系统等问题,增加了生产环境故障率,容器保证了所有配置,依赖始终不变。
  • 隔离性与安全:
    • 容器之间的进程是相互隔离的,一个容器出现问题不会影响到其他容器。

虚拟机与容器的区别

  • 以KVM举例,与Docker对比。

启动时间:

  • Docker秒级,KVM分钟级。

轻量级:

  • 容器镜像大小通常以M为单位,虚拟机以G为单位。

性能:

  • 容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,容器性能基本接近物理机。
  • 虚拟机需要Hypervisor层支持,虚拟化一些设备完整,具有完整的GuestOS,虚拟化开销大,因而降低性能,没有容器性能好。

安全性:

  • 由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一定安全隐患。

使用要求:

  • KVM基于硬件的完全虚拟化,需要硬件CPU虚拟化技术支持。
  • 容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。

应用场景

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