Flask 實作 Docker-compose (Flask+Nginx+PostgreSQL)

flask_docker_compose_Max行銷誌

ㄧ. 首先安裝 Docker 教學

▍Mac 的朋友

Docker 官網下載 Docker Desktop on Mac

▍Windows 的朋友

Docker 官網下載 Docker Desktop on Windows

▍Linux 的朋友

Linux 安裝 Docker 指令

Linux 安裝 Docker Compose 指令

以上安裝 docker 指令參考於 Docker 官網 install 頁

二. 進入 Flask 實作 docker-compose 教學

在前面兩篇我們介紹了使用 Dockerfile 來建立 Flask Server 和 Nginx,並使用指令 docker run 來運行,但會需要輸入很多次指令才能讓一個完整的 Project 啟動。所以我們今天要介紹的就是 Docker Compose 。

只需要將要設定寫在 docker-compose.yml ,就可以一次運行多個 Dockerfile,並且協調 Service 之間的相依性和調度安排,這就是 Docker Compose 的功用。

而關於 Dockerfile 的實作可以參考前面介紹的兩篇文章:
1. 實作 Dockerfile + flask 教學 (附GitHub完整程式)
2. 實作 Dockerfile + nginx + ssl + flask 教學 (附GitHub完整程式)

三. 首先了解專案資料夾結構

此次 Demo 的範例 code 都放在這邊,歡迎 git clone 使用~
flask-template GitHub

完整的資料夾結構如下:

其中這部分如同之前有介紹過的 Dockerfile + Flask 結構

而這部份如同之前有介紹的 Dockerfile + Nginx 結構

最後再加上 docker-compose.yml

四. 啟動 Project

1.首先 Git Clone flask-template GitHub

2.輸入啟動指令

3.運行起來後
* 進入 http://127.0.0.1/ 會返回 hello world
* 進入 http://127.0.0.1/create 會在 postgreSQL 資料庫裡建立起 person 的 Table
* 進入 http://127.0.0.1/max 會將 ‘Max’ 輸入進 postgreSQL 資料庫

4.如果都運行正常,那就恭喜你啦~可以改成用這個模板改成自己的 Flask Sever 囉!

五. 解析 docker-compose.yml

此次完整範例如下:

version
這邊定義 Compose 的版本,目前 Version 3 以上是比較常見和官方較推薦使用的版本,而此次使用的是 version: “3.7”,想知道目前最新的版本資訊可以看這邊 Compose file versions and upgrading | Docker Documentation

build
取得 DockerFile 的位置

depends_on

像是以下範例代表,必須先啟動 db 後,才會運行 Flask 的部分

port vs expose

眼尖的朋友們一定有留意到,Flask 使用的是 expose,而 Nginx 使用的是 ports,這兩個到底有什麼差別呢?

當使用 expose 時,只有暴露給其他 container 可以使用,而從外部主機連線時是無法連線的。所以 Nginx 使用的是 ports 方法,可以讓外部主機從 80 或 443 port 連線。

volumes

從本地資料夾掛載進 container 的資料,這樣可以直接在本地端專案資料夾改動檔案,container 裡面的檔案也會更動也不用重新 build image!

最後~

此篇的完整程式碼放置於 ,歡迎 git clone 使用。 flask-template GitHub

▍回顧本篇的 Flask 實作 docker-compose 教學容:

  • 安裝 Docker 教學
  • 進入 Flask 實作 docker-compose 教學
    1. 了解專案資料夾結構
    2. 啟動 Project
    3. 解析 docker-compose.yml

更多 Flask 教學相關閱讀:

▍關於 Flask教學系列目錄:

▍關於 Flask 使用 Docker 相關文章:

▍其他 Flask 相關教學:

有關 Max行銷誌的最新文章,都會發佈在 Max 的 Facebook 粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!

在〈Flask 實作 Docker-compose (Flask+Nginx+PostgreSQL)〉中有 3 則留言

  1. Hi Max,
    感謝本篇的教學,有一個問題想請問一下。如果想要使用Flask-Migration,讓docker-compose up啟動的時候,能夠按照models去建立db table,請問要怎麼做呢?Flask-Migration有提到flask db init的指令,但目前沒有找到如何整合Dockerfile, uWSGI, Flask-Migration的教學。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *