PlayLab Docker Base
├── env_setup.sh # environment variables
├── run.sh # environment setup script
├── run-docker.sh # docker run script without nginx
├── Docker/
│ ├── docker-compose.yml
│ ├── Dockerfile
│ ├── requirements.txt # python module list
│ ├── uWSGI.ini
│ ├── nginx.conf
│ ├── ngrok # version 2.3.40
│ └── start.sh # container entrypoint
├── projects/ # projects repos without flask
└── www/ # flask project repoworkspace/
├── projects/ # ALL repos without flask
└── www/ # CURRENT flask project# env_setup.sh
# personal settings
GIT_NAME=<your git name>
GIT_EMAIL=<your git email>
GITLAB_LOGIN=<your playlab gitlab login name>
# docker configuration
COURSE=base
# setup docker web service port mapping (format => host:container)
PORT_MAPPING=
NGINX_PORT=8080
# start docker env with / without uWSGI and nginx proxy
RUN_FLASK=true
# project parameters, must be consistent with gitlab URLs
COURSE_GITLAB="aica-spring-2020"
# normal project list
PROJECT="aica_lab4"
# flask project list
FLASK_PROJECT="lab6_line_server"
# mount to /workspace/www in container
CURRENT_FLASK_FOLDER=lab6_line_server# /Docker/requirements.txt
Flask==2.0.1
uWSGI==2.0.19- 建議指定安裝版本,避免未來更新造成的相容性問題
- 查詢已安裝的套件清單 & 版本
$ pip list
- 在 環境設定參數 內設定
RUN_FLASK=true __main__檔案需命名為 app.py,並命名 Flask 物件為app# app.py from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "<p>Hello, World!</p>"
- 宿主機
./www內的 flask repo 掛載於/workspace/www - 宿主機
./projects掛載於/workspace/projects - 可在 bash 使用
ngrok直接呼叫預裝載的 ngrok - Docker container 內
/workspace/www/app.py可透過宿主機NGINX_PORTport 連線存取 - 使用完畢後需自行關閉 container
$ docker-compose down
- 在 環境設定參數 內設定
RUN_FLASK=false - 宿主機
./projects掛載於/workspace/projects - 可在 bash 使用
ngrok直接呼叫預裝載的 ngrok - 透過
PORT_MAPPING指定宿主機與 container 相互映射的 port,並可透過分隔符號,同時指定多組映射 - 關閉 bash window 後 container 將會立即關閉
- 在 /Docker/docker-compose.yml 內加上對應的 service
- Docker Hub Reference : postgres
# /Docker/docker-compose.yml
version: "3"
services:
# ... skip ...
postgres:
image: postgres:13.3-alpine
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres-db
- POSTGRES_USER=postgres-user
- POSTGRES_PASSWORD=postgres-pwd- Docker Hub Reference : mariadb
# /Docker/docker-compose.yml
version: "3"
services:
# ... skip ...
mysql:
image: mariadb
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=adminpwd
- MYSQL_PASSWORD=userpwd
- MYSQL_DATABASE=dbname
- MYSQL_USER=user- Non-flask mode:https://youtu.be/3V51_ke31Bg
- Flask mode:https://youtu.be/BqmUY_oP9H0
