虚拟化和 Docker 容器技术

Docker 容器技术,即:Docker 是一个由 Go 语言写的程序运行的 “ 容器 ”( Linux Containers,LXC )

  • Linux Container,简写为:LXC,是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源

Docker,实现了一种应用程序级别的隔离,改变了我们基本的开发、操作单元,由操作虚拟机转换到程序运行的“容器”


So,什么是容器( Container )?

容器,是一种轻量级、可移植、并将应用程序进行打包的技术,使应用程序可以在几乎任何地方、以相同的方式运行

  • Docker 将镜像文件运行起来后,产生的对象就是容器,换句话来说就是,容器,相当于镜像运行起来的一个实例
  • 容器,具有一定的生命周期
  • 可以借助 docker ps 命令查看运行的容器,类似于在 linux 上,利用 ps 命令查看运行着的进程

So,可以这样理解:容器,就是被封装起来的进程操作,只不过现在的进程,可以简单、也可以复杂,复杂的话,可以运行 1 个操作系统,简单的话,可以运行 1 个回显字符串


容器与虚拟机

  • 相同点
    • 容器和虚拟机一样,都会对物理硬件资源进行共享使用
    • 容器和虚拟机的生命周期比较相似:创建、运行、暂停、关闭等
    • 容器中或虚拟机中,都可以安装各种应用,如 redis、mysql、nginx 等
      • 也就是说,在容器中的操作,如同在一个虚拟机( 操作系统 )中操作一样
    • 同虚拟机一样,容器创建后,会存储在宿主机上:
      • linux 上,位于 /var/lib/docker/containers 中
  • 不同点
    • 容器并不是虚拟机,尽管它们有很多相似的地方
    • 虚拟机的创建、启动和关闭,都是基于一个完整的操作系统,一个虚拟机,就是一个完整的操作系统
      • 而,容器,直接运行在宿主机的内核上,其本质上是一系列进程的结合
    • 容器,是轻量级的,虚拟机,是重量级的
      • 容器,不需要额外的资源来管理,虚拟机,额外更多的性能消耗
      • 创建、启动或关闭容器,如同创建、启动或者关闭进程,那么轻松
        • 而创建、启动、关闭一个操作系统,就没那么方便了
      • So,在给定的硬件上,能运行更多数量的容器,甚至,可以直接把 Docker 运行在虚拟机上