如何在生产中缩放码头集装箱

我最近发现了一个很棒的工具

Docker 是一个开源项目,可以轻松创建轻量级, 便携式,自给自足的容器,从任何应用程序。同样 开发人员可以在笔记本电脑上构建和测试的容器 规模,生产,虚拟机,裸金属,OpenStack 集群,公共 云彩和更多。

假设我有一个运行 Nginx 的 docker 映像和一个连接到外部数据库的网站。如何在生产中缩放容器?

114897 次浏览

更新: 2019-03-11

首先感谢那些多年来支持这个答案的人。

请注意,这个问题是在2013年8月提出的,当时 Docker 还是一项非常新的技术。从那时起: 库伯内特于2014年6月推出,码头蜂群于2015年2月整合到 Docker 引擎中,亚马逊于2015年4月推出 集装箱解决方案,ECS,,2015年8月推出 谷歌推出 GKE。公平地说,生产集装箱的环境已经发生了很大的变化。


简短的回答是,您必须编写自己的逻辑才能做到这一点。

我希望这种特性能够出现在下面的项目中,构建在 docker 之上,旨在支持生产中的应用程序:

更新1

我最近发现的另一个相关项目:

更新2

最新发布的 Openstack 包含对管理 Docker 容器的支持:

更新3

管理 Docker 实例的系统

并介绍如何使用 Packer、 Docker 和 奴隶等工具来交付不可变的服务器基础设施模式

更新4

一篇关于如何使用 农奴将码头集装箱连接在一起的文章:

更新5

使用 马拉松框架在 梅索斯上运行 Docker

中间层 Docker 开发者教程

更新6

上运行 Docker,因为它支持 码头集群分离式调度程序部署

更新7

基于 Docker 的环境编排

大师

更新8

Decking

更新9

谷歌 库伯内特

更新10

Redhat 已经重构了他们的 openshift PAAS 来集成 Docker

更新11

Docker NodeJS 库包装 Docker 命令行并从 json 文件管理它。

更新12

Amazon 的新 集装箱服务支持集群中的扩展。

更新13

严格地说,弗洛克不能“扩展”应用程序,但是它被设计用来完成制作有状态容器(运行数据库服务?)的相关功能便携式跨多个码头主机:

Https://clusterhq.com/

更新14

一个创建描述 Docker 应用程序的可移植模板的项目:

Http://panamax.io/

更新15

Docker 项目现在正在本地处理业务流程(请参见 公告)

更新16

Spotify Helios

参见:

更新17

Openstack 项目现在有了一个名为 Magnum 的新“容器即服务”项目:

显示了很大的前景,使得像 Kubernetes 和 Docker warm 这样的 Docker 编排框架的设置变得很容易。

更新18

牧场主是一个正在迅速成熟的项目

Http://rancher.com/

良好的 UI 和对混合 Docker 基础设施的强烈关注

更新19

格子项目是 Cloud Foundry 的一个分支,用于管理集装箱集群。

更新20

Docker 最近买下了 Tutum:

Https://www.docker.com/tutum

更新21

部署在 库伯内特上的应用程序的包管理器。

Http://helm.sh/

更新22

Vamp 是一个开源和自托管平台,用于管理依赖于容器技术的(微)面向服务的体系结构。

原文地址: http://vamp.io/

更新23

一种分布式、高可用、支持数据中心的调度器

从那些给我们流浪汉和其他强大工具的人那里。

更新24

AWS 的容器托管解决方案,开放源码,基于 库伯内特

Https://supergiant.io/

更新25

位于德国的基于 ApacheMesos 的容器

Https://sloppy.io/features/#features

Docker Inc. 还提供一种名为 Docker 云的容器托管服务

Https://cloud.docker.com/

更新26

J厅 是一个托管的 PAAS 服务,可以自动扩展容器。

Deis 自动缩放 Docker 容器(除其他外)。

Deis (读作 DAY-iss)是一个开源 PaaS,它使得在您自己的服务器上部署和管理应用程序变得非常容易。Deis 构建于 多克CoreOS之上,以 Heroku 为灵感的工作流提供轻量级 PaaS。

以下是开发人员的工作流程:

deis create myapp                      # create a new deis app called "myapp"
git push deis master                   # built with a buildpack or dockerfile
deis scale web=16 worker=4             # scale up docker containers

Deis 自动将 Docker 容器部署到 CoreOS 集群中,并配置 Nginx 路由器将请求路由到健康的 Docker 容器。如果一台主机死机,容器将在几秒钟内在另一台主机上自动重新启动。只需浏览到代理 URL 或使用 deis open命中您的应用程序。

其他一些有用的指令:

deis config:set DATABASE_URL=          # attach to a database w/ an envvar
deis run make test                     # run ephemeral containers for one-off tasks
deis logs                              # get aggregated logs for troubleshooting
deis rollback v23                      # rollback to a prior release

要查看这个操作,请查看 http://deis.io/overview/上的终端视频。你也可以跳到 学习戴斯的概念或者跳到 部署您自己的私有 PaaS

缩放 Docker 的一个明智方法可以是:

  1. 每个服务将是一个 码头容器
  2. 通过链接管理的容器内服务发现(Docker 0.6.5的新特性)
  3. 集装箱将通过 多库部署
  4. 应用程序将通过 造船厂进行管理,而 造船厂又使用 Hipache

另一个来自 Yandex 的码头开源项目:

你可以试试鹤。Tsuru 是一个受 Heroku 启发的开源平台即服务(PaaS) ,它已经在巴西最大的广播电视公司的互联网子公司 Globo.com 上推出了一些产品

它管理应用程序的整个流程,因为容器的创建、部署、路由(使用 hipache)具有很多优秀的特性,比如 docker 集群、单元伸缩、分离部署等等。

请看下面的文档: Http://docs.tsuru.io/

以下是我们关于环境的文章: Http://blog.tsuru.io/2014/04/04/running-tsuru-in-production-scaling-and-segregating-docker-containers/

Openshift 的人也创建了一个项目。你可以找到更多的信息 给你,尝试 测试容器和详细信息 给你。 唯一的问题是现在的解决方案是以 Redhat 为中心的:)

虽然我们是 Deis (Deis.io)的忠实粉丝,并且正在积极地部署它,但是还有其他类似于 PaaS 风格的 Heroku 部署解决方案,包括:

找路人乐队的码头工人:

Https://github.com/longshoreman/longshoreman

来自 CloudCredo 的人使用 CloudFoundry:

Http://www.cloudcredo.com/decker-docker-cloud-foundry/

至于直接的编配,NewRelic 的开源 Centurion 项目似乎很有前途:

Https://github.com/newrelic/centurion

再看看 等等执政官

人类码头管理

图: 使用 Docker.Fig.sh的快速、孤立的开发环境

看看 Rancher.com-它可以管理多个 Docker 主机和更多。

其他文章中没有提到的一个选项是 Helios。它是由 Spotify 建造的,不会尝试做太多。

Https://github.com/spotify/helios