整理自《Docker技术入门与实践》

PaaS(Platform as a Service)

PaaS 是希望提供一个统一的可供所有软件直接运行而无需复杂配置的操作系统平台。Docker 与生俱来的应用封装为 PaaS 的实现带来了便利。基于 Docker 的 PaaS 项目:

Deis

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Deis 是开源的 PaaS 项目,基于Go语言实现,遵循 Apache 2.0协议。由 OpDemand 公司在2013年7月发起,第一次代码提交:07/23/2013。OpDemand 公司提供对Deis的商业服务支持。

  • 目标:
    提供轻量级的 PaaS 实现,为用户提供简单的应用管理和部署。

  • 相关:
    Deis 基于 Docker 项目和 CoreOS 项目,并遵循 SaaS 应用的“十二因素”风格。通过简单的 git push 命令来部署应用,加速集成和部署过程;还支持对应用容器通过单条命令进行扩展。在架构设计上,Deis 整合了一系列 Docker 容器,可以被部署到公有云、私有云、以及本地环境中,并提供了完整的测试、诊断工具。(十二因素:代码、依赖、配置、后端服务、生命周期、进程、端口、并发、可丢弃性、开发与生产差异性、日志、管理)

Flynn

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Flynn 项目是基于 Heroku 项目(支持多种编程语言-Ruby、Java、Node.js、Scala、Clojure、Python-的 PaaS 实现),受 Omege 概念(flexible,scalable schedulers for large compute cluters)启发,由一个创业团队在2013年7月发起,基于 Go 语言。第一次代码提交:07/14/2013。

  • 目标:
    解决一些部署方面的问题,如在部署 SOA(Service Oriented Architecture:大规模分布式系统常采用的架构风格,需要功能组件间的松耦合)产品至公有云的过程中,往往需要人工部署和维护大量不同的功能部件。而 Flynn 不仅能完成简单可控的部署,还能进行自由的扩展,并提供数据库管理等功能,可以方便的实现一套比较理想的 PaaS 方案。

  • 相关:
    在设计上,Flynn 项目尽量保持API驱动和模块化,以便模块支持不同的实现方案。底层实现一套支持服务发现的资源管理框架,上层实现适合部署和维护的应用组件。

持续集成

Drone 项目利用 Docker 技术,实现持续集成(Continuous Integration)平台服务。

Drone

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Drone 是开源的持续集成平台项目,基于 Go 语言实现,遵循 Apache 2.0协议。最初由 Drone 公司在2014年2月发起。第一次代码提交:02/03/2014。Drone 公司基于该项目提供支持 Github、Bitbucket 和 Google Code 等第三方代码托管平台的持续集成服务。Drone 基于 Docker 和 AUFS 实现,为用户提供基于网站的操作。

  • 相关:
    登录选择源码的存放服务;从仓库列表中选择项目;配置项目的语言种类;检查创建命令是否正确并根据需要进行调整;在 Drone 平台上进行持续集成管理。

管理工具

Docker 自身对单个容器的操作已经提供了功能强大的命令行操作和 API 操作接口(Docker Remote API),对于多个容器(尤其是容器集群)的管理方案,官方提供了 Compose + Machine + Swarm;但图形界面的管理平台,官方尚未给出方案。但已有不少开源项目在尝试提供功能强大且便捷的Docker管理工具,如 Citadel、Shipyard、DockerUI、Panamax、Kubernetes 等。

Citadel

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Citadel 项目于2014年4月由 Citadel 团队正式推出,基于Go语言实现。第一次代码提交:04/21/2014。

  • 目标:
    提供一套在由 Docker 容器构成的集群中对容器进行调度的工具,主要包括集群管理组件和调度组件。其中集群管理组件(Cluster Manager)负责管理集群的状态,通过调用 Docker 提供的 API 来连接到宿主机,管理容器;调度组件(Scheduler)决策如何进行调度,支持多套调度方法,包括基于标签、基于是否同一镜像、基于主机、组合方法等多种调度机制。

  • 相关:
    用户使用 Citadel 首先要为调度组件提供容器类型,并指定调度所关心的资源限制;此后,调度器会根据容器类型、服务将容器启动到合适的主机上。

