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主页

http://192.168.88.101:8000

注意这里的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框架的更多相关文章

  1. docker 运行Django项目

    一.概述 已经写好了一个Django项目,需要将这个项目用docker封装一个镜像,使用k8s发布! 在封装并运行的过程中,发现了很多问题,这里会一一介绍! 二.时区问题 采用的是镜像是 ubuntu ...

  2. Django框架理解和使用常见问题

    1.什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出. 中间件一般做认证或批量请求处理,django中的中间 ...

  3. Django框架的理解和使用的常见问题

    1.什么是中间件? 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出. 中间件一般做认证或批量请求处理,django中的中间 ...

  4. Django框架使用一 基本介绍,安装和建项篇

    Django概述 Django 是在快节奏的编辑环境中开发的,设计使得常见 Web 开发任务快速且容易;它可以编写一个数据驱动的Web应用程序,简单的说就是不需要开发者操作数据库. 设计数据模型 尽管 ...

  5. django框架的models

    在django的框架设计中采用了mtv模型,即Model,template,viewer Model相对于传统的三层或者mvc框架来说就相当对数据处理层,它主要负责与数据的交互,在使用django框架 ...

  6. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  7. django框架介绍

    主要内容 1.        Django框架发展 2.        Django架构,MTV模式 3.        开发流程 4.        开发实例——Poll python下各种框架 一 ...

  8. 【转】对Django框架架构和Request/Response处理流程的分析

    本文转载于疯狂的蚂蚁. 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. ...

  9. Django框架全面讲解

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  10. Django框架的安装

    下载Django框架 创建一个django项目 在E盘Mysite文件夹下创建了一个django项目叫mysite 当前文件夹下会产生一个mysite的文件夹,目录结构如下: manage.py -- ...

随机推荐

  1. Kafka 管理【主题、分区、消费者组】

    更多内容,前往 IT-BLOG 主题操作 使用 kafka-topics.sh 工具可以执行主题的大部分操作.可以用它创建.修改.删除和查看集群里的主题.要使用该工具的全部功能,需要通过 --zook ...

  2. 一个bug重温对JRE和JDK的关系思考

    前几天做一个springboot项目时,导入的JAVA版本是17,然后后面想更贴近下企业中使用的JDK版本就改成了JDK 1,8,然后就编译错误,bug如下 java: java.lang.Unsup ...

  3. LeetCode刷题笔记 - 2022

    这篇博客集中整理在LeetCode的刷题记录,方便查阅 258. 各位相加 - 力扣(LeetCode) (leetcode-cn.com) 代码 class Solution { public: i ...

  4. 【ACM算法竞赛日常训练】DAY10题解与分析【月月给华华出题】【华华给月月出题】| 筛法 | 欧拉函数 | 数论

    DAY10共2题: 月月给华华出题 华华给月月出题 难度较大. 作者:Eriktse 简介:211计算机在读,现役ACM银牌选手力争以通俗易懂的方式讲解算法!️欢迎关注我,一起交流C++/Python ...

  5. CentOS8 搭建Kubernetes

    CentOS8 搭建Kubernetes 主机名 IP 组件 k8s-master 192.168.40.128/24 kubeadm.kubelet.kubectl.docker-ce k8s-no ...

  6. python入门教程之四基本语法

    1Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大 ...

  7. java基础--lambda表达式

    lambda表达式,一种常见用法,就是简化匿名内部类.使用前提条件:如果一个方法A(),只涉及一个抽象方法待实现,那么使用A()时,涉及到匿名内部类,就可以简化为 lambda 表达式 lambda表 ...

  8. day07-OpenFeign-服务调用

    SpringCloud OpenFeign-服务调用 1.OpenFeign介绍 https://github.com/spring-cloud/spring-cloud-openfeign Open ...

  9. 关于react的Tabs组件中TabPane的bug

    今天解决了我自认为一个很不起眼的Bug. 我的Tabs下面有5个tabPane,并且这几个tabPane共用了一个search组件,今天遇到了一个bug,就是这几个组件使用公共查找组件的时候,前一个组 ...

  10. [双目视差] 立体校正源码分析(opencv)

    文章目录 [双目视差] 立体校正源码分析(opencv) 一.源码解析 二.源码中的方法 [双目视差] 立体校正源码分析(opencv) 一.源码解析 立体校正:把实际中非共面行对准的两幅图像,校正成 ...