Tutum 入门介绍

阅读 786
收藏 37
2016-10-01
原文链接:mp.weixin.qq.com


越来越多的团队在应用程序整个生命周期中通过使用Docker使开发人员和系统管理员的工作更加轻松。

话虽如此,在生产环境中部署你的容器仍是整个生命周期中没有清晰思路可循的一部分。这个就是Tutum(https://www.tutum.co/)所要做的,现在以Docker Cloud著称,所要构建的地方。

何为Tutum?

之前,许多Docker用户在生产环境的应用部署过程中纷纷采取一些脆弱的自定义脚本。Tutum的诞生替代了这些过程,称之为”Orchestration-as-a-Service’(编排即服务)。

虽然像AWS或Digital Ocean这类IaaS的供应商提供了你需要运行你的应用程序的基础设施,你仍需担负起管理这些基础设施的职责。

一个PaaS供应商,比如Heroku,通过抽象底层的基础设施为你做了简化,让你只需简单的提交代码。但是它会在你这样做时候,有意想不到的副作用来打击你。

在简单和灵活之间做出一个基本的权衡。Tutum试图提供一个两全其美的方案。正如他们所描述的(http://blog.tutum.co/2014/09/25/what-is-tutum),“Tutum结合了IaaS和Pass的优势,没有任何缺点”。

通过Tutum,你可以带着自己的云供应商,而他们会处理其他的东西。目前微软的Azure, Digital Ocean, AWS, 和SoftLayer原生支持。此外,用原生的“自带节点”功能,几乎支持所有的Linux主机。

一旦你选择你的供应商,Tutum会让你构建、部署以及管理你的应用,无论你怎么做。它还有功能齐全的仪表盘、CLI甚至RESTful API,随你而选。

为什么我要尝试?

如果你曾经使用过laaS,并且对于它的复杂性比较疑惑,或者如果你曾经使用过PaaS,并且对于它的灵活性比较疑惑,Tutum可能是你要找的答案。Tutum从基础设施层分离出了编排层。这极大简化了事情并具有防止锁定的好处。

在AWS上运行的应用你想要切换到Digital Ocean吗?你会为这个问题头痛。然而,如果你使用Tutum来编排,只需点击几下和花费几分钟时间就能完成切换。

Docker并不一定适用所有场景。现在,随着Docker收购Tutum后更名为Docker Cloud(https://cloud.docker.com/),对于如何将Docker的使用扩展到应用程序生命周期的生产环境部分有了很清晰的思路。

由于收购和品牌重构,文档处于不确认的状态,并可能在不久的未来看到一些细节变化。

推荐了这么多。让我们深入下去。在这一部分,我们会重温Docker Cloud的一些基本的构建模块,以及你需要熟悉的主要概念和术语。

供应商

供应商是底层IaaS,它将提供负责运行你的应用所需的基础设施(例如:AWS或Digital Ocean)。如果你愿意提供自有基础设施,Docker Cloud允许你通过安装它的cloud agent来使用任何连接至互联网的Linux主机。

节点

节点是通过你选择的供应商提供的Linux主机(例如:AWS的EC2 instances,Digital Ocean的droplets)。节点被安排到节点集群(其可以包括单一节点)。一个集群只是同一提供商的同一类型的节点的集合。集群允许你通过简单的拖拽一个滑块去添加更多的节点来扩展你的应用。

服务

服务是来自同一镜像的一组容器。这使你能够跨节点的扩展你的应用。你也能够通过不同节点和不同的提供者将不同的服务链接在一起(例如,一个负载均衡器为一个应用程序服务)。

堆栈

堆栈允许你在一个逻辑应用内联合多个服务。堆栈是由指定的stack file(堆栈文件)来配置。它仅仅是一个YAML格式的文档,它定义了使用哪些服务以及一些其他配置,例如环境变量、部署标签和运行容器的数量。

现在我们有基本的术语了,让我们继续深入,部署一个示例应用。

一个Docker Cloud的示例应用

由于本文的重点是Docker Cloud,我们的示例应用将尽可能的简单。我们将要演示如何使用Docker Cloud,而不是如何构建应用程序。

出于这个原因,我们只演示一个”Hello World”的Golang应用程序。同样,我们将在这个例子中使用Digital Ocean,但这个过程对于其他提供者和其他编程语言是一样的。

安装步骤

首先,你还没有账户的话你需要去注册。一旦登录后,我们将使用的仪表盘来做一些初始设置。

  1. 首先,点击“add a cloud provider”。在这个例子中,我们将使用Digital Ocean,因为他们只需点击一个按钮就能连接一个账号。

  2. 点击“Link Account”,你会被带到Digital Ocean来授权使用你的账号。

  3. 一旦你回到Docker Cloud,回到welcome screen。

  4. 从welcome screen点击“Deploy your first node”。

  5. 在你的节点集群中输入一个名字并确定你的供应商(本例是Digital Ocean)是被选中的。

  6. 你可以进行调整,或者将剩余的选项保留原来的状态。

  7. 最后,点击“Launch Node Cluster”。这将需要几分钟的时间来启动与运行。

一旦你的集群启动并运行,我们可以切换到命令行。首先,我们需要安装CLI。

如果你使用的是Mac,你需要安装Homebrew(http://brew.sh/)。

brew install docker-cloud

如果你使用的是Linux或者Windows:

pip install docker-cloud

在我们能够真正开始之前,我们需要登录我们的Docker ID:

docker login

非常好!我们已经完成了基本的设置,接下来我们就引入实际的应用了。

代码

来吧,创建一个目录(本例使用tutum-go)。在新目录里,我们需要三个文件。第一,main.go,是我们Golang应用的全部:

package main
import (
"io"
"net/http"
)
func hello(w http.ResponseWriter, r *http.Request)  {
io.WriteString(w, "Hello, World!")
}
func main()  {
http.HandleFunc("/", hello)

http.ListenAndServe(":80", nil)
}

这一切非常简单。我们的应用简单的监听80端口并响应文本”Hello, World!“,这个对于Docker Cloud来说,不用分散手边的任务就能非常完美的展示它的能力的。

下一步,我们需要一个基本的Dockerfile。一个Dockerfile仅是一个文本文件包含了必须遵循的指令。要更深入的了解,可以参阅Tim Butler的文章(https://twitter.com/timbutler)。

对于我们而言,这些写就可以了:

FROM golang
MAINTAINER Jason Kriss 
ADD . /go/src/github.com/jasonkriss/tutum-go
RUN go install github.com/jasonkriss/tutum-go
CMD /go/bin/tutum-go
EXPOSE 80

最后,添加到我们的docker-compose.yml

web: 
build: . 
ports: 
    - "80"

这就是我们应用所需的所有代码。本章的其余部分将讨论在Docker Cloud上部署这个应用。

部署

回到命令行,让我们从我们的源码构建一个新的镜像:

docker build -t tutum-go .

现在为新镜像加一个标签

docker tag tutum-go jasonkriss/tutum-go

最后,提交这个镜像到仓库里:

docker push jasonkriss/tutum-go

现在我们仅需部署这个应用作为Tutum服务:

docker-cloud service run -p 80 --name web jasonkriss/tutum-go

这命令使用我们刚创建的镜像服务,给它的命名为“web”并运行它,在容器里输出80端口。这可能需要几分钟的时间启动和运行,但
我们能够用下面的命令检查状态:

docker-cloud container ps --no-trunc --service web

一旦STATUS变为Running,我们能够获取PORTS下的URL。打开浏览器,粘贴URL。我们能够看到”Hello, World!“。我们已经完成第一个服务的部署!

下一步怎么样?

目前为止,我们已经看到如何把一个简单的Golang应用以一个Docker Cloud服务的方式部署到你选择的云提供商运行在一个节点集群上。

Docker Cloud非常强大。它可以更容易部署更复杂的应用和基础设施。接下来让我们展示一下你可能会在更重要的应用中使用到的一些步骤。

服务扩展

我们当前有一个容器在运行。想要扩展更多的容器,很简单:

docker-cloud service scale web 2

负载均衡

如果你按照前面的步骤并扩展更多的应用容器,你可能会想一些办法去分发请求到所有的容器。要实现这个需要部署一个特定的负载均衡服务并连接到现有的服务。更多的信息请点击这里(https://docs.docker.com/docker-cloud/getting-started/deploy-app/9_load-balance_the_service/)。

使用一个数据库

最有趣的应用会需要某些方法来持久化数据。幸好,Docker Cloud通过它的Jumpstart(https://github.com/odewahn/docker-jumpstart/)支持最流行的数据存储。

最终,它会要求你为数据存储创建另一个服务,然后连接到现有的服务。点击此处(https://docs.docker.com/docker-cloud/getting-started/golang/10_provision_a_data_backend_for_your_service)查看更多详情。

创建一个堆栈

正如我们所看到的,Docker Cloud非常容易的就能获取和运行Web应用、负载均衡以及数据库。然而,我们仍需要去一步步的定义多个服务。

幸运地是,有一个自动实现的方法。堆栈可以让你指定若干个连接服务并让它们一起部署。这篇文档(https://docs.docker.com/docker-cloud/feature-reference/stacks)提供了更多的信息如何去做。

总结

随着被Docker收购,Tutum已成定局。这对于已经使用Docker的人们和那些新加入的人来说都是一个好消息。

你无论使用什么基础设施都可以灵活的运行你的“容器云”,同时在PaaS外给你提供了便利性,这就回答了“我如何在生产环境中运行?”的问题。

Docker Cloud使“在任何云端构建、部署和管理你的应用”变得轻松自如。现在,它正式地成为Docker的一部分,我们可以看到它变得更稳定。

本文为翻译文章,点击阅读原文链接可查看原文,感谢田浩浩对文章的审校。

查看图片
查看图片




评论