Shipyard

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Shipyard 项目于2013年11月发起,部分开发者来自 Citadel 项目团队。第一次代码提交:06/23/2013。

  • 目标:
    基于 Citadel 项目提供一套对 Docker 集群中资源进行管理的工具,包括对 Docker 容器、主机等资源的管理。

  • 相关:
    Shipyard 最大的特点是在核心部件之外还支持扩展镜像,可以根据需求灵活实现应用负载均衡,集中日志管理和自动化部署等功能。此外,Shipyard 还提供了方便用户的Web界面,功能更加强大的命令行操作接口,以及统一的 API。Shipyard 支持的命令包括 login、run、stop、restart、info 等。

Kubernetes

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Kubernetes 项目由 Google 于2014年6月开源,核心基于 Go 语言。第一次代码提交:06/03/2014。

  • 目标:
    让用户在跨容器主机集群的情况下,可以轻松的管理、监测、控制容器化应用部署。为 Docker 工作负载构建一个精致的、可扩展和便携式管理的框架。允许客户像谷歌管理搜索和 Gmail 等超大规模应用程序一样来管理他们的应用程序。

  • 相关:
    Kubernetes核心概念是容器组(Container Pod),即一批工作于同一物理工作节点的容器。这些容器拥有相同的网络命名空间、IP地址和存储配额,可以根据实际情况对每一个容器组进行端口映射。此外,Kubernetes 有一个与软件定义网络(Software Defined Networking,SDN)非常相似的网络管理概念:通过一个服务代理创建一个可以分配给任意数目容器的IP地址,前端的应用程序或使用该服务的用户仅通过这一IP地址调用服务,而不需关心其他细节。现已有 Microsoft、RedHat、IBM、Docker、Mesosphere、CoreOS 及 SaltStack 公司加入了 Kubernetes 社区。还有Flannel 等项目针对 Kubernetes 提供覆盖网络功能。

DockerUI

  • 重要链接:
    代码维护 ; 镜像及用法:uifd/ui-for-docker 或 kevan/dockerui

  • 基本信息:
    DockerUI 基于 html/js 语言实现,遵循 MIT 许可。第一次代码提交:06/09/2013。

Panamax

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Panamax 项目诞生于2014年3月,由CenturyLink实验室发起,基于 Ruby 语言,遵循 Apache 2.0 协议,可以部署在 Google、Amazon 等云平台或本地环境。第一次代码提交:03/25/2014。

  • 目标:
    通过一套优雅的界面实现对复杂的 Docker 容器应用的管理,如利用简单拖拽来完成操作。

  • 相关:
    Panamax 项目基于 Docker、CoreOS、Fleet 提供对容器的自动化管理和任务调度,还提供了开源应用的模板库,以便集中管理不同应用的配置和架构。

Seagull

  • 重要链接:
    代码维护 ; 镜像及用法

  • 基本信息:
    Seagull 是由小米工程师陈迪豪发布的开源 Docker 容器和镜像的 Web 界面监控工具,基于 Go 和 JavaScript 实现,集成了 Beego、AngularJS、Bootstrap、Bower、JQuery 和 Docker 等工具。第一次代码提交:10/13/2014。

  • 相关:
    Seagull 会在本地运行一个 Web 服务,通过 Beego 实现的 API 服务器不断请求 Docker 的本地套接字以管理 Docker。

其他项目

CoreOS

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    CoreOS 项目基于 Python 语言,遵循 Apache 2.0协议,由 CoreOS 团队在2013年7月发起。

  • 目标:
    提供一个基于 Docker 的轻量级容器化 Linux 发行版,通过轻量级的系统架构和灵活的应用部署能力来简化数据中心的维护成本和复杂度。

  • 相关:
    CoreOS 基于一套精简的 Linux 环境,不使用包管理工具,而将所有应用都进行容器化,彼此隔离,从而提高了系统的安全性。此外,运行期间,系统分区是只读状态,利用主从分区支持更稳定的无缝升级。配合 etcd(分布式高可用的键值数据库)、fleet(CoreOS 集群的管理工具)等工具,CoreOS 也适用于大规模集群。

