网站首页 > 基础教程 正文
你是否想过如何使用Docker和Marathon去创建一个包括分析功能的web应用?
本文将一步步向你展示如何去做。(在2015年阿姆斯特丹XebiCon上我曾经演示过一个早期的demo版本,如何你有兴趣看看。)
架构
这个应用叫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 操作系统上。
猜你喜欢
- 2025-06-24 Docker容器基于国产平台T3的入门部署方法说明——(3)构建镜像
- 2025-06-24 Kubernetes 控制器开发、镜像构建及部署实践
- 2025-06-24 技术分享 | 详解在docker中更新镜像——基于Prometheus
- 2025-06-24 Spring Boot与Docker结合部署的最佳实践
- 2025-06-24 【Docker 新手入门指南】第九章:仓库管理
- 2025-06-24 Docker入门实战(二)——Docker镜像操作
- 2025-06-24 Docker本地构建镜像到远程服务器部署
- 2025-06-24 Docker工具的使用方法进阶-关于镜像
- 2025-06-24 5分钟自建一个轻量级Docker镜像仓库,带可视化管理,真香
- 2025-06-24 Docker+Jenkins:为Java项目插上自动化翅膀
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)