docker|嵌入式开发:Linux容器与Docker的发展历史


docker|嵌入式开发:Linux容器与Docker的发展历史

容器是敏捷软件开发的中心 。 他们已经从边缘的开源技术转向为现代软件和嵌入式Linux系统提供动力的构建块 。 随着物联网(IoT)的出现 , 该领域的先锋公司现在正在寻找容器 , 以将DevOps的优势扩展到嵌入式开发系统的独特需求 。 随着企业希望扩大其物联网环境的能力 , 流行的容器技术如LXC或Linux容器和Docker位居榜首 。
容器简史
容器作为虚拟机(VMs)的轻量级替代品得到普及 。 虚拟机是虚拟化硬件服务器 , 允许用户在现有主机操作系统上安装和运行来宾操作系统(OS) 。 这意味着在任何操作系统环境中开发的应用程序都可以在任何系统上运行 。
但是 , 虚拟机具有很高的开销、维护成本和较大的映像大小 , 这可能会将资源过度分配给运行在虚拟机上的操作系统的每个实例 。 另一方面 , 容器是虚拟化的软件环境 , 它将应用程序的代码及其依赖项打包 , 以便应用程序可以在任何主机上单独并行运行 , 并根据需要分配资源 。

LXC和LXD–操作系统的容器化
容器技术于2001年通过JacquesGélinas的LinuxVServer项目首次引入 。 这种早期形式的容器技术经历了几次重新设计 , 例如添加了cgroup功能 , 允许在不需要启动任何虚拟机的情况下限制和优先排序资源(CPU、内存、块I/O、网络);以及名称空间隔离功能 , 该功能允许完全隔离应用程序对操作环境的视图 , 包括进程树、网络、用户ID和装载的文件系统和名称空间 。
2008年 , IBM工程师添加了一层用户空间工具 , 以使嵌入式开发人员更喜欢该技术 。
2014年 , LXC1.0版本通过利用现有的Linux技术(如seccomp和SELinux)进一步解决了LXC的安全问题 , 以控制和防止恶意代码从容器中溢出造成的DoS攻击 。
LXC容器的工作原理是采用操作系统级虚拟化 , 允许多个Linux虚拟环境在共享硬件和基于Linux的操作系统内核上同时运行 。 这节省了开销成本 , 并允许构建应用程序以跨多种设备类型使用 。 本质上 , LXC专注于系统和操作系统级的容器化 , 而这正是它们擅长的地方 。
LXD–LXC容器的升级
LXD被描述为下一代系统容器 。 它通过可以连接到LXC库的RESTAPI增强了系统级的容器化 。 它用Go编写 , 创建了一个系统守护进程 , 应用程序通过HTTPS通过UNIX套接字访问 , 进一步扩展了分布式系统可移植性的可能性 。 LXD构建在LXC之上 , 并通过内核扩展其功能 , 而不是独立于操作系统 。 它的行为非常类似于带有虚拟机监控程序的VM , 但没有资源开销 。
Docker–集装箱化应用程序
虽然Linux容器主要在系统级 , 但Docker的重点是应用程序容器化 。 Docker于2013年推出 , 最初基于LXC , 并添加了用户友好的工具 , 以吸引嵌入式开发人员寻找大型虚拟机的替代品 。 最终 , Docker通过开发自己的集装箱化架构与LXC有所不同 。
Docker和LXC共享类似的安全和进程隔离功能 , 确保运行的进程不会过度利用资源 。 然而 , 它们实际上是非常不同的技术——每个Docker容器运行单个虚拟化应用程序引擎 , 而LXC容器化系统或Linux操作系统用户区的不同组件 。
【docker|嵌入式开发:Linux容器与Docker的发展历史】Docker容器打包单个应用程序或应用程序组件 , 而不是客户操作系统 , 它有一个直接在主机操作系统上运行的Docker守护程序 。 此外 , 在嵌入式开发中 , 每个容器化应用程序都是独立运行的 , 不会影响主机中同时运行的任何其他应用程序 。