在Windows 10 Home上安装Docker,并创建Django + PostgreSQL环境
以前,只有Windows 10 Pro才能使用Docker,但现在Windows 10 Home也可以轻松使用Docker。虽然Mac和Windows 10 Pro的使用很常见,但是长期以来在Home上无法使用,所以本次我将在文章中介绍如何在Windows Home环境下进行Django(Python)的配置。
如果已经使用过Docker,并且想要搭建Docker + Django + PostgreSQL的环境的人,我认为他们可以通过在Docker中运行Django来实现搭建。
环境
-
- Windows 10 Home 21H1
- Docker Desktop for Windows 4.0.0
嗯,如果最近的Windows更新做得好,我认为应该能使用得好。
使用Docker构建的Django环境。
在本地进行开发时,我们将构建Django应用程序。
-
- Django 3.2
- PostgreSQL
一旦你适应后,这个可以随时更改的,请根据需要进行更改。
顺便一提,我也写了一些适合初学者的Django相关文章,如果您有兴趣的话。
源代码
这一章的最终代码如下所示。请进行确认和复制粘贴。
下载和安装
请下载 Docker Desktop Installer.exe。
进行。
请关闭并重新启动,或者关闭该选项后点击。
如果以为这样就可以了的话,似乎还需要安装WSL2。
嗯,只有这里麻烦一点,所以我们要加油。
下载位置
点击下一步然后点击完成即可完成。
重启后安装工作已完成。
启动Docker时,右下角的鲸鱼显示为白色是正常的。
如果你只是想在 Windows 10 Home 使用 Docker,那么这就足够了。
使用Docker来运行Django。
我们将在本地搭建Django环境。
当您首次启动时,可能会显示Docker的教程,但这次我们将试着配置Django环境。
创建一个文件夹并创建Dockerfile。
在喜欢的位置创建一个文件夹,并在其中创建一个Dockerfile。如果不明白Dockerfile是什么的话,可以将其视为一个记录环境配置步骤的文件。
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONUNBUFFERED=1
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
COPY . /app/
详细描述细节
如果只是想要使用,下次去就可以。
FROM python:3: Python 3 の最新イメージを使用
ENV PYTHONUNBUFFERED=1: 「ENV」は環境変数の設定。Python使うときの環境変数
WORKDIR /app: これ以降どこのディレクトリで作業するか
COPY requirements.txt /app/: ファイルコピーrequirements.txtを作りましたよね。- – /appにディレクトリにコピーしてる。仮想環境なのでコンテナの中には今のところファイル存在ないのでコピー必要
RUN pip install -r requirements.txt: RUNがコマンド実行ということ。pip installして必要パッケージをテキストで記述してまとめてインストールするために使う
COPY . /app/: この時点でrequirements.txtしかファイル存在してない。これではアプリ動きようがないのでDjangoアプリのファイル全部コピーしてる
在requirements.txt文件中记录并安装所需的包。
刚才在Dockerfile中提到过,为了在Dokcer环境中使用,我们将将需要安装的软件包列在requirements.txt中,以便一次性进行安装。
Django>=3.2,<3.3
psycopg2-binary>=2.8
请描述安装Django和PostgreSQL所需的Django使用所需的包。
为了防止仅升级到主要版本,且由于版本指定相对宽泛,建议限制在Django>=3.2,<3.3。
创建docker-compose.yml文件
只要能动就好的设定。
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
用中文詳細說明这个事物的內容。
如果只是想用一下的话,那去吧,没问题。
version: Docker-composeのバージョン「3」とかでもいいです。
services: 今回使うのはPostgreSQL、Djangoアプリなのでそれぞれ「db」「web」という名前つけてます。
db: イメージは取得してきたpostgresを使用します。既製品という感じ?
volumes: コンテナってデータ保持能力ないんです。動いてるときはいいけど、毎回消えます。それだとDBの意味ないですよね。ということでローカルの./data/dbに保存したというか、共有したというか思っておけばとりあえずいいと思います。
environment: コンテナ内だけで使う環境変数設定できるので設定。
web: Djangoアプリ用。Linux環境にPython入ってる環境を改造して色々入れてる感じ。
build: . つまりdocker-composeにあるディレクトリでビルドしてる。dockerfileのディレクトリ注意
command: コマンド実行してるサーバー立ち上げてる。ついでに起動した開発サーバー止まるとコンテナ止まる。
ports: ポートフォワード。ホスト側8000番→コンテナ8000番に通してる。だからブラウザにlocalhost:8000で繋げることができてる。
environment: settings.pyで使う環境変数なので重要
depends_on: DB起動してからでないとDjango使えないというか、エラー出るので上で決めた「db」が起動してから「web」起動してねってこと
创建Django项目
在命令行中执行以下代码。这次我们将使用项目名称为app创建。
docker-compose run web django-admin startproject app .
请使用docker-compose run命令单独启动web服务,并执行django-admin startproject app .命令。
只要使用过Django的人应该就会明白,这是用于在Django中启动第一个项目的命令。
第一次执行时,它会自动获取构建所需的镜像,所以需要一些时间。
=> [2/5] WORKDIR /app 36.1s
=> [3/5] COPY requirements.txt /app/ 0.2s
=> [4/5] RUN pip install -r requirements.txt 10.4s
=> [5/5] COPY . /app/ 1.7s
=> exporting to image 1.2s
=> => exporting layers 1.2s
=> => writing image sha256:394255b3848438c6533f150499a35141a7c2a886a143aa4e34b4c57adb5z59ac 0.0s
=> => naming to docker.io/library/django_docker_web 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
如果出现这样的显示,那就没问题了。
由于在卷上更新了数据库,应该能够生成大量与数据库相关的文件。如果您对推送等操作有所顾虑,请稍后在.gitignore中进行排除。
在settings.py中添加数据库设置
由于无法启动DB,因此需要更改设置。总之,通过这样可以连接到DB并进行数据保存等操作。
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
...
使用docker-compose up命令启动Django应用
那么,启动命令。 , .)
docker-compose up
如果没有错误,我认为它将以这种方式启动。
http://本地主机:8000/
是的,它成功地启动了!
其他设置
以后不是必需的。已经可以使用 Docker + Docker + PostgreSQL。
我认为可以尝试一下。
修改Django的配置
我覺得日本時間比較方便,所以我會適應它。
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
在处理管理界面和处理时间时,日语非常重要。
将DB中的数据推送是不好的
目前的情况是将包含数据库数据和配置的大量文件进行推送。这样会导致差异很大,而且如果有不该展示的数据被显示出来,将会非常麻烦。为了避免这些问题,我们将不会将它们推送到GitHub上。
请创建一个.gitignore文件,并将/data添加到其中。这样可以显著减少差异。
顺便说一下,在源代码中还包含了一些通常被推送视为危险的Python文件的添加,如果需要的话,请复制粘贴下来。
data/
在docker-compose中设置环境变量
嗯,其实不需要,但是在部署时了解如何使用环境变量是很有好处的,所以我会进行设置。
import os
...
SECRET_KEY = os.environ.get('SECRET_KEY')
...
DEBUG = bool(int(os.environ.get('DEBUG', 0)))
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'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': int(os.environ.get('DB_PORT')),
}
}
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- DB_NAME=postgres
- DB_USER=postgres
- DB_PASSWORD=postgres
- DB_HOST=db
- DB_PORT=5432
- DEBUG=1
- SECRET_KEY=devsecretkey
depends_on:
- db
顺便提一下,在启动时加上“–build”参数,它会自动构建并启动,非常方便。
docker-compose up --build
请确认是否能够顺利启动。
在VS Code的扩展中,同时使用Windows和Linux。
提供补充信息。只要有兴趣的人即可。
对于使用 Windows 的人来说,有时候必须使用命令提示符,并且还有很多繁琐的事情。
对于正在使用 Windows 的人来说,这是对想要使用 Linux 的人有用的功能。
使用Dockerfile选择后,可以获取到我们在此次构建中使用的Python镜像,也就是在Windows上得到了Linux开发环境。
起初可能会花费一些时间。
源代码
本章的代码如下。请随意确认或复制粘贴。