[筆記]實作restful api with Dockerized QPKG (使用Python restframework) — — Dockerfile 部份
記錄實做一個簡單的 restful api , 且於docker container上執行 , 最後包裝成QPKG , 能於 Qnap Nas App Center 中執行 .
主要步驟大約分為 :
1. 建立 restful api
2. 撰寫 Dockerfile
3. 包裝QPKG
建立 restful api 的部份先略過不提 , 在此主要紀錄後續如何包裝成 Dockerized QPKG 的部份
這邊是如何將 Django restful api 包在 Docker Container 執行的部份
第一步)創建一個 folder , 並建立Dockerfile 與 docker-compose.yml
mkdir rest_python
cd rest_python
touch Dockerfile
touch docker-compose.yml
第二步)將以寫好的 restful api 相關檔案搬移至此後 , 撰寫 Dockerfile
#Base images
FROM ubuntu:16.04
MAINTAINER RickyENV DEBIAN_FRONTEND noninteractive
ENV PYTHONUNBUFFERED 1RUN apt-get update \
&& apt-get install -y --no-install-recommends apt-utils \
&& apt-get install -y python3 \
&& apt-get install -y python3-pip \
&& apt-get cleanRUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txtADD . /code/
上述主要作用是以 ubuntu 為基底 , 接著搭載 python 環境 , 並將欲執行的相關檔案引入 container 內
第三步)撰寫 docker-compose.yml
version: '2'
services:web:
build: .
command: ["sh", "runserver.sh"]
restart: always
# (HOST:CONTAINER)
ports:
- "9000:9000"
這邊主要描述是以 web container 呼叫相同路徑下的 Dockerfile
並對外開啟 port 9000
而這邊有個比較容易踩雷的地方是 command 的部份
command 能設定 web container 啟動後所需執行的指令
但若所需執行的 command 不只一行
ex.
command: ["Do","Something","A"]
command: ["Do","Something","B"]
它預設只會執行最後一句
command: ["Do","Something","B"]
所以以此為例 , 當 web container 啟動後 , 所掛載的 Django restful api 程式
需要執行 migrate 以更新資料庫 , runserver 等等動作 , 就可另外開個 shell 檔去執行會比較方便
touch runserver.sh
runserver.sh
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py runserver 0.0.0.0:9000
這邊呼應先前 web container 設定對外開啟的 port 9000
故一樣 runserver 在 port 9000
第四步) 執行
docker-compose up
成功以 docker container 環境執行 restful api 於 本機端 port 9000