☰
Docker入门与实战——其他相关项目
2026/10/24 2:33:20 网站建设 项目流程

其他相关项目

    • 1、持续集成
      • 1.1、Jenkins
      • 1.2、GitLab
      • 1.3、Drone
      • 1.4、其他项目
    • 2、容器管理
      • 2.1、Portainer
      • 2.2、Rancher
    • 3、编程开发
      • 3.1、安装docker-py
      • 3.2、使用示例
    • 4、网络支持
      • 4.1、pipework
      • 4.2、Flannel项目
      • 4.3、Weave Net项目
      • 4.4、Calico项目
    • 5、日志处理
      • 5.1、Fluentd
      • 5.2、logspout
    • 6、服务代理
      • 6.1、Traefik
      • 6.2、nginx-proxy
    • 7、标准与规范
      • 7.1、runC标准
      • 7.2、开放容器规范
      • 7.3、云应用十二要素
    • 8、其他项目
      • 8.1、OpenStack支持
      • 8.2、dockerize
      • 8.3、Unikernel

1、持续集成

持续集成(Continuous Integration,CI)是一种软件开发实践,它的目标是通过自动化构建、测试和部署过程,将代码的集成频率提高到每天甚至更高,从而使团队能够更快速地交付高质量的软件。开发人员提交代码到代码仓库后,自动化的构建、测试和部署过程会自动触发,以确保代码的质量和稳定性。

持续集成的特点包括:

  • 鼓励自动化的周期性的过程,检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,减少人工干预。
  • 需要有持续集成系统的支持,包括代码托管机制支持,以及集成服务器等。

常见的持续集成软件包括Jenkins、GitLab、Drone、Travis CI和CircleCI等。

1.1、Jenkins

Jenkins(www.jenkins.io)是一款广泛应用于持续集成和持续交付的工具,它可以用于构建、测试和部署软件项目。Jenkins支持多种编程语言和技术,并提供了丰富的插件生态系统,可轻松集成其他工具。

Jenkins可以实时监控集成中的错误,并提供详细的日志文件和提醒功能,同时使用图表直观地展示项目构建的趋势和稳定性。Jenkins的特点包括简单易用的安装配置、支持详细的测试报告、分布式构建等功能。

自2.0版本起,Jenkins推出了Pipeline as Code,可帮助Jenkins更好地支持CI和CD。通过Pipeline,将原本独立运行的多个任务连接起来,可以实现十分复杂的发布流程,如图所示。

使用官方镜像

Jenkins官方在Docker Hub上提供了全功能的基于官方发布版的Docker镜像。读者可以方便地使用Docker命令一键部署Jenkins服务:

Jenkins容器启动成功后,可以打开浏览器访问8080端口,查看Jenkins管理界面,如图所示。

在目前运行的容器中,数据会存储在工作目录/var/jenkins_home中,这包括Jenkins中所有的数据,如插件和配置信息等。如果需要实现数据持久化,读者可以使用数据卷机制:

以上命令会将Jenkins数据存储于宿主机的/your/home目录下(需要确保/your/home目录对于容器内的Jenkins用户是可访问的)​。

1.2、GitLab

GitLab(gitlab.com)是一个基于Web的Git仓库管理工具,它可以托管代码,支持代码管理、问题跟踪、代码审查等功能。同时,GitLab支持DevOps,提供了自动化构建、CI/CD集成、容器注册表、Kubernetes集成、监控和安全扫描等功能,使软件开发人员可以在一个平台上管理整个软件的开发和部署流程。基于GitLab,用户可以很容易地搭建一套类似于GitHub的开发协同平台。GitLab支持开源版本和拥有更多功能的企业版本。


使用官方镜像

GitLab官方提供了开源社区版本(GitLab CE)的DockerHub镜像。读者可以直接使用Docker命令运行,并将其数据目录挂载到主机的/srv/gitlab/路径下:


成功运行镜像后,可以打开浏览器,访问GitLab服务管理界面,如图所示。

1.3、Drone

