专业编程基础技术教程

网站首页 > 基础教程 正文

使用docker 和marathon 构建一个带分析的web应用

ccvgpt 2025-06-24 12:09:11 基础教程 5 ℃

你是否想过如何使用Docker和Marathon去创建一个包括分析功能的web应用?

本文将一步步向你展示如何去做。(在2015年阿姆斯特丹XebiCon上我曾经演示过一个早期的demo版本,如何你有兴趣看看。)

使用docker 和marathon 构建一个带分析的web应用

架构

这个应用叫m-shop,是一个虚构的商店,由web应用(nginx+Rdis)和以ELK实现的分析部分组成。架构如下:

注意system部分(包括 Mesos/Marathon和服务发现)和application部分。为了保持简单和易于复现,我选择Playa Mesos作为部署环境,它是一个预装了Mesos和Marathon的Vagrant盒子。

实践:从Marathon到ELK

如果你只是对实现部分感兴趣,下面的视频展示我是如何安装实现的。

如果你想自己试试,你需要做以下这些:

首先,安装Playa Mesos,并且下载GitHub 仓库mhausenblas/m-shop.

其次,通过在Vagrant box的/etc/mesos-dns/下创建config.js来准备Mesos-DNS.

现在,我们就已做好部署应用的准备了。

切换到你刚才复制的GitHub repo目录,我自己的目录是~/m-shop,执行下面的命令:

~/m-shop$ http PUT http:10.141.141.10:8080/v2/groups < mesos-dns/system.json

此时我们已部署好了系统和应用部分,打开浏览器,输入以下地址http://10.141.141.10:8080,

我们应当下面类似的界面:

刚才部署的m-shop.json和system.json这两个应用特定的文件,用于定义所有的组,应用程序和必须依赖:

服务发现部分需要注意的一点是,Marathon使用的应用程序ID,如/m-shop/site/webdis,是被Mesos-DNS翻译到RFC952的标准名称。 你可以通过Vagrant中一个普通的DNS工具来查看 :

上面是一个DNS查询,告诉你
webdis-site-m-sho.marathon.mesos服务在10.141.141.10:31000上是可用的,以及服务发现组件Sedi使用Mesos-DNS HTTP API 做些什么 。

从最终用户的角度来看,也许最感兴趣的部分是用nginx 实现的web 应用前端界面:

如果有兴趣试试你可以修改网站的内容。要注意的是你需要在m-shop.json中修改nginx Docker 映像为你自己的。

建立Docker映像,切换到frontend-static/目录,执行下面的步骤(用你自己的repo 名字):

~/m-shop/frontend-static $ docker build -t mhausenblas/m-shop-nginx .

~/m-shop/frontend-static $ docker push mhausenblas/m-shop-nginx

应用的分析部分,我使用现成的包括Elasticsearch,Logstash和Kibana一站式映像。一开始,ELK完成设置可能需要等2分钟,然后在/m-shop/site/nginx应用上执行一些交互操作,如单击等。

为了确认你有可供Kibana显示的数据,你可使用下面的命令查看Vagrant box的日志:

Ls –al /tmp/m-shop/nginx

当Kibana UI 启动后,选择logstash- 索引和@timestamp,你将看到如下界面:

我希望这个小的demo应用可以给你一个如何使用Docker和Marathon构建应用的想法,你或许希望以此作为探索这方面基础。 一些未来的实验值得去探索,包括增加一个负载均衡,把应用部署到Mesosphere Datacenter 操作系统上。

Tags:

最近发表
标签列表