广告
返回顶部
首页 > 资讯 > 前端开发 > html >Docker中怎么部署Django应用
  • 115
分享到

Docker中怎么部署Django应用

2024-04-02 19:04:59 115人浏览 薄情痞子
摘要

今天小编给大家分享一下Docker中怎么部署Django应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一

今天小编给大家分享一下Docker中怎么部署Django应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、网络架构

我用visio大概画了一下我的网络架构图:

Docker中怎么部署Django应用

我构建的容器

  1. Nginx容器;

  2. WEB server容器

  3. Redis容器

  4. memcached容器

  5. Mysql容器

如果把所有应用都部署到一个应用中,可能会更简单,但不同容器之间就稍微复杂点。首先你要考虑好容器之间的依赖关系,比如nginx要依赖web服务器,如果web服务器不正常工作,那nginx就不能正常工作;web服务器要依赖于数据库等等;其次,要设置好容器间的数据共享问题。比如对于web应用的静态资源,怎么让nginx实现反向代理。

带着这些疑问,开始部署。

二、环境:

准备docker的环境。

  • ubuntu 16.04 (主机环境)

  • docker 17.06.0

  • docker-compose 1.14.0

  • compose file 版本: version 3

对于docker的作用和介绍可参考官网:docker service。

要注意你的docker版本以及composefile版本,因为不同的版本,语法可能略有不同。我之前在配置共享数据卷的时候就遇到过坑,比如在version 3中删掉了volumes_from,我还不知道有版本差异,所以怎么配置都不对。更详细的请看官网:

1、工程结构

├── blog 
│ ├── account
│ ├── blog
│ ├── dailyblog
│ ├── dockerfile
│ ├── gunicorn.conf
│ ├── manage.py
│ ├── media
│ ├── requirements.txt
│ ├── start.sh
│ └── static
├── docker-compose.yml
└── nginx
 ├── dockerfile
 └── nginx.conf

blog是我的djanGo应用,内有dockfile文件;nginx文件里也有一个dockfile。blog和nginx分别是一个service,我们通过docker-compose.yml文件的配置来创建镜像和容器。也就是说你必须要做几件事:

  1. 在每个服务(应用)下编写dockerfile;

  2. 在docker-compose.yml文件中配置相关的服务;

  3. 执行docker-compose命令 build和up

2、django应用的配置(blog包):

1)dockfile

from ubuntu:16.04

#更新软件源,必须要执行,否则可能会出错。-y就是要跳过提示直接安装。
run apt-get -y update

run apt-get install -y python-dev Python-pip
run apt-get install -y python-setuptools
#mysql-python必须得先安装这个库
run apt-get install -y libmysqlclient-dev 
run mkdir /blog
#设置工作目录
workdir /blog
#将当前目录加入到工作目录中
add . /blog
#install any needed pacakges in requirements.txt,你要把所有需要安装的python模块加到这文件中。
run pip install -r requirements.txt
#对外暴露端口
expose 80 8080 8000 5000
#设置环境变量
env spider=/blog

我的基础镜像选择了ubuntu,是因为我觉得我可能更习惯一些。

2)启动脚本 start.sh

#!/bin/bash
#命令只执行最后一个,所以用 &&

python manage.py collectstatic --noinput &&
python manage.py migrate &&
gunicorn blog.wsgi:application -c gunicorn.conf

在你初次部署时,你要收集各个app的static目录到工程static目录中,同时要创建数据库。上面的3个命令通过 && 拼接,相当于一个命令。

此外,django应用选择gunicorn做web服务器,gunicorn的配置文件如下:

workers=4
bind=['0.0.0.0:8000']
proc_name='blog'
pidfile='/tmp/blog.pid'
worker_class='gevent'
max_requests=6000

gunicorn中host选择 0.0.0.0:8000。

3、nginx配置(nginx目录)

1)dockfile

from nginx

#对外暴露端口
expose 80 8000

run rm /etc/nginx/conf.d/default.conf

