这是一个基于python3.7.1的用来快速发布Django项目的 DockerFile
功能:
- 快速发布Django REST MySQL搭建的API
使用:
- 根据dockerFile build 镜像
docker build -f ./dockerfile -t [命名空间]/[imagesName][:版本] .
或者直接下载
代码语言:javascript复制sudo docker pull registry.cn-hangzhou.aliyuncs.com/junebao/django_rest_mysql:1.2.6
- 创造并开启容器
docker run -v /dataVolume/django/:/usr/local/django -p 8002:8000 -d junebao/drmi:1.2.6
参数解释:
- -p: 端口映射,冒号前面是宿主机端口(对外暴露),后面是容器内服务端口,默认8000,可通过修改uwsgi.ini修改
- -v: 设置数据卷,冒号前面是宿主机路径,后面是容器内项目路径(容器内路径是固定的),会同步容器内项目代码和日志,按上面的配置,宿主机日志文件路径为
/dataVolume/django/logs/uwsgi.log
,项目路径是/dataVolume/django/project
部署项目时直接把manage.py
那一层移动到project目录即可。
# 这是一个用来快速发布 Django REST API 的镜像,基于 python3.7.1
# 项目的发布仅仅使用了 uginx,所以如果Django项目中需要处理静态文件,请使用Nginx
# 该镜像只支持 MySQL 数据库
FROM python:3.7.1
MAINTAINER junebao<15364968962@163.com>
ENV PROJECT_PATH /usr/local/django
ENV PROJECT_NAME project
RUN apt-get update && apt-get install -y
gcc
gettext
--no-install-recommends && rm -rf /var/lib/apt/lists/*
# pip配置阿里云
RUN mkdir ~/.pip
RUN touch ~/.pip/pip.conf
RUN echo "[global]" > ~/.pip/pip.conf
RUN echo "index-url = http://mirrors.aliyun.com/pypi/simple/" >> ~/.pip/pip.conf
RUN echo "[install]" >> ~/.pip/pip.conf
RUN echo "trusted-host=mirrors.aliyun.com" >> ~/.pip/pip.conf
RUN pip install --upgrade pip
RUN pip install django==2.2.7
RUN pip install djangorestframework==3.9.4
RUN pip install mysqlclient
RUN pip install pytz==2019.1
RUN pip install sqlparse==0.3.0
RUN pip install django-cors-headers==3.2.0
RUN pip install uwsgi
WORKDIR $PROJECT_PATH
RUN cd $PROJECT_PATH
# 生成一个project的django project
RUN django-admin startproject project
RUN mkdir $PROJECT_PATH/logs && touch $PROJECT_PATH/logs/uwsgi.log
# 建立uwsgi.ini文件
RUN touch $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
# TODO:往ini文件中写入相关配置
RUN echo "# junebao/DRMI uwsgi.ini" > $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo "[uwsgi]" >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo "http = :8000" >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo chdir = $PROJECT_PATH/$PROJECT_NAME >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo module = $PROJECT_NAME.wsgi >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo logto = $PROJECT_PATH/logs/uwsgi.log >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo "master = true" >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo "processes = 4" >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
RUN echo "vacuum = true" >> $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini
EXPOSE 8000
CMD /usr/local/bin/uwsgi --ini $PROJECT_PATH/$PROJECT_NAME/uwsgi.ini