用Docker创建Django容器:初学指南

首先

我在Udemy上学习Docker的过程中,希望能够输出学习进度。
这次我想要在Docker上运行Django。

环境

    • Windows10

 

    • Docker version 24.0.6

 

    • VScode

 

    Git Bash

参考网站

 

定义项目的组件

    プロジェクト用のディレクトリを作成します
mkdir composeexample
cd composeexample
    プロジェクトディレクトリのDockerfileを新規作成し、次の内容を加えます。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install --upgrade pip && \
    pip install -r requirements.txt
ADD . /code/
    プロジェクト・ディレクトリにrequirements.txtを生成し、必要なソフトウェアを記載します。
Django
psycopg2
    プロジェクト・ディレクトリにdocker-compose.ymlを生成し、以下の設定を追加します。
version: '3'

services:
  db:
    image: postgres
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

生成Django项目

docker-compose run web django-admin startproject composeexample .

在我的环境中,如果执行参考网站上所列的docker-compose run web django-admin.py startproject composeexample .命令

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "django-admin.py": executable file not found in $PATH: unknown
time="2023-10-09T07:53:04+09:00" level=error msg="error waiting for container: "

由于无法在容器的PATH中找到可执行文件”django-admin.py”,所以容器无法启动,报了一个错误。如果删除了.py文件,问题就解决了。

    成されたファイルの所有者を以下のようにして変更します。
chown -R $USER:$USER .

ls -l コマンドで権限が更新されているかを確認します。

ls -l
$ ls -l
total 11
drwxr-xr-x 1 [user name] 197121   0 Oct  9 07:54 composeexample/
-rw-r--r-- 1 [user name] 197121 223 Oct  9 07:50 docker-compose.yml
-rw-r--r-- 1 [user name] 197121 149 Oct  9 07:47 Dockerfile
-rwxr-xr-x 1 [user name] 197121 670 Oct  9 07:54 manage.py*
-rw-r--r-- 1 [user name] 197121  16 Oct  9 07:48 requirements.txt

连接到数据库的设置

settings.pyのDATABASE=…の部分を以下のように書き換えます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PASSWORD': 'postgres',
        'PORT': 5432,
    }
}
    プロジェクトのトップ・ディレクトリにおいてコマンド docker-compose up -d を実行します。
docker-compose up -d

docker-compose exec web bashでコンテナに入ります。

docker-compose exec web bash

python manage.py migrateを実行します。

python manage.py migrate
    superuserを登録します。
python manage.py createsuperuser
image.png

在本地主机的8000端口下创建的superuser可以登录到管理员界面,也可以确认这一点。

尝试进入POSTGRESQL容器

docker-compose exec db bashでコンテナに入ります。

docker-compose exec db bash
    以下のコマンドでログインします。
psql -h localhost -U postgres -d postgres
    \dtでテーブルを確認してみます。
postgres=# \dt
                   List of relations
 Schema |            Name            | Type  |  Owner
--------+----------------------------+-------+----------
 public | auth_group                 | table | postgres
 public | auth_group_permissions     | table | postgres
 public | auth_permission            | table | postgres
 public | auth_user                  | table | postgres
 public | auth_user_groups           | table | postgres
 public | auth_user_user_permissions | table | postgres
 public | django_admin_log           | table | postgres
 public | django_content_type        | table | postgres
 public | django_migrations          | table | postgres
 public | django_session             | table | postgres

Django的表格已经创建了!

postgres=# SELECT * FROM auth_user;
 id |                                         password                                         |          last_login           | is_superuser | username | first_name | last_name | email | is_staff | is_active |          date_joined   

----+----+-------------------------------+-----+-------+----+---+--+---+----+-------------------------------
  1 |pass| 2023-10-09 13:23:24.426382+00 | t   | admin |    |   |  | t | t  | 2023-10-09 13:23:06.695555+00
(1 row)

似乎已经注册了超级用户。

广告
将在 10 秒后关闭
bannerAds