版权声明:本文为博主原创文章,转载请注明出处。
前言
在一些精简的Linux发行版里,很多时候会有无法运行需要某些依赖的程序的情况。
然而,会搭载这种精简系统的设备,一般无法重新安装系统;例如:路由器、手机等其他嵌入式设备。
而且受限于系统内核(缺少cgroup的一些高级特性等),也无法安装docker。
同时,在不同的Linux发行版下,使用的C语言标准库也不尽相同;如:glibc、musl等。
即使CPU支持程序所使用的指令集,使用glibc所编译的程序,也无法在musl环境下运行。(使用兼容层也会出现依赖问题)
容器技术分析
以下仅为个人理解,仅供参考,欢迎纠错。
- chroot jail: 使用chroot命令以特定目录作为根目录执行程序,被执行的程序无法访问新根目录以外的文件,实现了文件系统层的隔离。(无需内核支持)
- LXC(Linux Containers): 在chroot的基础上,追加了进程隔离、独立的网络环境。(需要内核支持)
- Docker: 早期基于LXC实现,再在LXC的基础上,实现了镜像的逐层叠加、打包、发布,优化了应用部署流程