centos8使用Docker部署Django项目的详细教程

下面就为您详细讲解“CentOS 8使用Docker部署Django项目的详细教程”。

环境准备

  1. CentOS 8服务器,可以使用虚拟机或者独立服务器。
  2. Docker,安装命令为 sudo dnf install -y docker-ce
  3. Docker Compose,安装命令为 sudo dnf install -y docker-compose
  4. Django项目代码,本教程以示例代码https://github.com/jackfrued/Python-100-Days中的day72/django_todo项目示例说明。

拉取Docker镜像

Docker镜像是一个包含有完整依赖的环境,可以用来运行你的项目。首先,打开终端并输入以下命令拉取Django项目需要的Docker镜像:

docker pull python:3.7

创建Docker Compose文件

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,它使用YAML文件来配置应用服务。

在项目根目录中,新建一个docker-compose.yml文件,并输入以下内容来配置Docker Compose文件:

version: "3"
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: your_database_name
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
volumes:
  db_data:

解释一下以上的内容。

  • version: "3",Docker Compose的版本。
  • services:,声明需要运行哪些服务。
  • db:,声明要运行的mysql服务,使用的镜像为mysql:5.7,容器内数据挂载到了db_data卷上。
  • web:,声明要运行的web服务,将当前目录按照Dockerfile构建,并运行命令python manage.py runserver 0.0.0.0:8000,将容器内代码目录挂载到宿主机器上的/code目录,将容器内8000端口映射到宿主机器的8000端口。web服务依赖于db服务。
  • volumes:,声明需要创建哪些卷,这里定义了一个叫db_data的卷。

创建Dockerfile

Dockerfile是一个包含有安装所有依赖和配置应用程序的脚本,可以使用它来自定义生成Docker镜像。

在项目根目录中,新建一个名为Dockerfile的文件,并输入以下内容:

FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

解释一下这个Dockerfile。

  • FROM python:3.7,使用python:3.7作为基础镜像。
  • ENV PYTHONUNBUFFERED 1,设置环境变量,无缓冲输出。
  • RUN mkdir /code,在容器内创建/code目录。
  • WORKDIR /code,设置容器内的工作目录为/code。
  • ADD requirements.txt /code/,将requirements.txt文件添加到容器内的/code目录下。
  • RUN pip install -r requirements.txt,在容器中执行pip install命令来安装依赖。
  • ADD . /code/,将当前目录下的所有文件添加到容器内的/code目录下。

配置Django项目

使用Docker运行Django项目前,需要先进行配置。在项目根目录中,打开settings.py文件。更改ALLOWED_HOSTS为:

ALLOWED_HOSTS = ["*"]

并在最下面添加以下代码,用于调用Docker环境变量并运行:

import os

if "DOCKER" in os.environ:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.mysql",
            "NAME": os.environ.get("MYSQL_DATABASE"),
            "USER": "root",
            "PASSWORD": os.environ.get("MYSQL_ROOT_PASSWORD"),
            "HOST": "db",
            "PORT": "3306",
        }
    }
else:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": BASE_DIR / "db.sqlite3",
        }
    }

运行Django项目

现在,我们已经完成了所有的准备工作,可以使用以下命令来在Docker中运行Django项目:

docker-compose up -d

在浏览器中访问http://服务器IP地址:8000,即可看到Django项目运行的网页。

示例说明

示例1

现在,在DAY72中有一个样例项目,这是一个基于Django框架的待办事项Web应用程序。我们可以使用本教程中提到的步骤来部署整个应用程序。首先,我们需要拉取docker镜像:

docker pull python:3.7

接下来,我们需要在day72/django_todo目录下创建Dockerfile文件,内容如下:

FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

然后,我们需要在项目根目录下添加一个名为docker-compose.yml的文件,内容如下:

version: "3"
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: your_database_name
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
volumes:
  db_data:

在django_todo/settings.py文件中添加以下内容:

import os

if "DOCKER" in os.environ:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.mysql",
            "NAME": os.environ.get("MYSQL_DATABASE"),
            "USER": "root",
            "PASSWORD": os.environ.get("MYSQL_ROOT_PASSWORD"),
            "HOST": "db",
            "PORT": "3306",
        }
    }
else:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": BASE_DIR / "db.sqlite3",
        }
    }

现在,我们已经完成了所有的准备工作,可以使用以下命令来在Docker中运行这个Django项目:

docker-compose up -d

在浏览器中输入http://服务器IP地址:8000,即可看到该项目运行的网页。

示例2

如果您还没有一个Django项目,您也可以使用以下命令创建一个新的Django项目:

django-admin startproject myproject

然后,进入新项目的根目录并执行以下命令以创建一个包含有保证最小Django配置所需的所有文件的模板:

cd myproject
django-admin startapp myapp

在项目根目录myproject中,打开settings.py文件,添加以下内容:

import os

if "DOCKER" in os.environ:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.mysql",
            "NAME": os.environ.get("MYSQL_DATABASE"),
            "USER": "root",
            "PASSWORD": os.environ.get("MYSQL_ROOT_PASSWORD"),
            "HOST": "db",
            "PORT": "3306",
        }
    }
else:
    DATABASES = {
        "default": {
            "ENGINE": "django.db.backends.sqlite3",
            "NAME": BASE_DIR / "db.sqlite3",
        }
    }

在项目根目录myproject中,创建一个Dockerfile文件,内容如下:

FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

然后,创建docker-compose.yml文件,内容如下:

version: "3"
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: your_database_name
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
volumes:
  db_data:

现在,我们已经完成了所有的准备工作,可以使用以下命令来在Docker中运行这个新的Django项目:

docker-compose up -d

在浏览器中输入http://服务器IP地址:8000,即可看到该项目运行的网页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:centos8使用Docker部署Django项目的详细教程 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • LNMP下使用命令行导出导入MySQL数据库的方法

    当我们在LNMP环境下开发网站时,经常需要将本地开发环境的数据库导出到生产环境中,或者从生产环境中导出数据到本地测试环境中。这时候命令行导出导入MySQL数据库就成为了一个非常方便的方式。 以下是完整攻略: 1. 导出数据库 使用命令行导出MySQL数据库非常方便,首先我们需要确定要导出哪个数据库和导出的路径。打开终端,可以使用以下命令导出。 mysqldu…

    database 2023年5月21日
    00
  • 微信小程序点餐系统开发常见问题汇总

    微信小程序点餐系统开发常见问题汇总攻略 1. 如何实现前端展示菜品列表? 在微信小程序中,可以使用 wx.request() 方法调用后台接口获取菜品列表数据。后台接口应该返回一个 JSON 格式的菜品列表数据,前端在接收到后端数据后,可以使用 v-for 指令循环渲染菜品列表。 下面是示例代码: <!– menuList.vue –> &l…

    database 2023年5月18日
    00
  • MySql生成ER【StarUML】文件

    1. 背景 要画ER图,一个个打费时费力,StarUML文件打开是json。那么就有可能自动生成。 2. 效果 把表结构生成好,自己只要维护关系即可。 3. 代码 import lombok.Data; import java.io.FileWriter; import java.io.IOException; import java.sql.*; impo…

    MySQL 2023年4月11日
    00
  • MySQL存储过程的概念与用法实例

    下面是关于“MySQL存储过程的概念与用法实例”的详细攻略。 什么是MySQL存储过程? MySQL存储过程是一种预编译的SQL代码块,其中包含一系列SQL语句。它可以接受参数、执行流程控制语句(如if语句、while循环等)和异常处理语句,可以增加SQL脚本的灵活性和可重用性。 如何创建MySQL存储过程? 我们可以在MySQL客户端中使用CREATE P…

    database 2023年5月22日
    00
  • CentOS 7 x64下Apache+MySQL(Mariadb)+PHP56的安装教程详解

    CentOS 7 x64下Apache+MySQL(Mariadb)+PHP56的安装教程详解 1. 安装Apache 1.1 安装Apache Httpd软件包 sudo yum install httpd 1.2 开启防火墙端口 sudo firewall-cmd –permanent –add-port=80/tcp sudo firewall-c…

    database 2023年5月22日
    00
  • MongoDB balancer的使用详解

    MongoDB balancer的使用详解 什么是MongoDB balancer? MongoDB是一个分布式的数据库,它通过将数据划分为多个片段(shard)并将片段分布在多个服务器上来实现伸缩性。MongoDB balancer是MongoDB的一个重要组件,它负责为数据进行自动分片,以便更好地利用集群的存储资源。balancer在MongoDB内部运…

    database 2023年5月21日
    00
  • mysql update语句的执行过程详解

    下面是“MySQL UPDATE语句的执行过程详解”: 1. 基本语法 UPDATE table_name SET column1=value1,column2=value2,… WHERE condition; table_name:要更新数据的表名; column1、column2…:要更新的列名; value1、value2…: 对应列名的…

    database 2023年5月22日
    00
  • Mysql临时表原理及创建方法解析

    MySQL 临时表原理及创建方法解析 什么是 MySQL 临时表 MySQL 临时表是在数据库连接结束时自动删除的表,也就是说,它们只存在于当前连接中,也只能在当前连接范围内使用。 临时表可以通过 CREATE TEMPORARY TABLE 或 CREATE TEMPORARY TABLE IF NOT EXISTS 语句创建。与普通表不同的是,临时表会被…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部