add nginx.conf /etc/nginx/conf.d/

run mkdir -p /usr/share/nginx/html/static
run mkdir -p /usr/share/nginx/html/media

nginx的基础镜像选择docker仓库中的基础镜像nginx即可,同时要把自己的配置文件添加到相关目录中。这里有一点要注意,就是我自己曾经在主机配置nginx的时候,一般/etc/nginx/nginx.conf会从 /etc/nginx/conf.d,和/etc/nginx/site-enabled/两个文件目录寻找conf文件,我之前都是添加到/etc/nginx/site-enabled/,这次也是这么做的,但是我配置运行之后,nginx没有正常工作,我进入nginx容器看了一下,想看看为啥我的配置没有加载,打开/etc/nginx/nginx.conf一看,果然,它只include了/etc/nginx/conf.d中的conf文件。bingo!改了我的配置文件,ok。

后面创建的static和media是为了web应用的静态文件存储。

2)nginx.conf

server {
 listen  80;
 server_name localhost;
 charset  utf-8;

 error_log /tmp/nginx_error.log;
 access_log /tmp/nginx_access.log;


 location /media {
  alias /usr/share/nginx/html/media;
 }

 location /static {
  alias /usr/share/nginx/html/static;
  }

 location / {
  proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
  proxy_set_header host $Http_host;
  proxy_redirect off;
  proxy_pass http://web:8000;
 }

}

关于nginx配置,要注意以下两点,是非常重要的:

location

静态文件配置,nginx指定的静态文件原目录是在/usr/share/nginx/html/,而该目录下的静态文件是从web容器中通过volumes同步的。所以,等下docker-compose是非常非常重要的。

proxy_pass

这和你直接在主机上配置是不一样的,host不能写成具体的ip,要写服务名,这里要写web service的name,web是在docker-compose中定义的web应用的service名称。后面要写docker-compose的配置。

4、docker-compose.yml配置

version: "3"

services:


 db:
 image: mysql
 environment:
  mysql_database: app_blog
  mysql_root_passWord: admin
 volumes:
  - /srv/db:/var/lib/mysql
 restart: always

 redis:
 image: redis
 restart: always

 memcached:
 image: memcached
 restart: always

 web:
 build: ./blog
 ports:
 - "8000:8000"
 volumes:
 - ./blog:/blog
 - /tmp/logs:/tmp
 command: bash start.sh
 links:
 - redis
 - memcached
 - db
 depends_on:
  - db
 restart: always


 nginx:
 build: ./nginx
 ports:
 - "80:80"
 volumes:
 - ./blog/static:/usr/share/nginx/html/static:ro
 - ./blog/media:/usr/share/nginx/html/media:ro
 links:
 - web
 depends_on:
 - web
 restart: always

 这个文件是非常重要的!!!

定义了5个服务:

  • db。 mysql数据库;

  • redis。 缓存NoSQL数据库;

  • memcached。 缓存;

  • web。 web应用;

  • nginx。 反向代理。

服务名称对于容器间的沟通是非常重要的。我们这里一个一个说。

1)db

配置的几个方面:

  • 基础镜像从docker仓库中获得(配置image);

  • 配置了环境变量,创建一个数据库(该数据库名为app_blog,django在执行migrate操作时会用);

  • volumes。数据卷,为了实现备份用的,/srv/db,是主机目录,/var/lib/mysql是mysql容器内目录;

  • restart 默认是no,意思是在任何情况都不会重启;如果设成always,就是如果stop了,就会重启;

  • root用户的密码;你在django应用的settings.py里也要写成响应的配置,具体如下:

databases = {
'default': {
 'engine': 'django.db.backends.mysql',
 'name': 'app_blog',
 'user': 'root',
 'password':'admin',
 'port':3306,
 'host':'db',
}
}

2)redis,memcached

这两个就一起说了,因为不需要重新配置,直接用仓库中的镜像即可。

3)web应用

