打造專屬測試平臺4-使用Docker部署Django專案

酌三巡 發表於 2021-10-23
Django Docker

編寫完專案程式碼後,為了穩定的執行,需要將其部署至伺服器。這裡我選擇了Docker去部署Django後端程式碼。

首先來看看Runoob對Docker的介紹:

Docker 是一個開源的應用容器引擎,基於Go語言並遵從 Apache2.0 協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

我自己的理解,Docker能夠大大降低開發人員移植環境時的複雜度,易於自動化部署,也易於不同環境之間相互隔離。

安裝Docker

Docker必須部署在 Linux 核心的系統上,如果其他系統想部署 Docker 就必須安裝一個虛擬 Linux 環境。所以Windows或者Mac使用者的官方安裝方式是安裝Docker Desktop客戶端,實質上還是在虛擬機器中安裝Docker。

製作Docker映象

有以下兩種方式製作映象:

1.從已經建立的容器中更新映象,並且提交這個映象。下次想要複用時,則是從映象倉庫拉取該映象。

2.使用 Dockerfile 檔案來建立一個新的映象,下次想要複用時,只需要使用docker build指令再次呼叫Dockerfile建立映象即可。

這裡推薦第2種方式來製作映象,因為Dockerfile檔案能夠清晰地記錄製作映象的具體步驟,方便作者去回顧以及保持映象簡潔。

以下是我製作映象時的Dockerfile檔案:

FROM ubuntu:16.04

ENV LANG C.UTF-8
ENV TZ=Asia/Shanghai

RUN sed -i [email protected]/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
    apt-get clean && \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
    apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
    software-properties-common &&\
    add-apt-repository ppa:deadsnakes/ppa &&\
    apt-get update && \
    apt-get install -y \
    python3.7 && \
    update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 1 && \
    apt-get install -y \
    libpython3.7-dev \
    python3-setuptools \
    python3-pip \
    git \
    tzdata && \
    dpkg-reconfigure --frontend noninteractive tzdata


WORKDIR /opt/workspace/TestPlatformBackend/

COPY . .

RUN  pip3 install -r ./requirements.txt -i \
    https://pypi.tuna.tsinghua.edu.cn/simple \
    --default-timeout=100

EXPOSE 5000

CMD bash ./start.sh

該Dockerfile基於ubuntu16.04系統,先安裝了python基礎環境,指定工作空間及拷貝專案程式碼,然後安裝專案所需的python庫,最後執行指定的shell指令碼。

shell指令碼也較為簡單,用uWSGI啟動了Django專案,如果有不懂uWSGI的朋友,可以參看這篇文章《如何用uWSGI託管Django》進行了解。

#!/usr/bin/env bash
uwsgi --ini ./uwsgi.ini

值得一提的是,網上教程一般會採用uWSGI+Nginx去部署Django專案,而我這裡只採用了uWSGI,原因是該測試平臺是給內部人員使用且併發量不大,所以沒有用到Nginx,等需要時再加上。

使用Docker映象

在完成Dockerfile後,使用docker build指令建立Docker映象,例子中建立了名為testplatformbackend的映象。

docker build -t testplatformbackend .

建立完成後,使用該映象生成並執行容器,例子中執行了名為testplatformbackend的映象,並將容器的5000埠對映到了宿主機的9999埠上供訪問。

docker run -d -p 9999:5000 testplatformbackend

上述步驟,便實現了通過Docker來部署Django專案。

 

文章的最後聊個題外話,如果我們的專案程式碼是在Windows系統上完成編寫,需要部署到Linux系統上時,請注意兩個系統對於檔案路徑的相容性問題。Windows系統是可以用符號'\'和'/'來表示路徑的,而Linux系統只能用後者來表示路徑。所以我們在寫路徑時,儘量用符號'/'。而拼接路徑時則儘量用os.path.join()函式去實現,因為它生成的路徑能相容不同系統。如果遇到不得不轉換的路徑,則可以在使用路徑時採用str.replace('\\', '/')完成轉換。

 

參考資料

https://www.docker.com/

https://www.runoob.com/docker/docker-tutorial.html