Docker运行Django框架
Django框架
创建django-pg项目目录
[root@docker ~]# mkdir docker-compose-django
[root@docker ~]# cd docker-compose-django/
[root@docker docker-compose-django]# mkdir django-pg
在项目目录下创建docker-compose.yml文件
- 该文件定义了两个服务,一个是名为db的Postgres数据库,另一个是名为web的Django应用程序
#进入django-pg根目录,配置docker-compose.yml,注意选项和参数之间的空格,不能用Tab键,只能用空格键
#选项与选项之间有层级关系,注意对齐
[root@docker ~]# cd docker-compose-django/django-pg
[root@docker django-pg]# vim docker-compose.yml
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- db_data:/var/lib/postgresql
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
volumes:
db_data: {}
#在该目录下使用docker-compose config命令以此来检查配置文件参数是否有误,未报错即可
[root@docker django-pg]# docker-compose config
name: django-pg
services:
db:
environment:
POSTGRES_DB: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_USER: postgres
image: postgres
networks:
default: null
volumes:
- type: volume
source: db_data
target: /var/lib/postgresql
volume: {}
web:
build:
context: /root/docker-compose-django/django-pg
dockerfile: Dockerfile
command:
- python
- manage.py
- runserver
- 0.0.0.0:8000
depends_on:
db:
condition: service_started
networks:
default: null
ports:
- mode: ingress
target: 8000
published: "8000"
protocol: tcp
volumes:
- type: bind
source: /root/docker-compose-django/django-pg
target: /code
bind:
create_host_path: true
networks:
default:
name: django-pg_default
volumes:
db_data:
name: django-pg_db_data
在项目目录下创建requirements.txt文件
- requirements.txt文件用于记录所有依赖包及其精确的版本号,隶属于Python
#进入django-pg根目录,配置requirements.txt
[root@docker ~]# cd docker-compose-django/django-pg
[root@docker django-pg]# vim requirements.txt
Django>=2.0,<3.0
psycopg2>=2.7,<3.0
在项目目录下创建Dockerfile文件
#进入django-pg根目录,配置Dockerfile
[root@docker ~]# cd docker-compose-django/django-pg
[root@docker django-pg]# vim Dockerfile
#从Python 3父镜像开始
FROM python:3
ENV PYTHONUNBUFFERED 1
#在镜像中添加code项目
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
#在镜像中安装由requirements.txt文件指定要安装的Python依赖
RUN pip install -r requirements.txt
COPY . /code/
在项目目录下创建Django项目,构建上下文
#进入django-pg根目录,执行docker-compose run命令
[root@docker ~]# cd docker-compose-django/django-pg
[root@docker django-pg]# docker-compose run web django-admin startproject myexample .
.....(过程略)
#此时会去拉取镜像进行构建
查看服务列表
[root@docker django-pg]# docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
django-pg-db-1 "docker-entrypoint.s…" db running 5432/tcp
#状态为runnning,端口5432开放即可
设置Django数据库连接
- 以下配置参数是由docker-compose.yml文件所指定的postgres镜像所决定
#执行完docker-conmpose构建后在目录下会生成两个文件
[root@docker django-pg]# ls -l
total 16
-rw-r--r-- 1 root root 385 Jun 5 10:16 docker-compose.yml
-rw-r--r-- 1 root root 152 May 30 14:22 Dockerfile
-rwxr-xr-x 1 root root 629 Jun 5 10:32 manage.py
drwxr-xr-x 3 root root 93 Jun 5 10:57 myexample
-rw-r--r-- 1 root root 36 May 30 14:14 requirements.txt
#编辑myexample/settings.py文件,修改‘DATABASES’选项参数和‘ALLOWED_HOSTS’选项参数
[root@docker django-pg]# vim myexample/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
ALLOWED_HOSTS = ["192.168.88.101"] #这里设置为你自己主机的IP,要用双引号引起来
启动Django应用程序
#在django-pg根目录下执行docker-compose up命令
[root@docker django-pg]# docker-compose up
[+] Running 2/0
⠿ Container django-pg-db-1 Created 0.0s
⠿ Container django-pg-web-1 Created 0.0s
Attaching to django-pg-db-1, django-pg-web-1
django-pg-db-1 |
django-pg-db-1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
django-pg-db-1 |
django-pg-db-1 | 2023-06-05 03:34:41.145 UTC [1] LOG: starting PostgreSQL 15.3 (Debian 15.3-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
django-pg-db-1 | 2023-06-05 03:34:41.146 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
django-pg-db-1 | 2023-06-05 03:34:41.146 UTC [1] LOG: listening on IPv6 address "::", port 5432
django-pg-db-1 | 2023-06-05 03:34:41.148 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
django-pg-db-1 | 2023-06-05 03:34:41.152 UTC [28] LOG: database system was shut down at 2023-06-05 02:59:33 UTC
django-pg-db-1 | 2023-06-05 03:34:41.155 UTC [1] LOG: database system is ready to accept connections
django-pg-web-1 | Watching for file changes with StatReloader
django-pg-web-1 | Performing system checks...
django-pg-web-1 |
django-pg-web-1 | System check identified no issues (0 silenced).
django-pg-web-1 |
django-pg-web-1 | You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
django-pg-web-1 | Run 'python manage.py migrate' to apply them.
django-pg-web-1 | June 05, 2023 - 03:34:42
django-pg-web-1 | Django version 2.2.28, using settings 'myexample.settings'
django-pg-web-1 | Starting development server at http://0.0.0.0:8000/
django-pg-web-1 | Quit the server with CONTROL-C.
#注意这里不要ctrl C掐掉服务进程了,直接去浏览器访问
再次查看服务列表
#另启一个终端查看服务,#进入django-pg根目录
[root@docker ~]# cd docker-compose-django/django-pg
[root@docker django-pg]# docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
django-pg-db-1 "docker-entrypoint.s…" db running 5432/tcp
django-pg-web-1 "python manage.py ru…" web running 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
#8000端口已映射,状态running
web访问Django主页
注意这里的IP是'ALLOWED_HOSTS‘参数设置的本机IP

关闭并清理服务
#先ctrl c掐掉进程,然后删除服务与其对应的卷,最后删除项目目录即可
[root@docker django-pg]# docker-compose down --volumes
关于Docker容器运行Django框架时的问题
1,docker-compose.yml文件中关于db的部分配置应是这样:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- db_data:/var/lib/postgresql
上述需设置环境,指定用户名,密码和数据库,这是为了解决django-pg-db-1容器无法正常运行,启动自动退出的问题
2,与此对应的myexample/settings.py文件中DATABASES配置应如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
3,值得注意的一点,在myexample/settings.py文件中需设置网页访问地址IP参数否则浏览器无法正常访问django页面:
ALLOWED_HOSTS = [] #这个选项中括号里面填入Docker主机IP即可,注意要用双引号引起来
Docker运行Django框架的更多相关文章
- docker 运行Django项目
一.概述 已经写好了一个Django项目,需要将这个项目用docker封装一个镜像,使用k8s发布! 在封装并运行的过程中,发现了很多问题,这里会一一介绍! 二.时区问题 采用的是镜像是 ubuntu ...
- Django框架理解和使用常见问题
1.什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出. 中间件一般做认证或批量请求处理,django中的中间 ...
- Django框架的理解和使用的常见问题
1.什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出. 中间件一般做认证或批量请求处理,django中的中间 ...
- Django框架使用一 基本介绍,安装和建项篇
Django概述 Django 是在快节奏的编辑环境中开发的,设计使得常见 Web 开发任务快速且容易;它可以编写一个数据驱动的Web应用程序,简单的说就是不需要开发者操作数据库. 设计数据模型 尽管 ...
- django框架的models
在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- django框架介绍
主要内容 1. Django框架发展 2. Django架构,MTV模式 3. 开发流程 4. 开发实例——Poll python下各种框架 一 ...
- 【转】对Django框架架构和Request/Response处理流程的分析
本文转载于疯狂的蚂蚁. 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. ...
- Django框架全面讲解
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...
- Django框架的安装
下载Django框架 创建一个django项目 在E盘Mysite文件夹下创建了一个django项目叫mysite 当前文件夹下会产生一个mysite的文件夹,目录结构如下: manage.py -- ...
随机推荐
- MySQL 中索引是如何实现的,有哪些类型的索引,如何进行优化索引
MySQL 中的索引 前言 索引的实现 哈希索引 全文索引 B+ 树索引 索引的分类 聚簇索引(clustered index) 非聚簇索引(non-clustered index) 联合索引 覆盖索 ...
- active
rabbitMQ与activeMQ区别 之前的项目中都用到了这两个消息队列 ActiveMq,传统的消息队列,使用Java语言编写.基于JMS(Java Message Service),采用多线程并 ...
- 构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)
毋庸讳言,和传统架构(BS开发/CS开发)相比,人工智能技术确实有一定的基础门槛,它注定不是大众化,普适化的东西.但也不能否认,人工智能技术也具备像传统架构一样"套路化"的流程,也 ...
- ACM-学习记录-素数筛
前言 近期发现我NEFU低年级组校赛题目只有模拟+数论,恰恰都是我最不会做的,数论方面反反复复用到的就是素数筛,特在此记录一下,闲来无事自己翻阅当作复习复习,以免被到时候一道题都做不出来菜到巨佬们. ...
- .NET周报 【4月第1期 2023-04-02】
国内文章 探索 SK 示例 -- GitHub 存储库中的机器人 https://www.cnblogs.com/shanyou/p/17280627.html 微软 3月22日 一篇文章" ...
- [WEB]对于"Refused to execute script from 'http://xx.xx.xx/yy/zz.js' because its MIME type ('') is not executable, and strict MIME type checking is enabled."问题的解决办法
1 文由 阶段一:对WEB服务器HTTP通信的header设置了安全头(X-Content-Options:nosniff) 两个月前协助交付侧大哥处理.修复一个三级等保项目的第三方安全公司释出的安全 ...
- kali 安装beef-xss (含输入正确密码却登录不了本机无法打开beef提示找不到服务器404常见解决办法)
1:安装beef 2:修改配置文件 3:浏览器打开地址127.0.0.1:3000/ui/panel 常见问题解决本文最后 kali 打开终端 输入apt-get install beef-xss - ...
- 记录 跨境猴 shopee 虾皮 货代 贴单 仓储 打包系统 介绍
shopee虾皮|lazada|shopify代打包贴单仓储系统(简称:跨境猴)基于ThinkPHP6.0+AdminLTE-2.3.11+JQuery+PHP7.0+Swoole+Mysql5.5+ ...
- devops-5:从0开始构建一条完成的CI CD流水线
从0开始构建一条完成的CI CD流水线 前文中已经讲述了静态.动态增加agent节点,以动态的k8s cloud为例,下面就以Maven构建Java程序为例,开始构建出一条完整的CI CD流水线. 实 ...
- 我的OpenAI库发布了!!!
chatGPT正式发布已经有段时间了,这段时间我也深度体验了chatGPT的魅力. OpenAI除了提供网页版的chatGPT,还通过api的形式提供了很多其它服务,包括文字纠错.图片生成.音频转换等 ...