配置的几个方面:

  • build。 根据dockerfile重新build一个镜像;

  • ports。 格式为host:container。相当于一个nat转换,设置内部的端口向外转发的端口;

  • volumes。同样是设置数据文件备份,也可以说成是同步,web容器的工作目录/blog备份到主机上的目录;

  • links. 创建和其他容器中的service的链接,指定服务名字即可。有了这个连接,服务之间就可以通过service名字通信了,在前面nginx配置中的proxy_pass就用了web服务;

  • depends_on. 它有两层含义,一是在启动服务的时候,会先启动db,然后再启动web;二是如果执行ocker-compose up web也会创建和启动db.

4)nginx

  • build。 根据dockerfile重新build一个镜像;

  • ports。 格式为host:container。相当于一个nat转换,设置内部的端口向外转发的端口; http默认端口

  • links. 上面已经介绍了;

  • depends_on. 上面也介绍了;

  • volumes。 这个我认为是最重要的,重点说一下。

关于如何实现nginx容器和web容器间的数据共享,即静态文件共享的问题,真是把我困扰住了。我先是按照官网配置,在顶级配置了volumes,在服务下配置type,source,之类的,但一直没成功(如果有配成功的,拿出来分享下哈);后来网上搜了一堆资料,容器间共享他们都用了volumes_from,这在version3中已经取消了,退回旧版本还不行。上周五真是烦得我头疼啊。后来看了一篇文章,才突然开窍,我本应该早点想到啊。逻辑是这样的:

首先,我在web应用中就已经设置volumes数据的备份,即将容器中的文件同步到主机上,然后主机就可以充当这个中间者,nginx容器再从主机上同步静态文件。这就相当于celery中,生产者将任务消息写到消息中间件中,然后消费者从中间件中取消息来消息,而这里面web应用就类似生产者,nginx是消费者。

这样问题就迎刃而解了!!!

到目前为止,所有部署相关的配置都已经写完了。

首先执行:

docker-compose build

然后执行:

docker-compose up -d

题外话:我是在周六晚上11点跑的第一个build命令,执行各种镜像下载,软件源更新,get资源比较慢,我太困了,就睡觉了。晚上睡觉做梦感觉都是docker,然后不到6点我就起了,到了客厅看电脑build已经成功。我就开始执行up命令,当我打开浏览器,输入localhost,然后成功返回结果的那一刻,甭提多有成就感啦!!!

随意几个知识点:

docker删除所有容器:

docker rm docker ps -a -q

最重要的是后面的 -q选项,表示只显示id。

删除none镜像:

docker rmi docker images -f "dangling=true" -q

更新。dockerfile要加上apt-get update,否则后面的命令不能正常执行;

command命令只执行最后一个,在脚本中写了三个命令,但最后只执行最后一个。后来把三个命令用 && 拼接起来。

docker镜像内的文件互相拷贝

1、将本地文件拷贝到docker 镜像内

docker cp /users/howey/documents/apache-Maven-3.5.2/ 749056ea1637:/opt
docker cp 本地路径 容器id或name:容器目录

2、将docker内文件拷贝到本地文件夹内

docker cp 749056ea1637:/users/howey/documents/apache-maven-3.5.2 /opt/
docker cp 容器id:本地路径 镜像路径

以上就是“Docker中怎么部署Django应用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网html频道。

--结束END--

本文标题: Docker中怎么部署Django应用

