前言
因为项目环境配置太麻烦了,所以还是选用了Docker这个技术作为一个部署的解决方案。
这里主要讲如何用Docker启动一个Django项目,所以一些高级的部署方式,比如说用nginx管理等都没有涉及。
当然本机部署只是第一步,后面还是需要研究一下如何将整个容器打包运行到服务器上的,这里权且先做一个镜像测试一下吧。
过程
安装Docker
这里就跳过啦,教程应该一大推,三大系统都有。其中Windows比较麻烦一点,不过也不是不能用。
项目准备
我是使用的Pycharm直接创建了一个Django项目,然后在直接里面进行了编写,应该说还是很便捷的。
文件准备
为了创建我们的环境,先要制作几个文件,位置的话就放在项目的主目录下。
pip.conf
这个是pip的配置文件,制作完成之后,将这个文件复制到虚拟机对应的pip根目录下,即可完成替换。
主要功能是换成阿里云的镜像。
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
requirements.txt
这里是写你的python依赖库的,我这边依赖了下面这些,左边是库名,等号右边可以写版本号,不写默认latest。
Django==2.0.7
imageio
tensorflow
scikit-learn
opencv-python
hyperlpr
还有一种方式可以快速导出本机所有依赖,但是如果你本机装了很多库的话会很长。
pip freeze > requirements.txt
Dockerfile
这里就是关键了,docker将会使用这个文件进行构建。
比较特殊的是这个文件没有后缀名,所以像Mac就不能直接创建,使用touch
命令执行生成。
touch Dockerfile
使用vim进入编辑。
vim Dockerfile
具体内容如下:
FROM python:3.6
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/
RUN pip install -r /usr/src/app/requirements.txt
RUN rm -rf /usr/src/app
COPY . /usr/src/app
CMD [ "python", "./manage.py", "runserver", "0.0.0.0:8080"]
一行一行解释
- 以官方库
python:3.6
为基础进行制作,实际是一个装有python3.6的Linux - 运行命令创建新文件夹
/usr/src/app
- 确定工作路径
- 将本地的
pip.conf
复制到pip的根中进行替换 - 将
requirements.txt
复制到指定目录下 - 运行命令按照
requirements.txt
的内容进行pip安装 - 运行命令删除这个文件夹中的所有内容,-rf是递归强制删除
- 将整个项目复制到这个文件夹中
- 执行命令运行Django项目的启动文件,并开放8080端口
制作镜像image
这里就是执行这个Dockerfile文件了,随便给镜像取个名字my-python-app
,后面的.
表示当前文件夹,会自动寻找Dockerfile文件并执行。
docker build -t my-python-app .
系统会一行一行执行,因为Dockerfile就是分层执行的,失败了会回滚。
运行容器
镜像完成我们就可以通过镜像制作容器了。
-d
表示开启守护进程模式将我们的项目后台挂起,-p
映射端口,这边我就没改。。有时候搞不清楚,前面的是本机的端口,后面的是Docker内部镜像的端口,这边开放的端口由上面Dockerfile文件指定过。
docker run -d -p 8080:8080 my-python-app
访问
直接在浏览器内输入localhost:8080
,即可查看效果。
参考链接: