生产环境中, 是否应该使用 container容器? 为什么?

简单探讨生产环境中, 是否应该使用 container 容器.

简要

通常情况下, 服务器并不会只运行单一的服务. 但有的时候想要部署不同服务会因为环境依赖的冲突或不支持, 又或者被繁杂的设定搞得头昏眼花. 身为懒惰的程序猿, 我会选择使用 container 来简化我的部署作业.

为什么

首先最烦人的, 是不同作业系统之间的不相容. 比如 windows <> *nix 系统之间的一些小问题如大小写敏感, 档案路径等等. 另外就是一些项目的依赖只存在某个作业系统的问题. 这种情况下我更宁愿牺牲一丢丢的服务器效能, 生成一个可用的容器来部署我的项目. 再来就是保持服务器的环境干净, 不会因为安装太多的依赖而导致出现一些奇奇怪怪的问题.

优缺点

优点:

  1. 可以使用一些预先封装好的映像来部署项目, 比如要部署一个网页应用, 就可以直接使用 nginx / httpd 的映像.
  2. 修改简单且不会影响其他服
  3. 保持服务器的干净
  4. 能在同一台服务器中, 部署各种各样的服务.
  5. 使用 vscode 作为开发工具, 能透过容器生成 devcontainer 开发环境.

缺点:

  1. 门槛略高, 通常情况下需要使用指令进行部署.

总结

使用 container容器 作为生产环境我认为是可行的, 但要考虑应用程序的量级. 如果量级太大(比如每分钟超百万请求)也许 K8s 群集可能会更适合.

工具

  1. docker, 老牌的容器部署工具
  2. podman, 新兴的容器部署工具
  3. lxd, 比较贴近底层应用的部署工具