Fig(Compose)

  • 重要链接:
    官方网站

  • 基本信息:
    Fig 项目基于 Python 语言,由 Docker 公司在2013年12月发起。

  • 目标:
    提供一个同时部署多个容器并将其联合的解决方案。也就是 Docker 的一款编排工具。

  • 相关:
    在一个 YAML 格式的配置文件中定义依赖的镜像和容器间的连接关系,通过一条简单的指令 fig up 来自动启动相应容器,完成部署。

Compose(Fig)

  • 重要链接:
    官方网站 ; 代码维护

  • 基本信息:
    Docker 官方提供的编排工具。2015年2月26日,Docker 官方博客宣布 Docker Compose 已经可以下载安装。Compose 的用法跟Fig十分相似,其实 Compose 就是基于 Fig 开发的,并且兼容使用 Fig 的应用程序。根据官方的说明,Fig 已经被重新命名为 Compose,从 Fig 和 Compose 在 github.com 上维护的代码是同一套就可以看出。使用 Fig 的用户可以非常简单的升级到 Compose。

OpenStack支持

  • 重要链接:
    官方网站

  • 基本信息:
    OpenStack 是 Linux 基金会发起的最受欢迎的开源项目,基于 Python 语言,遵循 Apache 2.0 协议,受到 IBM、Cisco、AT&T、HP、Rackspace等企业的大力支持。

  • 目标:
    提供一套开源的 IaaS(Infrastructure as a Service - 架构即服务)方案。

  • 相关:
    OpenStack 不仅可以管理众多虚拟机,其计算服务(Nova)还支持对 Docker 的驱动,OpenStack 管理引擎的 Heat 子项目还可用于通过模板管理 Docker 容器。

dockerize

  • 重要链接:
    代码维护

  • 基本信息:
    简化应用部署到容器过程中应用依赖的配置信息和应用运行时输出日志的管理成本。

  • 目标:
    可以自动提取环境变量生成配置文件;将应用输出的日志信息重定向到STDOUTSTDERR

  • 相关:
    如在构建Nginx镜像的过程中,需要创建配置模板文件default.tmpl用于接收来自环境变量的值,然后在Dockerfile最后的CMD中利用dockerize进行封装,用-template参数指定配置模板位置以及生成的配置文件的位置,利用模板生成应用配置文件,并重定向日志文件输出到标准输出。

libcontainer、libchan、SwarmKit

  • 重要链接:
    libcontainer项目 ; libchan项目 ; SwarmKit项目 ;

  • 基本信息:

    • libcontainer
      Linux内核3.12引入了一套专为容器技术考虑的API,由于各种容器技术对API的不同实现,使应用的运行不得不考虑其所在的容器和平台。而libcontainer试图为应用提供一套统一的API,使其无需关心具体的容器实现。libcontainer现已整合Parallels公司所支持的libct项目。Docker也计划逐步迁移到libcontainer上,该项目有助于实现多种平台(包括Windows平台)之间容器的迁移。

    • libchan
      libchan所实现的功能类似于已有的各种消息系统,但它宣称将打造适合现代各种微型并发服务的极轻量级(ultra-lightweight)的网络服务库,并支持In-memory Go channel、Unix socket、Raw TCP、TLS、HTTP2/SPDY、Websocket等多种协议。

    • SwarmKit
      SwarmKit原名libswarm,基于libchan项目,定义了分布式系统中各服务组件之间互相通信的标准接口,并试图实现一整套的网络服务组件。包括Docker Server、Docker Client、SSH tunnel、Etcd、SkyDNS、Mesos、OpenStack Nova、Google Compute等各种服务。用户可以通过它在同一机器上同时管理运行在不同主机上的Docker容器,任意的替换集群中的各种服务,包括服务发现、DNS。SwarmKit实际上是在开发一套基础系统,其他各种集群服务作为一个功能模块与SwarmKit对接。

  • 目标:
    libcontainer的目标是实现容器技术的同一API;libchan的目标是在不同的网络服务之间打造一套“channel”系统(channel是Go语言中的一个概念 - 为实现并发情况下不同goroutine之间交换数据);SwarmKit的目标是提供一套组件网络服务的最小工具集。

  • 相关:
    还有其他一些,如Weave创建一个虚拟网络来连接部署在多台主机上的Docker容器;Flannel为Kubernetes提供覆盖网络支持;SocketPlane试图将软件定义网络技术引入容器管理等。

