下面是详解如何使用Docker部署Django+MySQL8开发环境的完整攻略。
1. 安装Docker
这一步需要去Docker官网下载并安装Docker。
2. 创建项目目录
首先在本地创建一个项目目录,例如我们可以在用户目录下创建一个"docker-django"的文件夹来存放我们的项目。接着运行以下命令进入项目目录:
$ cd ~/docker-django
3. 创建Docker Compose文件
在项目目录下创建docker-compose.yml文件,并使用文本编辑器打开,输入以下内容:
version: '3'
services:
db:
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: django_db
volumes:
- ./mysql-data:/var/lib/mysql
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
environment:
- DB_HOST=db
- DB_NAME=django_db
- DB_USER=root
- DB_PASSWORD=root_password
ports:
- "8000:8000"
depends_on:
- db
volumes:
- .:/code
接下来让我们一步步来分析这段Docker Compose配置文件:
- version: 指定Docker Compose文件格式的版本,这里我们使用的是3的版本;
- services: 指定我们需要启动的Docker容器,这里我们需要启动两个容器,一个是MySQL8,另一个是我们Django的web应用;
- db: 这个容器使用了MySQL8的官方镜像,在容器内会默认运行mysqld服务,同时设置了MYSQL_ROOT_PASSWORD密码和MYSQL_DATABASE数据库名称,并且将MySQL的数据目录映射到了本地的
./mysql-data
目录,这样在容器重启时数据不会丢失; - web: 这个容器需要使用我们自己的Django代码来进行构建,使用了build指令,并且在容器内执行了启动web应用的命令。同时还设置了访问MySQL8所需的环境变量,并映射了容器内的8000端口到本地的8000端口,方便我们在本地访问容器内的web应用。在Docker Compose的最后,使用volumes指令将本地的工作目录
/code
映射到容器内的容器路径/code
,目的是让你在本地的文本编辑器中编辑 Django 代码,并使修改反映在容器内的代码。
4. 编写Dockerfile
在项目目录下创建一个名为"requirements.txt"的文本文件,并输入以下内容:
Django
mysqlclient
这个文本文件指定了项目所需的Django和mysqlclient库。
接下来,在项目目录下创建一个名为"Dockerfile"的文本文件,并输入以下内容:
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
这个Dockerfile指定了Docker容器的构建方式。我们继承了Python 3镜像,并在容器中创建了一个code目录,并在该目录中安装了requirements.txt中所需要的依赖库。并且将我们本地的代码目录使用COPY指令复制到容器内。
5. 启动容器
使用以下命令启动docker-compose:
$ docker-compose up
docker-compose会根据docker-compose.yml文件中定义的服务和相关配置,创建并启动容器。
6. 访问Django应用
现在,可以在浏览器访问 http://localhost:8000 来查看你的Django应用是否正常工作了。如果它工作正常,那么你应该能够看到一条关于Django成功运行的消息。
示例1:新增一个Django应用
假设我们现在要再添加一个新的Django应用,可以通过以下步骤实现:
- 在项目目录
./code
下使用以下命令创建新的django应用newapp
:
$ python manage.py startapp newapp
- 应用新增后需要在settings.py文件中注册,加入INSTALLED_APPS设置中:
INSTALLED_APPS = [
...
'newapp',
]
- 修改应用视图views.py,新增内容如下:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, this is the newapp!")
- 修改应用路由urls.py,新增内容如下:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
- 最后需要重启容器,使得新代码能够生效:
$ docker-compose restart
现在可以在浏览器访问 http://localhost:8000/newapp 来查看新的Django应用是否正常工作了。
示例2:连接数据库
假设我们现在要在Django应用中连接MySQL8数据库,可以通过以下步骤实现:
- 在应用下的settings.py中加入连接MySQL所需的设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASSWORD'),
'HOST': os.environ.get('DB_HOST'),
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
}
- 在newapp中views.py增加访问MySQL函数:
import os
import pymysql
def mysql_test(request):
conn = pymysql.connect(
host=os.environ.get('DB_HOST'),
user=os.environ.get('DB_USER'),
password=os.environ.get('DB_PASSWORD'),
database=os.environ.get('DB_NAME'),
charset='utf8mb4'
)
cursor = conn.cursor()
cursor.execute('SELECT VERSION()')
result = cursor.fetchone()
conn.close()
return HttpResponse("MySQL Version: %s" % result)
- 修改urls.py,增加MySQL访问路由:
path('mysql_test', views.mysql_test, name='mysql_test'),
- 重启容器,使之生效:
$ docker-compose restart
现在可以在浏览器访问 http://localhost:8000/newapp/mysql_test 来查看是否连接MySQL成功。
至此,我们已经完成了如何使用Docker部署Django+MySQL8开发环境的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解如何使用Docker部署Django+MySQL8开发环境 - Python技术站