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 -- ...
随机推荐
- 【单元测试】Junit 4(八)--junit4 内置Rule
1.0 Rules Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为.测试人员可以重复使用或扩展下面提供的Rules之一,或编写自己的Rules. 1.1 TestName ...
- Windows10一劳永逸的禁止更新/恢复更新
之前发表过一篇文章Windows10彻底关闭自动更新,这篇文章相对复杂了些.而且还是有一定几率会触发从而自动打开更新.下面讲的就是怎么一次性永久关闭更新,即使触发了更新,也不能下载更新,从而达到真正的 ...
- 从pcap文件中提取pcma音频
操作系统 :Windows10_x64 .CentOS 7.6.1810_x64 wireshark版本:3.6.12 Python 版本 : 3.9.12 一.背景描述 工作中有时候会遇到需要从 ...
- 003-Cruehead-CrackMeV3
第二个需要写注册机 首先查看文件,打开文件,什么也没有,help ->about,弹出下面的弹窗 看来是没有什么线索,直接放进OD里面 这里有一个函数CreatFileA,这个函数目的是访问一个 ...
- iOS 深色模式适配
要求:iOS13.0以上 重点:需要所有界面进行适配,工作量巨大,需要从项目开始就进行适配:H5界面无法进行适配 实现方式:System Colors(常用).Semantic Colors(常用). ...
- 深入理解 python 虚拟机:pyc 文件结构
深入理解 python 虚拟机:pyc 文件结构 在本篇文章当中主要给大家介绍一下 .py 文件在被编译之后对应的 pyc 文件结构,pyc 文件当中的一个核心内容就是 python 字节码. pyc ...
- [Linux]ln:软链接与硬链接
1 硬链接与软链接的[语法] 软链接:ln -s 源文件 目标文件 硬链接:ln 源文件 目标文件 [-s : symbolic,符号/代号] 2 软链接/硬链接的[比喻] / (编辑)同步性 [ro ...
- hadoop伪分布式集群的安装(不是单机版)
准备工作 三台虚拟机,关闭防火墙,关闭selinux 查看防火状态 systemctl status firewalld 暂时关闭防火墙 systemctl stop firewalld 永久关闭防火 ...
- HDCTF_2023
pwnner 附件 有后门函数,seed是一个固定值, //伪随机数 #include <stdio.h> #include <stdlib.h> int main() { i ...
- YOLO2论文中文版
文章目录 YOLO9000中文版 摘要 1. 引言 2. 更好 3. 更快 4. 更强 5. 结论 参考文献 YOLO9000中文版 摘要 我们引入了一个先进的实时目标检测系统YOLO9000,可以检 ...