官方提供

官方网站给出了很多很详尽的说明文档,还有很多官方提供的工具,如:

  • Docker Compose

  • Docker Machine

  • Docker Swarm

建议你到官方网站看一下,有很多很有意思的东西。

Docker相关的项目相关推荐

  1. Docker 部署SpringBoot项目不香吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:流星007 链接:toutiao.com/i68433912 ...

  2. linux运行dock打包的镜像,Linux部署之Docker方式部署项目

    Linux部署之Docker方式部署项目 1. 使用Docker对前端vue项目进行部署 1.1 环境准备 服务器或者虚拟机上先安装好Nginx和相关配置 docker pull nginx 拉去最新 ...

  3. jenkins+docker的简单项目部署

    怎么使用docker实现新项目的发布,一般有两种方式,以一个web容器为例: 1:定制一个通用的web容器镜像,以逻辑卷-v的方式,关联webapp目录到宿主机,每次发布新版本时只需要更新宿主机上关联 ...

  4. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  5. linux安装docker部署java项目

    大家好,我是烤鸭: 分享一下linux上部署docker的javaweb项目 1.环境 linux centos 7.2 64-bit 系统 kernel 3.10+ 查看版本号 : uname -r ...

  6. docker部署sprinboot项目

    掌握了基本的docker知识之后,我们就想尝试使用docker来部署一下项目,由于现在越来越多的项目都是直接以jar包启动的,即springboot项目,下面就简单演示一下使用用docker部署一个j ...

  7. IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证

    IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证 Docker开启远程访问 修改该Docker服务文件 加载配置与重启 验证是否开启成功 IDEA配置docker 编写 ...

  8. ChatGPT 以及相关开源项目体验

    本月初,ChatGPT 以惊人的速度问世,在技术圈中引起了广泛讨论.在 GitHub 上近期还诞生了多个 ChatGPT 相关的开源项目,数量之多令人瞠目结舌,甚至 ChatGPT 独霸了大半个 Gi ...

  9. 云原生尝试——Docker部署node项目

    云原生--Docker实战 1.引言 2.学习条件 3.基本概念介绍 4.Docker基本使用 5.Docker进阶使用 6.参考文献 1.引言     最近一打开CSDN基本上都是在介绍云原生,本着 ...

最新文章

  1. C++语言基本类型—整型
  2. 12本最优秀的Android开发电子书强力推荐
  3. php和python区别-什么是Python和php?Python与PHP有什么区别
  4. 链表的有序集合_JAVA
  5. C++ Primer 5th笔记(chap 18 大型程序工具) using指示
  6. Tensorflow中文文档
  7. JavaWeb中验证码的实现
  8. Sharepoin学习笔记—架构系列—06 Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1
  9. 【转】VC6下安装与配置OpenCV1.0
  10. 移动通信技术的未来发展趋势分析
  11. 机器学习----高斯过程回归
  12. 中国网络词“no zuo no die”被收入美国俚语词典
  13. 燃烧远征怀旧服务器人数小程序,《魔兽世界怀旧服》燃烧的远征制作人访谈 详细讲解新版本...
  14. 【MATLAB】rem和mod函数的区别
  15. 如何删除PDF文件中其中一页?
  16. qpython2_QPython
  17. CentOS下Qt安装
  18. 记录一个使用imgkit库转图片在windows上可能会出现的问题 iis OSError: [WinError 6] 句柄无效
  19. layui后台添加数据给php,layui怎么实现数据绑定
  20. 【JS】1162- 90% 的前端都会使用 ES6 来简化代码,你都用过哪些?

热门文章

  1. Mac及Xcode常用快捷键
  2. 工作是老板的,生命是自己的。
  3. 《Microsoft Sql server 2008 Internals》读书笔记--第十一章DBCC Internals(11)
  4. linux勒索病毒名称,Linux 也有加密勒索病毒了,也有人真的中了
  5. java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解
  6. kafka server 参数解释
  7. 微服务通信带来的问题
  8. 手写自己的MyBatis框架-V2.0结果集处理
  9. 利用模板模式重构JDBC操作
  10. CGLib 和JDK 动态代理对比