使用docker-compose搭建可以擴充的Web Application

來源:互聯網
上載者:User

標籤:

使用docker-compose搭建可以擴充的Web Application

  • 使用docker-compose搭建可以擴充的Web Application
    • 構建 web application
      • 構建一個簡單的base image
      • 寫app
      • 建立startsh 檔案
      • 建立構建檔案 Dockerfile
      • 測試容器
    • 使用docker-compose編排項目
    • 啟動項目
    • 補充說明
    • 總結

這是一次使用docker-compose搭建的可以橫向擴充的web application“架構”。說架構有點大,但整體的思路的確可以作為架構選型有參考價值。
我在這次實踐中所使用的技術棧有:
1. sinatra: 一個非常簡單的ruby的web架構
2. docker
3. docker-compose

直接進入本文

構建 web application構建一個簡單的base image

為什麼要構建一個簡單的base image? 這方便我們在構建項目的時候,統一一下環境。本次實踐構建的base image非常簡單。代碼如下

FROM ruby:2.3.0gem install sinatra

構建命令: docker build -t xudonghe/sinatra:v1 .
構建完成後,我們可以運行 docker images查看結果

寫app

第一步,建立一個簡單的app.rb 檔案
第二部,輸入如下代碼

require ‘sinatra‘set :bind, ‘0.0.0.0‘get ‘/‘ do  ‘Hello world!‘end

這裡有一個值得注意的地方是,需要設定將伺服器綁定在 0.0.0.0 地址上,否則 容器外部將無法訪問。

建立start.sh 檔案

該檔案主要在於用來啟動web application

#!/bin/bashruby -rubygems app.rb
建立構建檔案 Dockerfile
FROM xudonghe/sinatra:v2EXPOSE 4567COPY . /appWORKDIR /appRUN chmod a+x ./start.shCMD ["bash", "start.sh"]

為啥繼承的是xudonghe/sinatra:v2?因為我在本地構建了一個新的版本,其實很簡單。就是開了 4567連接埠,並且將檔案複製到了容器中。在新的構建檔案中,我給start.sh 賦予了可執行許可權,並在容器啟動的時候,會運行該檔案。

測試容器

運行如下測試命令

docker build -t xudonghe/sinatra:v3 .docker run --rm -ti -P -v $(pwd):/app xudonghe/sinatra:v3 ruby -rubygems app.rb

然後在本地訪問

curl http://$(docker-machine ip):4567
使用docker-compose編排項目

整個系統中,就有兩個組件:web 和 nginx-proxy. 我選用的是 jwilder/nginx-proxy. 使用比較簡單。 先將鏡像下載到本地 : docker pull jwilder/nginx-proxy. 然後運行 docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy. 當然,如果需要使用 docker-compose , 我們就不需要這麼手動啟動。 這裡只是做一個簡單的介紹。如果需要繼續下去,需要關閉這個容器。

如下是我的docker-compose.yml檔案

web:  build: .  volumes:    - .:/app  expose:    - 4567  environment:    - VIRTUAL_HOST=yourwebsiteurlnginx:  image: jwilder/nginx-proxy:latest  links:    - web  volumes:    - /var/run/docker.sock:/tmp/docker.sock:ro  ports:    - 80:80    - 443:443

此處有一個關鍵的地方
1. 環境變數要定義好 environment

  environment:    - VIRTUAL_HOST=yourwebsiteurl
  1. nginx需要使用volumes
    /var/run/docker.sock:/tmp/docker.sock:ro
啟動項目
  1. 運行 docker-compose up -d
  2. scale項目 docker-compose scale web=5
  3. 查看系統資訊 docker-compose ps
  4. 瀏覽器訪問 http://yourwebsite
補充說明

如果要按照上面的代碼實踐的話,一般不會成功。因為還缺少一些必要的條件:本地的nginx 做反向 Proxy 和修改 本地 /etc/hosts 檔案,將web地址指向docker. 這裡就不在詳細說明了。 具體的架構圖如下:

其中 nginx 是在 host 機上, nginx-proxy 在 docker 中

總結

該方案的優點在於非常容易對項目進行橫向擴充,缺點在於優點複雜。

使用docker-compose搭建可以擴充的Web Application

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.