Drone是一款基于Go语言实现的开源持续集成平台项目(项目官方网站为http://drone.io,代码在harness/drone维护)​,遵循Apache 2.0协议。它的初衷是为了更方便地对开源项目进行持续集成。Drone的特点是支持GitHub、Bitbucket和Google Code等第三方代码托管平台的持续集成服务,并且可以直接通过Docker容器在不同的环境中运行。

Drone支持多种编程语言和技术,提供了易于使用的Web界面和强大的插件系统,能够方便地集成其他工具。Drone还支持自定义构建环境,用户可以根据自己的需求来选择构建环境中的软件版本和工具,以满足各种不同的需求。

Drone的操作界面简单直观,用户可以通过Web界面方便地创建、管理、监控构建任务。同时,它还提供了实时日志和构建结果通知等功能,让用户能够及时发现和处理构建中存在的问题,提高开发效率和软件质量。

用户登录网站后,可以选择源码的存放服务,如图所示。

此处选择GitHub服务,然后从仓库列表中选择项目,如图所示。

配置项目的语言种类如图所示。

接下来需要检查创建命令是否正确,并根据具体情况进行调整,如图所示。


最后,项目就可以在Drone平台上进行持续集成管理了,如图所示。

1.4、其他项目

  • Travis CI:Travis CI是一个托管的持续集成服务,支持多种语言和框架,包括Java、Ruby、Python和Node.js等。它可以与GitHub和Bitbucket无缝集成,支持Docker构建和部署。
  • CircleCI:CircleCI是一个基于云的持续集成和持续交付平台,支持多种编程语言和技术。它可以与GitHub、Bitbucket和GitLab无缝集成,并提供了Docker支持和自动化测试和部署功能。

这些开源项目都提供了强大的自动化功能,可以极大地提高开发团队的生产力和软件交付速度。

2、容器管理

Docker官方工具已经提供了十分强大的管理功能。目前,已经有若干开源项目试图实现更为强大和便捷的Docker管理工具,包括Portainer、Rancher等。

2.1、Portainer

Portainer项目前身为DockerUI项目,定位于管理本地或远端(需要开启网络访问)的容器资源,官方网站为https://portainer.io/,目前支持对Docker和Swarm进行管理(见图)​。


该项目于2013年12月发起,主要基于HTML/JS语言实现,遵循MIT许可。目前分为开源版本和商业版本。用户可以通过下面的命令简单测试它的开源版本:

运行成功后,打开浏览器,访问https://localhost:9443来管理本地的容器和镜像,如图所示。

2.2、Rancher

Rancher是一个基于Docker的容器管理平台(见图26-11)​,用于简化容器部署和管理的过程。它是一个开源项目,由Rancher Labs公司负责维护和支持。通过Rancher,用户可以快速构建和部署容器化的应用程序,并轻松管理它们的生命周期。

Rancher支持多种容器编排技术,包括Kubernetes、Docker Compose、Mesos和Swarm。它提供了可视化的界面,使用户可以轻松地管理和监控他们的容器群集。

Rancher的主要功能包括负载均衡、服务发现、安全控制、日志记录和监控等。同时,它还支持集成其他工具和服务,如Prometheus、Grafana、ELK等。

用户可以通过下面的命令使用Rancher:


运行成功后,打开浏览器,访问https://localhost来管理本地的容器和镜像,如图所示。

3、编程开发

由于Docker服务端提供了REST风格的API,对这些API进一步封装,可以提供给各种开发语言作为Docker的SDK。

这里以docker-py项目为例,介绍在Python语言中对Docker相关资源进行操作。

3.1、安装docker-py

docker-py项目是基于Python语言的Docker客户端,代码开源在docker/docker-py。最新的稳定版本也已经推送到PyPI上,可以通过pip命令快速安装:

安装后,可以查看源代码,代码结构十分清晰,主要提供了Client类,用来封装用户可以用Docker命令执行的各种操作,包括build、run、commit、create_container、info等。

对REST接口的调用是通过request库实现的。对于这些API,用户也可以通过curl进行调用测试。

3.2、使用示例

打开Python的终端,首先创建一个Docker客户端连接:

通过info()方法查看Docker系统信息:


通过images和containers属性可以查看和操作本地的镜像和容器资源:

通过create_container()方法创建一个容器,之后启动它:

或者更简单的,通过如下代码直接运行容器,例如:


可见,所提供的方法与Docker提供的命令都十分类似。实际上,在使用SDK执行Docker命令时,也是通过Docker服务端提供的API进行封装。

4、网络支持

围绕Docker网络的管理和使用,现在已经诞生了一些方便用户操作的工具和项目,具有代表性的包括pipework、Flannel、Weave Net以及Calico项目。

4.1、pipework

pipework是一个用于Linux系统的轻量级容器网络辅助工具,可以实现在Docker容器和物理网络之间建立网络连接。项目代码托管在jpetazzo/pipework。

该项目由Jérôme Petazzoni编写,封装了ip、brctl等底层设备操作命令,主要是shell脚本,可以简化对容器网络的操作命令。使用该工具,可以轻松配置容器的IP地址,为容器划分VLan等。例如,分别启动两个终端,在其中创建两个测试容器c1和c2,并查看默认网卡配置。

利用pipework为容器c1和c2添加新的网卡eth1,并将它们连接到新创建的br1网桥上:

此时在主机系统中查看网桥信息,会发现新创建的网桥br1,并且有两个veth端口连接上去:

此时,容器c1和c2可以通过子网192.168.1.0/16相互连通。

另外,pipework还支持指定容器内的网卡名称、MAC地址、网络掩码和网关等,甚至支持通过Macvlan连接容器到本地物理网卡,实现跨主机通信。

pipework的代码只有500行左右,建议逐行阅读学习,有助于理解如何利用Linux系统上的容器连接的实现细节。

4.2、Flannel项目

Flannel由CoreOS公司推出,现在主要面向Kubernetes,为其提供底层的网络虚拟化方案,代码托管在flannel-io/flannel。

Flannel采用典型的覆盖网络的思路,在每个主机上添加一个隧道端点,所有跨主机的流量会经过隧道端点进行隧道封包(典型的为VXLAN协议,Docker Swarm也支持)​,直接发送到对端(见图)​。


与传统的基于覆盖网络的网络虚拟化方案类似,这种设计拥有更好的扩展性,只要是IP连通的主机即可构成同一个虚拟网络,甚至可以跨数据中心通信。但问题也很明显,一个是隧道协议目前还比较难以追踪,另一个是解包和封包处理负载重,如果没有硬件卸载,则往往会有性能损耗。此外,当中间路径存在负载均衡设备时,要避免均衡失效。

4.3、Weave Net项目

Weave Net是由Weave公司开发的一种面向容器的网络虚拟化方案(见图)​,项目托管在https://github.com/weaveworks/weave。

为了解决容器网络跨主机问题,通常采用的手段是建立覆盖网络隧道或更改包头进行转发。Weave Net的设计非常有创意,它在每个主机上添加了一个路由器,并在混杂模式下使用pcap截取了网桥上的网络数据包。如果该数据包需要发送到另一台主机上,则通过UDP进行转发,到达目的主机上的路由器,然后目的路由器执行相反的过程,利用pcap解析网包并发送给网桥。整个过程模拟了一个隧道方式。

这种设计的好处在于可以进行细粒度的管理,整个转发过程非常容易追踪。然而,这种设计对于管理平面(特别是路由器的自动收敛和学习)的要求比较复杂,并且执行pcap的过程会消耗较多的计算资源。因此,在实际部署中,需要考虑结合软件定义网络和硬件处理等手段来缓解这些问题。

4.4、Calico项目

Calico的设计则更为直接(见图)​,不使用网络虚拟化,而是直接采用传统的路由转发机制,即在每个节点上配置一个vRouter,负责处理跨主机的流量。vRouter之间通过BGP自动学习转发策略。这样做更容易管理,同时带来更好的转发性能。

由于Calico不采用隧道格式,而是依赖于传统的IP转发,这就限制了它的应用场景,无法跨数据中心,也无法保障中间路径的安全性。

Calico目前支持VM、Docker、Kubernetes、Openstack等多个项目的容器网络功能,官方网站为https://www.projectcalico.org/。

5、日志处理

Docker默认将日志输出到标准输出,也支持本地文件系统、syslog、Fluentd、AWS CloudWatch等输出,因此很容易与已有的日志采集工具进行整合。用户也可以自定义日志插件,将日志记录到自定义的位置。

5.1、Fluentd

Fluentd是一个开源流数据采集和转发系统,由TreasureData公司发起和维护,项目主页为https://www.fluentd.org/。

它支持数百种数据源和数据目标,可以采集、过滤和转发来自不同应用、服务、设备和系统的日志、指标和事件数据,并与多种数据存储和分析工具无缝集成,例如Elasticsearch、Kafka、Hadoop、AWS S3、GoogleCloud Storage等。

Fluentd提供了丰富的插件库,用户可以根据需要选择和配置插件,实现灵活、高效、可靠的数据采集和转发方案。Fluentd还支持多种部署模式,可以运行在本地、容器、云平台等环境中,满足各种场景的需求。

可以将容器日志转发给Fluentd进行转发。

首先,在Fluentd配置文件中添加输入和输出插件,以接收来自Docker容器的日志数据并转发。例如,可以使用in_forward插件监听TCP或UDP端口:

使用out_file插件将日志写入文件:

最后,通过-log-driver fluentd参数配置容器的日志驱动,转发到对应端口,例如:

5.2、logspout

logspout是由gliderlabs推出的收集和转发容器日志的开源项目,基于Golang实现,代码托管在gliderlabs/logspout。

与Fluentd类似,logspout也是提供一个本地的代理,自动识别Docker容器的日志输出,然后将其发送到指定的日志聚合系统中。

logspout支持对所采集的容器进行筛选,并且支持Elasticsearch、Fluentd、Logstash、Kafka、Syslog等多种采集后端。

典型的应用是发送到远端的syslog服务器,执行命令也十分简单。需要注意,如果用容器方式启动,则把本地的docker.sock句柄映射到容器内:

6、服务代理

服务代理(也被称为反向代理)是一种网络服务,它接受来自互联网的连接请求,并将这些请求转发给内部网络上的服务器(见图)​。代理服务器会接收来自客户端的请求,并将这些请求转发给后端服务器,然后将从服务器获得的结果返回给客户端。因此,代理服务器对外表现为一个服务器。服务代理服务器通常也被用作负载均衡器,可以隐藏后端真实服务器的细节,提高统一访问接口地址的可用性和可靠性。


下面是支持Docker环境的一些服务代理开源项目。

6.1、Traefik

Traefik是一款用Go语言编写的开源反向代理和负载均衡器,项目地址为https://traefik.io。

作为一个轻量级的HTTP(S)反向代理,Traefik可以自动发现容器和服务,并根据需要进行配置。

Traefik支持多种后端(如Docker、Kubernetes、Mesos、Marathon、Consul、Etcd、Zookeeper、BoltDB、Rest API等)​,并且支持自动HTTPS(通常使用Let’s Encrypt进行证书管理)​。Traefik还提供了各种插件和中间件来扩展和定制其功能。

传统的代理服务器不适应于动态环境,配置的动态改变一般难以实现,而微服务架构恰恰是动态的,服务的添加、去除和升级经常发生。Traefix可以监听服务注册/编排的API,当服务状态发生改变时,将动态更新反向代理服务器的配置。

Traefik的逻辑功能图如图所示。

它可以同时提供可视化的WebUI进行配置和状态监测,如图所示。


运行方式包括二进制模式和容器模式。

  • 1.二进制模式
    下载二进制文件(已编译好的文件)和配置文件(https://github.com/containous/traefik/releases和https://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml)​,然后直接运行:
  • 2.容器模式
    运行容器模式的方法为:

6.2、nginx-proxy

Nginx除了是强大的Web服务器之外,还是优秀的代理工具。nignx-proxy以容器模式自动运行Nginx和docker-gen命令,其中docker-gen负责产生代理配置文件并在容器启动时进行加载。代码网址为https://github.com/jwilder/nginx-proxy。使用方法如下。

首先,运行nignx-proxy:

之后,启动要被代理的容器:

7、标准与规范

随着Docker技术的迅速发展,开源社区不断加强容器技术的易用性,同时也在思考如何更长远地发展容器技术,包括兼容不同的容器标准、适应更多类型的操作系统平台和设计更好的应用等。为此,一些组织(如开放容器倡议OCI)正在倡导成立一些推荐大家都遵守的容器标准和规范,并总结面向云应用的设计实践经验。这些工作旨在提高容器的互操作性和可移植性,进一步推动容器技术的普及和发展。

7.1、runC标准

runC标准最早由Docker公司在2014年2月左右推出,项目地址为opencontainers/runc,它的目标是打造一套轻量级的标准化容器运行环境。

通过runC,容器可以在多种平台上得到统一的运行时环境以及更好的资源隔离。目前,runC已经贡献成为开放容器标准(Open Container Initiative,OCI)的重要实现,得到了包括Docker、Google、IBM在内的众多厂家的支持。

runC支持OCI容器运行时规范中的所有基本功能,包括文件系统、命名空间、进程、用户、网络、IPC(进程间通信)和安全等。它能够以与Docker等其他容器引擎类似的方式启动和管理容器,并与其他容器管理工具和平台(如Kubernetes)集成。

7.2、开放容器规范

为了推动容器标准化,2015年6月22日,AWS、EMC、IBM、Google、Docker、CoreOS、RedHat等数十家公司共同牵头成立了开放容器倡议组织,旨在建立一套通用的容器规范。该组织现在受到Linux基金会的支持,其官方网站为https://www.opencontainers.org。

OCI定义了一个包括容器镜像格式和容器运行时标准在内的开放容器规范(Open Container Format,OCF),这些规范可以让容器在不同的容器运行时(例如Docker、runC、containerd等)和不同的容器平台上(例如Kubernetes、Docker Swarm等)进行互操作。

OCF对标准容器运行时规范制定了5条原则:

  • 标准化操作(standard operation):包括创建、删除、打包容器等操作都必须被标准化,以确保在任何支持OCI的平台上都可以执行。
  • 内容无关性(content-agnostic):操作应该与容器的内容无关,保持一致性,以便可以使用任何OCI兼容的容器来执行操作。
  • 平台无关性(infrastructure-agnostic):标准容器应该在任何支持OCI的平台上同等执行,而不受底层基础架构的限制。
  • 设计考虑自动化(designed for automation):标准容器是为自动化而设计的,规范中必须考虑自动化条件,以便容器能够在自动化流水线中使用。
  • 企业级交付(industrial-grade delivery):标准容器需要适用于企业级流水线的交付任务,以确保容器的可靠性和安全性。

7.3、云应用十二要素

在云计算时代,应用的整个生命周期都将在数据中心内运行,这与传统的软件开发模式有着极大的不同。云应用实际上意味着代码、配置和运行时环境三者的共同作用。在新的背景下,需要重新思考下面的问题。

  • 什么样的软件才能拥有高可用性和易维护性?
  • 什么样的代码能够避免后续开发的上手障碍?
  • 什么样的实施能够在分布式环境中可靠地运行?

为了回答这些问题,Heroku(一家PaaS服务提供商,2010年被Salesforce收购)的创始人Adam Wiggins提出了云应用十二要素,这些原则对于开发者在设计和实现云时代的高效应用(尤其是在PaaS和SaaS上)具有很好的指导意义。

  • 1.Codebase(代码仓库)
    每个子系统都用独立代码库管理,使用版本管理,实现独立的部署,即拆分系统为多个分布式应用,每个应用使用自己的代码库进行管理。多个应用之间共享的代码用依赖库的形式提供。
  • 2.Dependencies(依赖)
    显式声明依赖,通过环境来严格隔离不同依赖。所依赖的与所声明的要保持一致,并且声明要包括依赖库的版本信息。
  • 3.Config(配置)
    在环境变量中保存配置信息,避免放在源码或配置文件中。
  • 4.Backing Services(后端服务)
    将后端服务(数据库、消息队列、缓存等)作为可挂载资源来使用,这样系统与外部依赖会尽量松耦合。
  • 5.Build,release,run(生命周期管理)
    区分不同生命周期的运行环境,包括创建(build,将代码编译为运行包)​、发布(release,将多个运行包和配置放在一起打包,打包是一次性的,每次修改都是新的release)​、运行(run),各个步骤的任务都很明确,要相互隔离。例如,绝对不允许在运行时去改代码和配置信息。
  • 6.Processes(进程)
    以一个或多个无状态的进程来运行应用,即尽量实现无状态,不要在进程中保存数据。尽量通过数据库来共享数据。
  • 7.Port binding(端口)
    通过端口绑定来对外提供服务,可以是HTTP、XMPP、Redis等协议。多个应用之间通过URL来使用彼此的服务。
  • 8.Concurrency(并发模型)
    通过进程控制来扩展,即尽量以多进程模型进行扩展。
  • 9.Disposability(任意存活)
    快速启动(秒级响应)​,优雅关闭(收到SIGTERM信号后结束正在处理的请求,然后退出)​,并尽量鲁棒(随时关闭或随时崩溃都不应该导致问题)​。
  • 10.Dev/prod parity(减少开发与生产环境的差异性)
    尽量保持从开发、演练到生产部署环境的相似性。要实现这一点很不容易,要求工程师既懂研发,又懂运维。
  • 11.Logs(日志)
    将日志当作事件流来进行统一的管理和维护(使用Logstash等工具)​。应用只需要将事件写出来,例如到标准输出stdout,剩下的由采集系统处理。
  • 12.Admin processes(管理)
    将管理(迁移数据库、查看状态等)作为一次性的系统服务来使用。管理代码与业务代码要放在一起进行代码管理。

8、其他项目

8.1、OpenStack支持

OpenStack是Linux基金会发起的云开源项目,是最受欢迎的云开源项目之一,项目的官方网站为http://www.openstack.org。项目遵循Apache许可,受到包括IBM、Cisco、AT & T、HP、Rackspace等众多企业的大力支持。

该项目的目标是搭建一套开源的架构即服务(Infrastructure as a Service,IaaS)实现方案,主要基于Python语言实现,支持私有云、公有云和混合云部署。

OpenStack的核心组件包括:

  • Nova:用于管理虚拟机实例,支持多种虚拟化技术。
  • Neutron:用于管理网络,支持软件定义网络(SDN)和网络功能虚拟化(NFV)等功能。
  • Glance:用于管理镜像,可以提供虚拟机和容器的镜像。
  • Cinder:用于管理块存储,支持多种后端存储,包括本地磁盘、分布式文件系统、对象存储等。
  • Swift:用于管理对象存储,支持大规模分布式存储。
  • Keystone:用于管理认证和授权,支持多种认证方式,包括用户名、密码、令牌、OAuth等。

OpenStack目前除了可以管理众多虚机外,其计算服务(Nova)已经支持了对Docker容器的驱动,此外,还支持与Docker Swarm集成,使用Heat组件进行编排,可以方便地部署和管理Docker Swarm集群。

此外,OpenStack还提供了一些其他与Docker相关的功能,包括通过Neutron组件管理Docker容器的网络,使用Glance组件存储Docker镜像,以及使用Cinder组件提供Docker容器的存储。此外,OpenStack自身的部署也可以基于Docker技术,从而得到极大的简化,甚至更进一步,可以通过Kubernetes等容器云方案快速启动一套OpenStack环境。

8.2、dockerize

一般来说,要将一个应用放到容器里,需要考虑两方面的因素,一方面是应用依赖的配置信息,另一方面是应用运行时的输出日志信息。

dockerize是一个Go程序,可以简化这些操作,代码在jwilder/dockerize维护。它主要可以提供如下功能:

  • 根据模板和容器环境变量在容器启动时生成应用程序配置文件。
  • 将多个日志文件的内容输出到标准输出或标准错误输出。
  • 在启动主进程之前,通过TCP、HTTP(S)或UNIX等方式等待其他服务可用。

下面给出一个简单的例子,比如要创建一个Nginx镜像,标准的Dockerfile内容为:

使用dockerize,则需要在最后的CMD命令中利用dockerize进行封装,利用模板生成应用配置文件,并重定向日志文件输出到标准输出。

首先,创建配置模板文件为default.tmpl,内容是:

该模板将接收来自环境变量PROXY_URL的值。编辑新的Dockerfile内容为:


最后的CMD命令中利用-template参数指定了配置模板位置以及生成的配置文件的位置。

创建镜像后,通过如下方式启动一个容器,整个过程无须手动添加Nginx的配置文件,并且日志重定向到了标准输出:

8.3、Unikernel

Unikernel是一种轻量级的精简内核技术,项目地址为http://www.unikernel.org。

不同于传统的支持多用户多应用的操作系统内核,Unikernel技术的目的是为运行的应用编译链接进入所需要的操作系统函数形成一个单独的编译镜像,内核只提供单一地址空间。无须其他无关的软件,这个镜像自身可以运行在虚拟机中。

Unikernel的特点包括:单一镜像、安全、超轻量级和快速启动。

不同于容器的共享操作系统内核,Unikernel只包含应用程序所需的最小操作系统部分,每个应用实际上仍然运行在各自的超轻量级虚拟机中。

Unikernel的设计理念也使得它非常适合云计算和容器化应用程序,因为它可以帮助降低内存和CPU的使用,提高应用程序的可移植性和可靠性,并支持快速启动和关闭。

比较流行的Unikernel系统包括:

  • ClickOS:NEC提出的专门为网络应用优化的系统,支持C、C++和Python。
  • Clive:面向云环境的精简操作系统,基于Golang语言实现。
  • HaLVM:早期Unikernels系统之一,基于Haskell语言实现。
  • IncludeOS:基于C++实现,用于构建可部署的高性能应用程序,支持C++、Rust和Go。
  • LING:早期Unikernels系统之一,基于Erlang语言实现。
  • MirageOS:早期Unikernels系统之一,基于Ocaml语言实现。
  • OSv:基于Java,支持绝大多数JAR文件的部署和运行。
  • Rumprun:基于NetBSD项目,专注于符合POSIX标准的、不需要Fork的应用程序,方便将现有Linux程序移植到Unikernel上。
  • runtime.js:基于JavaScript V8引擎的操作系统,支持JavaScript应用。

目前,Unikernel技术正在得到越来越广泛的关注和应用,例如在IoT、边缘计算、无服务器架构和容器化等领域。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询