如何在生产中扩展Docker容器


139

所以我最近发现了这个很棒的工具,它说

Docker是一个开源项目,可以从任何应用程序轻松创建轻量,可移植,自给自足的容器。开发人员在笔记本电脑上构建和测试的容器可以在生产环境中大规模运行在VM,裸机,OpenStack集群,公共云等上。

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

Answers:


585

更新时间:2019-03-11

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

请注意,这个问题是在2013年8月提出的,当时Docker仍然是一项非常新的技术。此后:Kubernetes于2014年6月推出,Docker swarm在2015年2月被集成到Docker引擎中,亚马逊于2015年4月推出了其容器解决方案ECS,谷歌于 2015年8月推出了GKE。发生了很大变化。


简短的答案是,您必须编写自己的逻辑来执行此操作。

我希望这种功能会在以下基于docker的项目中出现,并旨在支持生产中的应用程序:

更新1

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

更新2

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

更新3

用于管理Docker实例的系统

以及有关如何使用Packer,Docker和Serf之类的工具交付不可变的服务器基础结构模式的演示

更新4

关于如何使用serf将docker容器连接在一起的整洁文章:

更新5

使用Marathon框架在Mesos上运行Docker

Mesosphere Docker开发人员教程

更新6

Tsuru上运行Docker,因为它支持docker-cluster单独的调度程序部署

更新7

基于Docker的环境编排

大师级

更新8

装饰

更新9

Google kubernetes

更新10

Redhat重构了openshift PAAS以集成Docker

更新11

Docker NodeJS库包装了Docker命令行并通过json文件对其进行管理。

更新12

Amazon的新容器服务可在集群中进行扩展。

更新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/

良好的用户界面,并高度关注混合的Docker基础架构

更新19

格项目是的Cloud Foundry的管理容器集群的一个分支。

更新20

Docker最近购买了Tutum:

https://www.docker.com/tutum

更新21

用于Kubernetes上部署的应用程序的程序包管理器。

http://helm.sh/

更新22

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

http://vamp.io/

更新23

分布式的,高度可用的,支持数据中心的调度程序

来自给我们Vagrant和其他强大工具的人。

更新24

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

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非常正确,但仅在最新版本中。
马克·奥康纳

哇,我的码头-你是Rockin Fock!谢谢!
jredd 2014年

2
@ MarkO'Connor该mesosphere/mesos-docker项目已被弃用,并替换为mesosphere/deimosgithub.com/mesosphere/deimos
Ross Allen


42

Deis可以自动缩放Docker容器(以及其他功能)。

Deis(发音为DAY-iss)是一个开源PaaS,可轻松在您自己的服务器上部署和管理应用程序。Deis建立在DockerCoreOS的基础上,以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会在CoreOS集群上自动部署Docker容器,并配置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 2013年

19

您可以尝试鹤。Tsuru是受Heroku启发的开源PaaS,已经在Globo.com(巴西最大的广播电视公司的互联网分支)中生产了一些产品。

它管理应用程序的整个流程,因为容器的创建,部署,路由(带有头痛)具有许多不错的功能,例如docker集群,单位扩展,隔离部署等。

看一下下面的文档:http : //docs.tsuru.io/

这是我们涵盖环境的帖子:http : //blog.tsuru.io/2014/04/04/running-tsuru-in-production-scaling-and-segregating-docker-containers/


18

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


Rancher是开源的,并且包含Kubernetes的完整发行版。它提供了一个用于运行许多不同集群,管理基础架构的平台,并大大简化了正在运行的容器。
香农·威廉姆斯

9

扩展Docker的明智方法可能是:

  1. 每个服务将是一个docker容器
  2. 通过链接管理容器内服务发现(来自docker 0.6.5的新功能
  3. 容器将通过Dokku进行部署
  4. 申请将通过Shipyard进行管理,而Shipyard则使用hipache

Yandex的另一个Docker开源项目:


您能否提供有关如何在船厂旁边使用Dokku的更多建议?
djskinner,2015年


2

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




1

巴拿马型:人性化Docker管理。巴拿马型

图:使用Docker的快速隔离开发环境。


我认为Fig还不支持多主机部署。
lolski

是这样吗!因此,这仅有助于协调在单个主机内设置应用程序吗?
fatuhoku 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.