实验下使用docker跑django应用。我一般部署都是按照nginx + gunicorn + django的方式部署。现在尝试下使用将gunicorn和django做成docker镜像,然后将代码通过卷挂载载入容器中来部署django应用。
首先django是有官方镜像的。https://hub.docker.com/_/django/可以先看下说明,说明还是蛮详细的。
先把django应用打个包考到一个目录下解包。然后cd到django的主目录下(就是有manage.py的目录),创建requirements.txt。可以通过在真实环境中** pip freeze > requirements.txt **将所需要的python模块罗列出来。这里其实我就需要gunicorn就可以了。
然后执行下面的命令就可以创建一个基本的django应用了。
** docker run --name testdjango-app -v "$PWD":/usr/src/app -w /usr/src/app -p 8000:8000 -d django:python2 bash -c "pip install -r requirements.txt && gunicorn -b0.0.0.0:8000 mydj.wsgi:application" **
这里有前提,首先是用的官方的django镜像tag是python2
具体的Dockerfile是这样的:
FROM python:2.7-slim RUN apt-get update && apt-get install -y \ gcc \ gettext \ mysql-client libmysqlclient-dev \ postgresql-client libpq-dev \ sqlite3 \ --no-install-recommends && rm -rf /var/lib/apt/lists/* ENV DJANGO_VERSION 1.10.4 RUN pip install mysqlclient psycopg2 django=="$DJANGO_VERSION"
所以针对有些问题,最好是自己写Dockerfile,可以包含一些定制化的配置。
比如说通过自建Dockerfile,先将django版本设置为开发用的低版本,然后在dockerfile中安装好gunicorn而不需要在** pip install -r requirements.txt **
我先贴下我修改过的Dockerfile。
FROM python:2.7-slim RUN apt-get update && apt-get install -y \ gcc \ gettext \ mysql-client libmysqlclient-dev \ postgresql-client libpq-dev \ sqlite3 \ --no-install-recommends && rm -rf /var/lib/apt/lists/* ENV DJANGO_VERSION 1.8.14 ENV GUNICORN_VERSION 19.4.5 WORKDIR /usr/src/app EXPOSE 8000 RUN pip install mysqlclient psycopg2 django=="$DJANGO_VERSION" gunicorn=="$GUNICORN_VERSION" CMD ["gunicorn", "-b0.0.0.0:8000", "mydj.wsgi:application"]
创建好Dockerfile文件后在Dockerfile文件的当前目录下通过执行** docker build -t mydjimage . ** 注意这里有个点,就可以创建一个叫mydjimage 的docker镜像。
然后一样的cd到django应用的主目录下。启动
** docker run --name mybuilddj -v "$PWD":/usr/src/app -p 8001:8000 -d mydjimage **
这样就将本机8001端口映射到容器的8000端口即django应用上了。
通过卷来将django程序在外部挂载的方式载入容器中比较灵活。代码可以通过版本控制来管理,每次更新后重启容器就可以了。当然也可以将代码打到docker镜像中,只是这样对应经常变更的程序来说不太好。
然后前端的nginx也可以用docker容器来跑。可以将nginx用到的配置文件和静态页面也用卷来从外部读取,然后做好容器间的通信就可以了。注意配置文件中的include /etc/nginx/conf.d/mime.types;也要用卷挂载出来。不然不会解析css,js等静态页面。
Cloudhu 个人随笔|built by django|
沪ICP备16019452号-1