本文链接: https://www.lsjlt.com/news/96396.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Docker中怎么部署Django应用
    今天小编给大家分享一下Docker中怎么部署Django应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2022-10-19
  • docker怎么部署django应用
    要部署Django应用程序,可以使用Docker进行容器化。下面是一些步骤:1. 创建Django项目:首先,在本地开发计算机上创建...
    99+
    2023-08-16
    docker django
  • docker怎么部署django项目
    要部署Django项目,可以使用Docker进行容器化部署。以下是一些基本的步骤:1. 首先,确保已经在本地安装了Docker和Do...
    99+
    2023-10-09
    django docker
  • Docker+Jenkins+Gitlab+Django应用部署的方法
    本篇内容介绍了“Docker+Jenkins+Gitlab+Django应用部署的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大...
    99+
    2022-10-19
  • docker怎么部署nginx应用
    要部署Nginx应用,您可以使用Docker来进行部署。下面是一些步骤可以帮助您完成此过程:1. 首先,您需要安装Docker,可以...
    99+
    2023-10-20
    docker nginx
  • docker怎么部署go应用
    要部署Go应用程序,您可以使用Docker来创建一个镜像并将其部署到容器中。下面是一个简单的步骤:1. 创建一个包含Go应用程序的目...
    99+
    2023-08-16
    docker go
  • 怎么在Docker中部署 ASP.NET Core应用
    本篇文章为大家展示了怎么在Docker中部署 ASP.NET Core应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、系统环境腾讯云轻量应用服务器CentOS7.6二、操作流程及途中遇到的问题...
    99+
    2023-06-15
  • docker怎么部署多个web应用
    可以通过以下几种方式来部署多个web应用: 使用多个Docker容器:可以为每个web应用创建一个独立的Docker容器,并使用...
    99+
    2023-10-25
    docker
  • 怎么使用docker部署前端应用
    这篇“怎么使用docker部署前端应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使...
    99+
    2022-10-19
  • 怎么用Docker部署一个Python应用
    本文小编为大家详细介绍“怎么用Docker部署一个Python应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Docker部署一个Python应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言在使用...
    99+
    2023-07-02
  • Ubuntu中怎么部署Django
    这篇文章主要介绍了Ubuntu中怎么部署Django的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Ubuntu中怎么部署Django文章都会有所收获,下面我们一起来看看吧。第一步,先更新sudo ap...
    99+
    2023-07-04
  • Docker中怎么部署Jenkins
    这篇文章主要介绍“Docker中怎么部署Jenkins”,在日常操作中,相信很多人在Docker中怎么部署Jenkins问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker中怎么部署Jenkins”的疑...
    99+
    2023-06-28
  • Docker中怎么部署nginx
    这篇“Docker中怎么部署nginx”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Docker中怎么部署nginx”文章吧...
    99+
    2023-06-27
  • Ubuntu14.04中怎么部署Docker
    今天小编给大家分享一下Ubuntu14.04中怎么部署Docker的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Docker...
    99+
    2023-06-28
  • Docker中怎么部署Node.js
    这篇文章主要介绍了Docker中怎么部署Node.js的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker中怎么部署Node.js文章都会有所收获,下面我们一起来看看吧。项目结构`-- dock...
    99+
    2023-07-04
  • docker 部署mysql详细过程(docker部署常见应用)
    之前给大家介绍过:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql:5.7.2...
    99+
    2022-11-12
  • 怎么使用Docker搭建Django,Nginx,R,Python部署环境
    这篇文章将为大家详细讲解有关怎么使用Docker搭建Django,Nginx,R,Python部署环境,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基本环境:Ubuntu 16.10docker 17.0...
    99+
    2023-06-07
  • 在Docker中怎么用Tomcat快速部署web应用
    这篇文章主要介绍“在Docker中怎么用Tomcat快速部署web应用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“在Docker中怎么用Tomcat快速部署web...
    99+
    2022-10-19
  • 怎么用Golang和Docker部署应用程序
    本文小编为大家详细介绍“怎么用Golang和Docker部署应用程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Golang和Docker部署应用程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。第一步...
    99+
    2023-07-05
  • golang怎么部署docker
    随着近年来容器化技术的火热,Docker也成为了越来越多开发者、运维人员、IT从业者等的必备工具。而Golang语言的高并发优势也让它成为了不少开发者使用的首选语言。那么,如何将Golang应用部署到Docker容器中呢?本文将为大家介绍g...
    99+
    2023-05-14
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作