今天整理了一下如何在docker中部署django项目。

1.环境如下:

python3.6  django2.0.5  nginx  mysql5.7  gunicorn

2.项目结构如下:

由于仅仅是测试,项目比较简单,复杂的项目也是这个流程。

通过上面的结构,我们需要编写的文件包括

blog/Dockerfile, blog/gunicorn.conf, blog/start.sh, nginx/Doickerfile, nginx/nginx.conf, docker-conpose.yml

3.blog/Dockerfile(基础镜像使用的是python:3.6,而不是ubuntu、centos。如果是ubuntu、cenos,Dockerfile文件中需要配置python环境):

FROM python:3.6    # 选择基础镜像,这里的基础镜像也可以选择ubuntu,centos等,但是下面的配置就会发生变化# 创建工作目录
RUN mkdir /blog  #设置工作目录
WORKDIR /blog#将当前目录加入到工作目录中
ADD . /blog
RUN pip3 install -r requirements.txt
#对外暴露端口
EXPOSE 80 8080 8000 5000
#设置环境变量
ENV SPIDER=/blog

4.blog/gunicorn.conf:

workers=2
bind='0.0.0.0:8000'
proc_name='blog'

5.blog/start.sh:

#!/bin/bash
python manage.py collectstatic --noinput&&
python manage.py makemigrations&&
python manage.py migrate &&
gunicornblog.wsgi:application -c gunicorn.conf

6.nginx/Dockerfile:

FROM nginx    # nginx镜像,最好是先拉取到本地# 对外暴露端口
EXPOSE 80 8000RUN rm /etc/nginx/conf.d/default.conf  # 删除原有配置文件
ADD nginx.conf  /etc/nginx/conf.d/   # 添加配置文件
RUN mkdir -p /usr/share/nginx/html/static  # 创建静态资源文件夹

7.nginx/nginx.conf:

server {listen      80;server_name localhost;location /static {alias /usr/share/nginx/html/static;}location / {proxy_pass http://web:8000;proxy_set_header Host $host;proxy_redirect off;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}

8.docker-compose.yml:

version: "3"services:db:image: mysql:5.7  # mysql镜像,最好先拉取到本地environment:- MYSQL_HOST=localhost- MYSQL_DATABASE=docker- MYSQL_USER=root- MYSQL_PASSWORD=wyzane- MYSQL_ROOT_PASSWORD=wyzanevolumes:- /home/wyzane/pyprojects/db:/var/lib/mysql  # 将宿主机与容器中的文件映射restart: always  # 若容器运行出现问题,会自动重启容器web:build: ./blogports:- "8000:8000"volumes:- ./blog:/blog- /tmp/logs:/tmpcommand: bash start.sh  # 执行命令,有多种格式links:- dbdepends_on:- dbrestart: alwaysnginx:build: ./nginxports:- "80:80"volumes:- ./blog/static:/usr/share/nginx/html/static:rolinks:- webdepends_on:- webrestart: always

9.依次执行以下命令:
docker-compose build
docker-compose up -d

10.执行完成后,通过
docker images 命令可以查看新增了2个镜像
docker ps 命令可以查看启动了3个容器

多执行几次docker ps,当容器的STATUS是以Restarting开头时,表示这个容器运行时发生了错误。执行docker logs CONTAINERID可以查看容器出错的具体原因。

若上述容器都成功运行,则在浏览器中输入http://127.0.0.1:80/api/v1/articles/info/时,视图会返回相应的结果。
以交互方式进入容器:

docker exec -it CONTAINERID /bin/bash

后,进入mysql数据库,会看到在数据库中生成了相应的表。

11.运行中遇到的问题,在运行3个容器后,web容器一直报错,通过
docker logs CONTAINERID查看主要错误信息如下:

django.db.utils.OperationalError: (2003, 'Can\'t connect to MySQL server on \'mariadb55\' (111 "Connection refused")')

解决方案在这里 https://stackoverflow.com/que...
主要是在settings.py中,将database配置中的HOST值改成db,而不是127.0.0.1,指向docker-compose.yml中的db服务

参考自 https://blog.csdn.net/hbnn111...

今天就聊到这里,如有疑问,欢迎交流!

django开发-在Docker中部署django项目相关推荐

  1. docker中部署springboot项目,并且外部访问

    1.docker安装好之后,先下载几个常用镜像,比如java,docker pull java:8,因为运行项目需要用到java环境,先把java镜像下载下来,方便以此为基础构建新的镜像. 2.准备s ...

  2. Docker/Docker-Compose部署Django

    Docker/Docker-Compose部署Django前后不分离开发 什么是Dockerfile 类似于脚本,将docker镜像,使用自动化的方式实现出来. Dockerfile的作用 ​ 找一个 ...

  3. docker 中部署一个springBoot项目

    docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml [java] view plaincopy <?xml version= ...

  4. Docker中部署项目到容器

    场景 使用Dockerfile定制镜像来部署Tomcat项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99105626 D ...

  5. docker 发布tomcat项目_在docker中部署tomcat并且部署java应用程序的步骤详解

    1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创 ...

  6. docker 打包部署 python项目_Docker如何部署Python项目的实现详解

    Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如 ...

  7. docker nginx部署前端项目

    最近一直在搞前后端分类,一直在想前端的html页面应该用什么部署 想来想去,如果用tomcat好像有点浪费资源,作为程序员自然要时时刻刻追求新的东西 一直以来都是在apache tomcat上面运行, ...

  8. 在tomcat中部署web项目

    在tomcat中部署web项目 一.静态部署 静态部署指的是我们在服务器启动之前部署我们的程序,只有当服务器启动之后,我们的Web应用程序才能访问.以下3中方式都可以部署:? 1.将PetWeb目录拷 ...

  9. PHP项目部署在tomcat,在Tomcat中部署Web项目的操作方法(必看篇)

    在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Manager Web应用程序 一:部署解包的webapp目录 将Web项目部署到Tom ...

最新文章

  1. 来者不拒,“昊”课等你——直播微生物篇
  2. SQL Server : T-SQL中拆分字符串的一个自定义函数
  3. python中子类调用父类的初始化方法
  4. 010-ThreadGroup线程组
  5. “北航Clubs” Beta版本开发目标
  6. 计算机硬件价钱分配,电脑基础知识计算机硬件基础课件.ppt
  7. 互联网晚报 | 12月6日 星期一 | 荣耀线下门店超3万家;鸿蒙系统明年正式登陆欧洲;凯撒旅业与众信旅游终止合并...
  8. SpringBoot2.0 基础案例(03):配置系统全局异常映射处理
  9. pycharm退出测试环境
  10. Spring 官方又孵化了个顶级项目,或将改变前后端API现状!
  11. 2022届秋招的总结与体会
  12. bootstrap日期插件的使用
  13. 回溯法、动态规划法——牛妹的蛋糕
  14. 学习分享 | 适合初学者练习的C/C++开源项目
  15. 2021年西式面点师(初级)考试题库及西式面点师(初级)考试试卷
  16. 服务器装win7无限重启吗,win7系统重装系统后无限重启电脑的解决方法
  17. 【LeetCode】64. 最小路径和 结题报告 (C++)
  18. VuePress自动化部署到GitHub服务器
  19. JavaDoc文档生成
  20. origin两个图层图例合并_origin处理数据怎么添加图例 origin作图怎么添加

热门文章

  1. 关于matlab的问题,关于MATLAB的一些基础问题
  2. Http请求返回最外层的模型
  3. python按位处理二进制文件_对如何在python shell中对16位二进制数执行按位运算感到困惑...
  4. 为什么软件开发周期总是预估的2-3倍?
  5. C++两个函数可以相互递归吗_C语言“最难啃”的三块硬骨头!你知道吗?
  6. java虚拟机文件_JAVA虚拟机已经安装,但不知道在哪儿编译和运行程序。
  7. easyUI s MVC h分页
  8. python3 redis长链接超时_Python3 连接Redis字符串和字节问题探究
  9. 数据结构c语言pdf2007,数据结构(C语言)严蔚敏 吴伟明 编著 07.pdf
  10. jvm内存参数配置_JVM内存结构和Java内存模型