下面详细讲解如何 Docker 化 Python Django 应用程序的完整攻略。
1. 安装 Docker
首先需要安装 Docker,可以前往 Docker 官网 下载对应版本的 Docker,根据官网指引进行安装。
2. 创建 Django 应用程序
接着创建一个 Django 应用程序,可以使用如下命令:
$ django-admin startproject myproject
其中 myproject
为项目名称。
创建好项目后,进入项目目录:
$ cd myproject
然后再创建一个应用:
$ python manage.py startapp myapp
其中 myapp
为应用名称。
3. 编写 application 代码
在 myapp
应用中编写 view
视图、urls
路由、model
模型等文件代码。
例如,在 views.py
中写一个简单的视图:
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
并在 urls.py
中添加路由:
from django.urls import path
from .views import index
urlpatterns = [
path('', index, name='index'),
]
4. 编写 Dockerfile
在项目根目录创建一个名为 Dockerfile
的文件,用于构建 Docker 镜像。
下面是一个简单的示例 Dockerfile:
FROM python:3.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Dockerfile 的详细说明:
FROM python:3.9
:使用 Python 3.9 作为基础镜像。ENV PYTHONUNBUFFERED 1
:设置 Python 环境变量。RUN mkdir /code
:创建/code
目录。WORKDIR /code
:设置工作目录为/code
。COPY requirements.txt /code/
:将requirements.txt
文件拷贝到/code
目录下。RUN pip install -r requirements.txt
:安装 Python 依赖。COPY . /code/
:将当前目录下的所有文件拷贝到/code
目录下。CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
:运行 Django 服务器。
5. 编写 docker-compose.yml
接下来我们需要编写 docker-compose.yml
文件,用于启动容器。
以下是一个简单的示例 docker-compose.yml
文件:
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
volumes:
- .:/code
depends_on:
- db
db:
image: postgres
volumes:
- postgres_data:/var/lib/postgresql/data/
volumes:
postgres_data:
docker-compose.yml
的详细说明:
version: '3'
:使用 Docker Compose 版本 3。services
:定义服务。web
:服务名为web
。build: .
:构建镜像。command: python manage.py runserver 0.0.0.0:8000
:容器启动时执行的命令。ports: - "8000:8000"
:将容器的 8000 端口映射到主机的 8000 端口。volumes: - .:/code
:将当前目录挂载到/code
目录。depends_on: - db
:依赖db
服务。db
:服务名为db
。image: postgres
:使用官方的postgres
镜像。volumes: - postgres_data:/var/lib/postgresql/data/
:将数据目录挂载到主机。
6. 启动容器
使用如下命令启动容器:
$ docker-compose up
访问 http://localhost:8000 即可看到 Django 的页面,即表示成功启动了容器。
7. 示例说明
示例 1
假设我们的 myapp
应用有一个 model
用户,首先需要在 models.py
中定义好模型:
from django.db import models
class User(models.Model):
name = models.CharField(max_length=50)
age = models.IntegerField()
然后在 views.py
中编写 index
视图函数:
from django.shortcuts import render
from .models import User
def index(request):
users = User.objects.all()
return render(request, 'index.html', {'users': users})
在 urls.py
中为 index
视图函数添加路由:
from django.urls import path
from .views import index
urlpatterns = [
path('', index, name='index'),
]
最后在 index.html
载入用户数据:
{% extends "base.html" %}
{% block content %}
<h1>Users</h1>
<ul>
{% for user in users %}
<li>{{ user.name }}, {{ user.age }}</li>
{% endfor %}
</ul>
{% endblock %}
示例 2
假设我们需要使用 Django 中的 Celery 异步任务,可以按照以下步骤实现。
首先,需要安装 Celery:
pip install celery
然后,在 myproject
目录下创建一个名为 celery.py
的文件,编写 Celery 的配置和任务。
import os
from celery import Celery
# 设置默认 Django 配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
app = Celery('myproject')
# 使用 Django 配置
app.config_from_object('django.conf:settings', namespace='CELERY')
# 自动发现任务
app.autodiscover_tasks()
在 settings.py
中添加 Celery 的配置:
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
在 views.py
中编写一个异步任务:
from celery import shared_task
@shared_task
def async_task():
# do something here
pass
然后在视图函数中调用异步任务:
from .tasks import async_task
def index(request):
async_task.delay()
return render(request, 'index.html')
最后,启动 Celery 工作进程:
celery -A myproject worker -l info
这样就可以使用 Celery 异步任务了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何Docker化Python Django应用程序 - Python技术站