原型设计的快速方法docker-compose

还记得连接指令(link)吗?html

若是你已经阅读过 Hands-on Docker tutorial,那么你应该已经可使用命令行连接 Docker 容器。经过命令行将 Node.js 的计数器连接到 Redis 服务器,其命令可能以下所示:前端

$ docker run -d -P --name redis1
$ docker run -d hit_counter -p 3000:3000 --link redis1:redis

如今假设你的应用程序分为三层:linux

  • Web 前端
  • 处理长时间运行任务的批处理层
  • Redis 或者 mongo 数据库

经过“--link”的显式连接只是管理几个容器是能够的,可是可能会由于咱们向应用程序添加更多层或容器而失控。git

加入 docker-composegithub

原型设计的快速方法docker-compose原型设计的快速方法docker-compose

 

Docker Compose logoweb

docker-compose 工具是标准 Docker 工具箱的一部分,也能够单独下载。 它提供了一组丰富的功能,经过纯文本 YAML 文件配置全部应用程序的部件。redis

 

上面的例子看起来像这样:docker

version: "2.0"
services:
  redis1:
    image: redis
  hit_counter:
    build: ./hit_counter
    ports:
     - 3000:3000

从 Docker 1.10 开始,咱们能够利用网络覆盖(network overlays)来帮助咱们在多个主机上进行扩展。 在此以前,连接仅能工做在单个主机上。 “docker-compose scale”命令能够用来在须要时带来更多的计算能力。
查看 docker.com 上的 docker-compose 参考数据库

真实工做示例:Raspberry PI 库存警示api

原型设计的快速方法docker-compose原型设计的快速方法docker-compose

 

新的 Raspberry PI Zero v1.3 图片,由 Pimoroni 提供

Raspberry PI Zero 嗡嗡做响 - 它是一个极小的微型计算机,具备 1GHz CPU 和 512MB RAM,能够运行完整的Linux、Docker、Node.js、Ruby 和其余许多流行的开源工具。 PI Zero 最好的优势之一就是它成本只有 5 美圆。 这也意味着它销售的速度很是之快。

 

原始网站:whereismypizero.com

我发现一个网页,它使用屏幕抓取以找出 4-5 个最受欢迎的折扣网店是否有库存。

  • 网站包含静态 HTML 网页
  • 向每一个折扣网店发出一个 XMLHttpRequest 访问 /public/api/
  • 服务器向每一个网店发出 HTTP 请求并执行抓屏

每一次对 /public/api/ 的调用,其执行花 3 秒钟,而使用 Apache Bench(ab),我每秒只能完成 0.25 个请求。

从新发明轮子

零售商彷佛并不介意 whereismypizero.com 抓取他们的网站的商品库存信息,因此我开始从头写一个相似的工具。 我尝试经过缓存和解耦 web 层来处理更多的抓取请求。 Redis 是执行这项工做的完美工具。 它容许我设置一个自动过时的键/值对(即一个简单的缓存),还能够经过 pub/sub 在 Node.js 进程之间传输消息。

复刻或者追踪放在 github 上的代码: alexellis/pizerostock

若是以前使用过 Node.js,你确定知道它是单线程的,而且任何 CPU 密集型任务,如解析 HTML 或 JSON 均可能致使速度放缓。一种缓解这种状况的方法是使用一个工做进程和 Redis 消息通道做为它和 web 层之间的链接组织。

  • Web 层
    • 使用 200 表明缓冲命中(该商店的 Redis 键存在)
    • 使用 202 表明高速缓存未命中(该商店的 Redis 键不存在,所以发出消息)
    • 由于咱们只是读一个 Redis 键,响应时间很是快。
  • 库存抓取器
    • 执行 HTTP 请求
    • 用于在不一样类型的网店上抓屏
    • 更新 Redis 键的缓存失效时间为 60 秒
    • 另外,锁定一个 Redis 键,以防止对网店过多的 HTTP 请求。
version: "2.0"  
services:  
  web:
    build: ./web/
    ports:
     - "3000:3000"
  stock_fetch:
    build: ./stock_fetch/
  redis:
    image: redis

一旦本地正常工做,再向 Azure 的 Ubuntu 16.04 镜像云部署就轻车熟路,只花了不到 5 分钟。 我登陆、克隆仓库并键入“docker compose up -d”, 这就是全部的工做 - 快速实现整个系统的原型不会比这几个步骤更多。 任何人(包括 whereismypizero.com 的全部者)只需两行命令就能够部署新解决方案:

$ git clone https://github.com/alexellis/pi_zero_stock
$ docker-compose up -d

更新网站很容易,只须要一个“git pull”命令,而后执行“docker-compose up -d”命令,该命令须要带上“--build”参数。

一睹测试网站芳容

目前测试网站使用 docker-compose 部署:stockalert.alexellis.io

原型设计的快速方法docker-compose原型设计的快速方法docker-compose

原文来自:https://linux.cn/article-7939-1.html

本文地址:http://www.linuxprobe.com/docker-compose-prototy.html

相关文章
相关标签/搜索