本文講的是<b>使用Compose和Machine來Docker化Flask:從本地到雲端</b>,【編者的話】Docker 1.6釋出了,Compose和Machine都在更新之列。本文具體說明了如何使用這兩個元件來實作本地與雲端的同步部署與管理。
與Docker(v1.6.0)一起,我們将使用:
檢驗一下安裝是否成功:
這樣就為容器啟動和運作做好了準備。現在進入Docker Machine。
要啟動Docker Machine,隻需簡單地運作:
<code>create</code>指令為Docker開發設定了一台“machine”(名為dev)。實際上,它下載下傳了boot2docker,并啟動了一個運作Docker的虛拟機。
運作如下指令來檢視目前運作的Machine:
接下來,讓我們使用Docker Compose來啟動容器,讓Flask應用及Postgres資料庫啟動并運作起來。
來看一眼docker-compose.yml檔案:
這裡,我們定義了四個服務:web、 nginx、 postgres和 data。
首先,web服務是通過Dockerfile的指令在“web”目錄中建構的,在此設定了Python環境,安裝了必要軟體,并将Flask應用運作于8000端口。這個端口會被轉發到宿主環境(比如Docker Machine)的80端口上。該服務還将.env檔案中定義的環境變量添加到了容器裡。
nginx服務作為反向代理用于轉發請求到Flask應用或靜态檔案上。
在建構鏡像前,我們需要将靜态檔案從“web/static”目錄複制到“nginx/static”中,因為nginx Dockerfile是從“nginx”目錄中添加靜态檔案目錄的。要這麼做,隻需要簡單地運作copy.sh腳本:
現在,要運作容器,隻要建構鏡像然後啟動服務即可:
去喝一杯咖啡。或是兩杯。第一次運作時間會久一點。
我們還需要建立資料庫表:
打開浏覽器并通路與Docker Machine關聯的IP位址(<code>docker-machine ip</code>):

棒極了!
要檢視web服務可用的環境變量,運作:
要檢視日志:
你也可以進入Postgres指令行,這是因為我們在docker-compose.yml檔案中轉發了它的端口到宿主環境中,可以這樣添加使用者/角色及資料庫:
一旦完成,通過<code>docker-compose stop</code>停止所有程序。
這将花費幾分鐘來準備droplet并設定一個名為production的新的Docker Machine:
現在,我們運作了兩個Machine,一個本地的,一個在Digital Ocean上:
然後,設定production作為活動machine,并将Docker環境加載到指令行中:
最後,在雲端再次建構Flask應用:
找到Digital Ocean賬号關聯的IP位址,并在浏覽器中檢視。如果所有東西都正确,應該能看到應用已經運作起來了。
祝賀你!
在下面送出你的評論
下一次,我們将擴充這個工作流以包括兩個運作Flask應用的Docker容器,并加入負載均衡。敬請關注!
原文釋出時間為:2015-04-21
本文作者:sean
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:使用Compose和Machine來Docker化Flask:從本地到雲端