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

打造专属测试平台4-使用Docker部署Django项目的更多相关文章

  1. Docker 部署Django项目

    使用docker部署django项目也很简单,挺不错,分享下 环境 默认你已安装好docker环境 django项目大概结构 (p3s) [root@opsweb]# tree opsweb opsw ...

  2. docker 部署django项目(nginx + uwsgi +mysql)

    最近在学习用docker部署Django项目,经过百折不挠的鼓捣,终于将项目部署成功,爬过好多坑,也发现很多技能需要提高.特此写下随笔与小伙伴们分享,希望能对大家有所启发. docker的理论我就不赘 ...

  3. 云服务器上利用Docker部署Django项目

    转载别人的,请看下面链接 云服务器上利用Docker部署Django项目

  4. 在centos8使用Docker部署Django项目

    引言 在本文中将介绍在Docker中通过django + uwsgi + nginx部署方式部署Django项目, 由于记录的是学习过程,使用的都是目前较高的版本. python 版本为3.8.3 d ...

  5. Docker部署Django项目+Nginx+Fluend日志收集 和redis、memcached、RabbitMQ、Celery

    前言 一.docker 1.docker是什么? Docker的英文本意是“搬运工”,Docker搬运的是集装箱(Container)可以成为容器,我可以把写的Django的WEB应用以及Python ...

  6. 笔记14:Docker 部署Python项目

    Docker 部署Python项目 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取 ...

  7. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  8. Docker网络配置、Docker部署分布式项目

    目标 1.Docker网络配置 2.Docker部署SpringCloud项目 Docker网络配置 Docker网络模式介绍 Docker在创建容器时有四种网络模式:bridge/host/cont ...

  9. Docker 部署 vue 项目

    Docker 部署 vue 项目 Docker 作为轻量级虚拟化技术,拥有持续集成.版本控制.可移植性.隔离性和安全性等优势.本文使用Docker来部署一个vue的前端应用,并尽可能详尽的介绍了实现思 ...

随机推荐

  1. ELK学习之Logstash+Kafka篇

    上一篇介绍了一下Logstash的数据处理过程以及一些基本的配置功能,同时也提到了Logstash作为一个数据采集端,支持对接多种输入数据源,其中就包括Kafka.那么这次的学习不妨研究一下Logst ...

  2. Linux的LCD驱动分析及移植

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 LCD驱动分析 LCD屏的驱动总体上分成两块,一块是GUI ...

  3. wpf内存泄漏问题

    http://www.cnblogs.com/Cindys/archive/2012/05/17/2505893.html http://blogs.msdn.com/b/jgoldb/archive ...

  4. apachectl命令

    Linux apachectl命令可用来控制Apache HTTP服务器的程序. apachectl是slackware内附Apache HTTP服务器的script文件,可供管理员控制服务器,但在其 ...

  5. POJ题目 1003Hangover(叠放纸牌)

    POJ 1003 叠放纸牌 描述 您可以将多张纸牌悬在桌子上多远?如果您有一张卡,则可以创建一个最大长度为卡长的一半.(我们假设这些卡片必须垂直于桌子.)使用两张卡片,您可以使最上面的卡片悬垂在底部的 ...

  6. 动态查看及加载PHP扩展

    在编译并完成 php.ini 的配置之后,我们就成功的安装了一个 PHP 的扩展.不过, PHP 也为我们提供了两个在动态运行期间可以查看扩展状态以及加载未在 php.ini 中进行配置的扩展的函数. ...

  7. 用Python做了个奇奇怪怪的打篮球游戏

    一.前言 准备编写一个篮球游戏,运动员带球跑,跳起投篮.在每帧图片中包括运动员和篮球,使用多帧图片,实现运动员运球跑动的效果. 运动员运球跑动作每帧图形的宽和高可能不同,例如,跨一大步,和两腿并拢,其 ...

  8. Faster RCNN 改进论文及资料

    1,面向小目标的多尺度Faster RCNN检测算法 黄继鹏等 对高分辨率图像进行下采样和上采样,使得网上获取的数据与实际测试数据分布接近. 下采样:最大池化和平均池化 上采样:线性插值,区域插值,最 ...

  9. 『Python』matplotlib常用函数

    1. 绘制图表组成元素的主要函数 1.1 plot()--展现量的变化趋势 import numpy as np import matplotlib.pyplot as plt import matp ...

  10. P6091-[模板]原根

    正题 题目链接:https://www.luogu.com.cn/problem/P6091 题目大意 给出一个数\(p\),求出它的所有在\([0,p]\)的原根. 解题思路 原根的定义,\(\de ...