ㄧ. 首先安裝 Docker 教學
▍Mac 的朋友
Docker 官網下載 Docker Desktop on Mac
▍Windows 的朋友
Docker 官網下載 Docker Desktop on Windows
▍Linux 的朋友
Linux 安裝 Docker 指令
$ sudo apt-get install -y curl
$ curl -s https://get.docker.com | sudo sh
Linux 安裝 Docker Compose 指令
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/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
完整的資料夾結構如下:
template
├── docker-compose.yml
├── flask
│ ├── Dockerfile
│ ├── app
│ ├── app.ini
│ ├── main.py
│ ├── requirements.txt
│ └── venv
└── nginx
├── Dockerfile
├── nginx.conf
├── ssl.csr
└── ssl.key
其中這部分如同之前有介紹過的 Dockerfile + Flask 結構
├── flask
├── Dockerfile
├── app
├── app.ini
├── main.py
├── requirements.txt
└── venv
而這部份如同之前有介紹的 Dockerfile + Nginx 結構
└── nginx
├── Dockerfile
├── nginx.conf
├── ssl.csr
└── ssl.key
最後再加上 docker-compose.yml
template
├── docker-compose.yml
四. 啟動 Project
1.首先 Git Clone flask-template GitHub
2.輸入啟動指令
$ docker-compose up
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: "3.7"
services:
flask:
build: ./flask
container_name: template_flask
# restart: always
environment:
- APP_NAME=FlaskApp
expose:
- 8080
depends_on:
- db
db:
image: postgres
container_name: postgres
volumes:
- ./postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: db_name
POSTGRES_USER: postgres_n
POSTGRES_PASSWORD: postgres_p
ports:
- 5432:5432
nginx:
build: ./nginx
container_name: template_nginx
# restart: always
ports:
- "80:80"
- "443:443"
depends_on:
- flask
▍version
這邊定義 Compose 的版本,目前 Version 3 以上是比較常見和官方較推薦使用的版本,而此次使用的是 version: “3.7”,想知道目前最新的版本資訊可以看這邊 Compose file versions and upgrading | Docker Documentation
version: "3.7"
▍build
取得 DockerFile 的位置
flask:
build: ./flask
像是以下範例代表,必須先啟動 db 後,才會運行 Flask 的部分
flask:
build: ./flask
container_name: template_flask
# restart: always
environment:
- APP_NAME=FlaskApp
expose:
- 8080
depends_on:
- db
眼尖的朋友們一定有留意到,Flask 使用的是 expose,而 Nginx 使用的是 ports,這兩個到底有什麼差別呢?
當使用 expose 時,只有暴露給其他 container 可以使用,而從外部主機連線時是無法連線的。所以 Nginx 使用的是 ports 方法,可以讓外部主機從 80 或 443 port 連線。
flask:
build: ./flask
container_name: template_flask
# restart: always
environment:
- APP_NAME=FlaskApp
expose:
- 8080
depends_on:
- db
nginx:
build: ./nginx
container_name: template_nginx
# restart: always
ports:
- "80:80"
- "443:443"
從本地資料夾掛載進 container 的資料,這樣可以直接在本地端專案資料夾改動檔案,container 裡面的檔案也會更動也不用重新 build image!
volumes:
# 使用絕對路徑
- /opt/cache:/tmp/cache
# 以 Compose 配置文件為中心的相對路徑
- ./cache:/tmp/cache
# ~/ 表示的是目錄
- ~/cache://tmp/cache
最後~
此篇的完整程式碼放置於 ,歡迎 git clone 使用。 flask-template GitHub
▍回顧本篇的 Flask 實作 docker-compose 教學容:
- 安裝 Docker 教學
- 進入 Flask 實作 docker-compose 教學
- 了解專案資料夾結構
- 啟動 Project
- 解析 docker-compose.yml
更多 Flask 教學相關閱讀:
▍關於 Flask教學系列目錄:
▍關於 Flask 使用 Docker 相關文章:
- 第一集:實作 Dockerfile + flask 教學 (附GitHub完整程式)
- 第二集:實作 Dockerfile + nginx + ssl + flask 教學 (附GitHub完整程式)
- 第三集:實作 Docker-compose (Flask+Nginx+PostgreSQL)
▍其他 Flask 相關教學:
- 【Flask教學系列】Flask 為甚麼需要 WSGI 與 Nginx
- 【Flask教學系列】Flask-SQLAlchemy 資料庫連線&設定入門 (一)
- 【Flask教學系列】Flask-JWT-Extended 實作
- 【Flask教學系列】實作 Flask CORS
- 【Flask教學系列】實作 Flask CSRF Protection
有關 Max行銷誌的最新文章,都會發佈在 Max 的 Facebook 粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷!