打造专属测试平台4-使用Docker部署Django项目

编写完项目代码后,为了稳定的运行,需要将其部署至服务器。这里我选择了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 s@/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

 

posted @ 2021-10-23 15:18  酌三巡  阅读(401)  评论(0编辑  收藏  举报