原型設計的快速方法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

相關文章
相關標籤/搜索