主要观点:Docker 虽流行但并非很好,其在构建容器、安全等方面存在诸多问题,有更简单易用的替代方案。
关键信息:
- 容器工作原理:Linux 容器基于命名空间和 cgroups 两个内核特性,了解相关 man 页面可理解其概念,可通过系统调用创建容器。
- 构建容器:Docker 构建容器图像并非独特,多年来安装 GNU/Linux 时已在做类似事情,可使用多种工具和命令构建文件系统树,如 debootstrap 等,Docker 的分层技术可提高效率,但可使用 btrfs 替代 OverlayFS。
- 部署隔离:chroot 已用于构建容器多年,Docker 在这方面并非创新,只是营销做得好。
- 安全方面:默认运行应用为 root 的 Docker 容器可能比 chroot 更不安全,Docker 主要优势是隔离网络,防火墙已能解决端口使用问题。
- 应用容器:“应用容器”概念无特别之处,只是另一个系统服务,可利用 Linux 命名空间功能实现隔离,无需使用 Docker。
- 替代方案:man 1 systemd-nspawn 可提供类似 chroot 的容器化功能,结合其他 GNU/Linux 生态工具可替代 Docker,且更简单。
重要细节: - 命名空间和 cgroups 已纳入上游 Linux 内核,维护性好。
- 用户命名空间仍在发展中,Docker 未实现。
- 包管理器在软件升级、部署等方面有优势。
- 孤儿进程问题会消耗资源,需 init 进程处理。
- CRIU 可实现 Linux 进程的冻结和恢复,Docker 尚不支持。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。