使用 Python Fask + Redis 來統計網頁點閱人數的專案。
會在專案下建立以下檔案:
建立環境:
創建專案資料夾。
$ mkdir wkdir
$ cd wkdir
在資料夾下建立 app.py
當做 web app 進入點,裡面有 Flask 和 Redis 操作,當使用者瀏覽首頁時,Redis 會記錄次數,若有 Exception 則有 Retry 機制。
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def get_index():
count = get_hit_count()
return 'Yo! 你是第 {} 次瀏覽\\n'.format(count)
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
建立套件依賴包 requirements.txt
,讓 Dockerfile 可以下指令安裝 Python 套件。
flask
redis
建立 Web App 的 Dockerfile
,用來產生 Image。
# 從 python3.4 基礎上加工
FROM python:3.4-alpine
# 將本地端程式碼複製到 container 裡面 ./code 資料夾
ADD . /code
# container 裡面的工作目錄
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
用 Docker Compose file 描述 services 運作狀況,我們的專案共有 web 和 redis 兩個 service,建立以下 docker-compose.yml
。
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
# 把當前資料夾 mount 掛載進去 container,這樣可以直接在本地端專案資料夾改動檔案,container 裡面的檔案也會更動也不用重新 build image
- .:/code
redis:
# 從 Docker Hub registry 來的 image
image: "redis:alpine"
用 Docker Compose 執行你的 Web app
$ docker-compose up -d
到 http://127.0.0.1:5000/ 查看結果
終止並移除 Container
$ docker-compose down