本文主要演示如何在本地建立映象,並使用該映象在蜂巢上部署 Python 應用。示例採用 Python 的 Flask 框架構建了一個簡單的 Web 應用。
方法/步驟
安裝 Docker 工具
在Windows 或 Mac 環境下 ,安裝 Boot2dcoker、DockerToolBox 等工具。 具體請參考:https://docs.docker.com/engine/installation/。注:Docker 客戶端版本要求 1.7 及以上。
建立 Python 應用
本地建立 Python 應用 hello.py,且該應用的原始碼如下所示:
#-*- coding: utf-8 -*- from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run(host="0.0.0.0", port=80)
注意如下問題:
Python 語言的縮排問題;
IP 應指定為 0.0.0.0 (不要指定為 127.0.0.1 或 localhost,否則只能本機訪問);
埠需要與服務部署時的負載均衡目的埠(預設 80)一致。
建立 Dockerfile
本地建立的 Dockerfile,具體內容如下所示,主要進行了如下操作:
更新 Python 版本;
安裝 Pip 與 Flask;
新增本地的 Python 應用(本示例為 hello.py)並執行。
FROM hub.c.163.com/nce2/python:2.7
# Sources
RUN echo "deb wheezy main non-free contrib" > /etc/apt/sources.list
RUN echo "deb wheezy-proposed-updates main contrib non-free" >> /etc/apt/sources.list
RUN echo "deb-src wheezy main non-free contrib" >> /etc/apt/sources.list
RUN echo "deb-src wheezy-proposed-updates main contrib non-free" >> /etc/apt/sources.list
RUN \ apt-get update -y && \ apt-get remove -y python && \ apt-get install -y python
RUN wget -q "https://bootstrap.pypa.io/get-pip.py" && \ python get-pip.py > /dev/null && \ pip install Flask
ADD hello.py /root/hello.py
WORKDIR /root/
CMD python hello.py
注意:此 Dockerfile 只能在 Windows 和 Mac 上面建立成功,在 Linux 系統上則會報錯。
建立本地映象
切換到 Dockerfile 所在的目錄下,然後執行如下命令生成本地映象:
docker build -t flaskdemo .
執行的過程如下圖所示:
推送本地映象
上傳本地映象至映象倉庫的方法請參考 https://c.163.com/wiki/index.php?title=如何推送本地映象
上傳成功後,可在蜂巢的映象倉庫列表檢視。
建立叢集
上傳映象成功後,可利用自定義映象建立容器或服務。對於一般的 Web 應用,蜂巢建議採用叢集的方式進行建立,可以提供負載均衡的服務。
1. 登入蜂巢控制檯;
2. 點選左側導航選單的「叢集管理」;
3. 選擇「自定義映象」;
4. 選中本地推送的映象,且負載均衡的目的埠號需與服務監聽的埠號保持一致(負載均衡的埠號為對外暴露的埠),開始建立叢集:
部署完畢
建立成功後,可通過叢集列表檢視公網 IP:
在瀏覽器中輸入該 IP 地址及設定的埠(本例設定為 80,故省略),即可訪問部署的 Python 應用:
FAQ
為什麼 flaskdemo 的容器建立成功之後,卻無法執行?
檢查 hello.py 檔案是否輸入錯誤,邏輯獨立的語句前面不能留有空格。
使用上傳的映象建立容器時,出現「私有網 IP 繫結失敗」時,是什麼原因?
可能是 hello.py 檔案存在問題。
為什麼服務建立成功以後,輸入 IP 地址後出現以下介面?
埠配置出現錯誤,埠應當設定成:源埠:80 目的埠:80。