Skip to content

基础概念

容器化

容器化是一种极轻量化的虚拟化技术,主要原理是建立一个虚拟的文件系统,挂载到宿主机的内核上,以此在无性能损耗的前提下完全[1]隔离环境与权限

它的使用体验类似虚拟机,都可以把代码、库、依赖等所有内容打包放在虚拟文件系统中并随时启动,它们最大的区别是容器会与宿主机共用一个内核,而虚拟机则会启动一个完整的操作系统

因为这样的架构,它不会有性能损耗[2],在容器中启动程序的耗时也与直接运行相同,而不像虚拟机那样需要一段时间等待系统启动

因为可将环境集成在容器中、性能无损耗、启动速度快等优势,它被广泛应用于服务器和边缘

用安卓手机的同学可以尝试一个叫Termux的软件,它可以调用安卓系统内核的命令行,但不能操作其他应用,不会应用外部分的系统有任何影响。它也使用了类似于[1:1]容器的技术,与安卓系统本身共用内核,但文件系统、用户、权限等都分离

提示

前面提到过,安卓是一种非常特殊的linux,它也使用Linux Kernel

应用场景

  • 快速创建与当前不同的系统环境,比如需要运行一个老程序时,需要一个较老的系统版本

  • 对于需要复杂依赖的应用,将环境配置在容器中可以避免在另一台电脑上配环境的麻烦

  • 将应用快速部署到多台设备甚至成千上万的机器上

Docker

Docker是容器化技术最常见、最流行的实现方式。虽然一定意义上docker可以说是容器化技术的代表性实现,但绝对不是唯一的

提示

你可能会在网上看到Kubernetes,即k8s

它并非容器化的实现,而是一种“容器编排”,作用是便于配置、启动、管理众多容器,底层还是需要依赖docker等容器化技术

k8s主要用于管理调度服务器集群,我们不会用到它,但类似的容器编排工具如docker compose还是有可能应用到的


  1. 只是类似,实际并不是 ↩︎ ↩︎

  2. 无损耗是对于运行的程序来说。非要特别严谨地讲的话,切换系统上下文和docker daemon肯定是有一定性能开销的,但实际反映在性能上就是忽略不计 ↩︎