下面就为您详细讲解“CentOS 8使用Docker部署Django项目的详细教程”。
环境准备
- CentOS 8服务器,可以使用虚拟机或者独立服务器。
- Docker,安装命令为
sudo dnf install -y docker-ce
。 - Docker Compose,安装命令为
sudo dnf install -y docker-compose
。 - 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技术站