如何在生产环境中扩展Docker容器

139

最近我发现了一个很棒的工具,它说:

Docker是一个开源项目,可以轻松创建轻量级、可移植和自给自足的容器。开发人员在笔记本上构建和测试的同一容器可以在各种规模、生产环境中运行,如虚拟机、裸机、OpenStack集群、公共云等。

假设我有一个运行Nginx并连接到外部数据库的Docker镜像。那么,如何在生产环境中扩展容器?

10个回答

599

更新:2019-03-11

首先感谢多年来支持本答案的人们。

请注意,这个问题是在2013年8月提出的,当时Docker还是一项非常新的技术。此后:Kubernetes于2014年6月推出,Docker Swarm于2015年2月集成到Docker引擎中,亚马逊于2015年4月推出了其容器解决方案ECS,Google于2015年8月推出了GKE。可以说,生产容器的格局已经发生了巨大变化。


简短的回答是,您必须编写自己的逻辑来实现此功能。

我预计这种功能会从以下基于Docker构建、旨在支持生产应用的项目中出现:

更新1

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

更新2

最新的Openstack版本包含管理Docker容器的支持:

更新3

用于管理Docker实例的系统

以及如何使用Packer、Docker和Serf等工具提供不可变服务器架构模式的演示。

更新4

一篇关于如何使用serf将Docker容器组合在一起的整洁文章:

更新5

使用MesosMarathon框架上运行Docker

Mesosphere Docker开发人员教程

更新6

Tsuru上运行Docker,因为它支持docker-cluster分离的调度器部署

更新7

基于Docker的环境编排

maestro-ng

更新8

decking.io

更新9

谷歌kubernetes

更新10

红帽重新设计了他们的openshift PAAS以集成Docker

更新11

一个包装了Docker命令行并将其从JSON文件中进行管理的Docker NodeJS库。

更新12

亚马逊的新容器服务可以实现集群扩展。

更新13

严格来说,Flocker并不会“扩展”应用程序,但它旨在实现使有状态容器(运行数据库服务?)在多个Docker主机之间可移植的相关功能:

https://clusterhq.com/

更新14

一个创建描述Docker应用程序的便携式模板的项目:

http://panamax.io/

更新15

Docker项目现在原生地解决编排问题(请参见公告

更新16

Spotify Helios

另请参见:

更新17

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

显示了很多潜力,可以轻松设置Docker编排框架,如Kubernetes和Docker swarm。

更新18

Rancher是一个迅速成熟的项目

http://rancher.com/

良好的UI,并专注于混合Docker基础设施

更新19

Lattice项目是Cloud Foundry的一个分支,用于管理容器集群。

更新20

Docker最近收购了Tutum:

https://www.docker.com/tutum

更新21

应用程序包管理器,部署在Kubernetes上。

http://helm.sh/

更新22

Vamp是一个基于容器技术的开源自托管平台,用于管理(micro)service架构。

http://vamp.io/

更新23

A Distributed, Highly Available, Datacenter-Aware Scheduler

由为我们提供Vagrant和其他强大工具的团队提供。

更新24

基于Kubernetes的AWS容器托管解决方案,开源的。

https://supergiant.io/

更新25

位于德国的基于Apache Mesos的容器托管。

https://sloppy.io/features/#features

Docker Inc.还提供了名为Docker Cloud的容器托管服务。

https://cloud.docker.com/

更新26

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


1
OpenStack是这个列表中的另一个候选者。 - ben schwartz
@benschwartz 非常正确,但仅适用于最新版本。 - Mark O'Connor
2
@MarkO'Connor mesosphere/mesos-docker 项目已被弃用,取而代之的是 mesosphere/deimos:https://github.com/mesosphere/deimos - Ross Allen
1
另外值得一提的是,来自谷歌的项目 - https://github.com/GoogleCloudPlatform/kubernetes - mjsalinger
@MarkO'Connor Mesosphere/deimos已被弃用,Docker支持已内置于Mesos核心中。 - Ken
显示剩余20条评论

42

Deis自动化缩放Docker容器(以及其他内容)。

Deis(发音为DAY-iss)是一个开源PaaS,可以轻松地在您自己的服务器上部署和管理应用程序。 Deis基于DockerCoreOS构建,提供了一个轻量级的PaaS,并采用Heroku的工作流程。

以下是开发者的工作流程:

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/。您还可以了解Deis的概念,或直接跳转到部署您自己的私有PaaS


3
+1我对你的项目很感兴趣,继续保持好工作! - Mark O'Connor

19

您可以尝试使用 Tsuru。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/


17

请看看 Rancher.com - 它可以管理多个Docker主机以及更多其他功能。


Rancher是一款开源软件,包含完整的Kubernetes发行版。它提供了一个平台来运行许多不同的集群,管理基础设施,并极大地简化了容器的运行。 - Shannon Williams

9
一种合理的缩放 Docker 的方法可能是:
  1. 每个服务将是一个 Docker 容器
  2. 通过链接进行容器内的服务发现(Docker 0.6.5 的新功能
  3. 使用 Dokku 部署容器
  4. 应用程序将通过 Shipyard 进行管理,而 Shipyard 又使用 hipache

另一个 Yandex 开源的 Docker 项目:


你能提供更多关于如何在Shipyard旁边使用Dokku的建议吗? - djskinner
这个链接已经失效 -- http://docs.docker.io/en/latest/use/working_with_links_names/#links-service-discovery-for-docker - Ankur

2
Openshift团队也创建了一个项目。你可以在这里找到更多信息,尝试测试容器并查看详细信息此处。 唯一的问题是该解决方案目前只支持Redhat系统 :)

2

1

1

1
Panamax: 人性化的Docker管理工具。panamax.io Fig: 使用Docker快速隔离开发环境。fig.sh

我认为Fig还不支持多主机部署。 - lolski
是这样的!所以它只是帮助编排在单个主机内设置应用程序吗? - fatuhoku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接