标签 "容器" 下的文章

容器化,是指使用容器技术(Docker/containerd等)运行应用程序(容器),并使用容器编排技术(例如 K8s)来管理这些容器。

我在之前的文章 《使用 Dockerfile 构建生产环境镜像》 提及普通的虚拟机部署存在的问题:

为什么有这篇文章,是因为我在真正做容器化改造的时候,发现公司生产环境存在大量的坑:

  • 传统虚拟机部署,基本依赖克隆或者手工编译。由于人力原因,SRE 历来单传,编译出来的 PHP、扩展等二进制版本不一致;
  • 项目开发人员痛苦不堪——他没办法模拟出接近于线上一致的环境(碰不到摸不着,各种扩展版本都要自己去编译);
  • 新人入职都会灵魂拷问你一句——我怎么把线上的代码跑起来?
  • ……

另外,传统的虚拟机部署,还存在成本浪费——虚拟机无法做到容器的资源隔离和扩缩容,资源利用率不高。

所以我们可以发现,有以下几点好处:

一、环境的高度一致性

  • 容器需要制作镜像文件,描述环境的构建过程,也就意味着它可以保证环境的高度一致
  • 无论本地环境或者生产环境,由于 Dockerfile 的存在,不同的操作系统也可以兼容
  • 高度一致性带来了环境的统一,统一的环境有利于 CI/CD 流程,结合自动化技术提升效率

二、资源隔离

  • 以往虚拟机容易因为混合部署,而某些应用耗费内存过大,导致程序 OOM 崩溃,而容器由于资源隔离,不会互相影响
  • 合理分配每个容器的资源,有利于提高资源利用率,降低资源成本
  • 通过 Linux Cgroups 技术(Linux Control Group)限制资源上限;通过 Linux NameSpace 机制修改进程看到的外部资源的 “视图”

三、轻量级

  • 相比虚拟机,容器启动速度在秒级别
  • 容器为进程,通过 Linux NameSpace 机制和 unionFS,使得进程本身看起来好像拥有一个隔离的环境和文件系统(实际上还是宿主机的一个进程)

容器化是未来的一大趋势!让我们拥抱云原生吧!