LinuxでDocker上にDjango+PostgreSQLの開発環境を構築する方法

この記事は公開から2年以上経過しています。

Linux(openSUSE Leap 15.3)でVSCodeを使い、Docker上にPython(3.9.14)/Django(4.1.1)/psycopg2(2.9.3)/PostgreSQL(14.5)の開発環境を作ってみたので、その備忘録。


手順

  1. Django開発作業用の任意のフォルダを作成して、そのままVSCodeで開く。

    mkdir DjangoTest && code $_
  2. VSCodeのエクスプローラ上でカレントディレクトリに新規テキストファイルを作成、以下の内容を入力してファイル名Dockerfileで保存する(※パッケージ数が少ないためpipをインラインで記載しています)。

    DockerFile:

    FROM python:3.9
    ENV PYTHONDONTWRITEBYTECODE=1
    ENV PYTHONUNBUFFERED=1
    WORKDIR /code
    ADD . /code
    RUN pip install django psycopg2
    COPY . /code/
  3. VSCodeのエクスプローラ上でカレントディレクトリに新規テキストファイルを作成、以下の内容を入力してファイル名docker-compose.ymlで保存する。

    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:
          - .:/code
        ports:
          - "8000:8000"
        environment:
          - POSTGRES_NAME=postgres
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        depends_on:
          - db
  4. VSCodeのターミナルから、カレントディレクトリ上にDjangoのプロジェクトを作成する(※root権限で実行しないとボリュームのマウントに失敗します)。

    sudo docker-compose run web django-admin startproject djangotest .

    この時点でのDockerイメージとコンテナは以下のとおり。

    イメージ:

    docker image ls
    REPOSITORY                                       TAG       IMAGE ID       CREATED         SIZE
    djangotest_web                                   latest    7d287da519ad   3 minutes ago   996MB
    postgres                                         latest    75993dd36176   2 weeks ago     376MB

    コンテナ:

    docker ps -a --no-trunc
    CONTAINER ID                                                       IMAGE                                            COMMAND                                      CREATED         STATUS                      PORTS      NAMES
    78c6b0bc32065275b08aa96611f2f21a52abcfb8a8d01c9b71e9c5cf4943fb8a   djangotest_web                                   "django-admin startproject djangotest ."     5 minutes ago   Exited (0) 5 minutes ago               djangotest_web_run_93c3fe35bf59
    d14a97831554269726d3f884e1808c1cad4cef6fee1f580bda32cad50ae75d24   postgres                                         "docker-entrypoint.sh postgres"              6 minutes ago   Up 6 minutes                5432/tcp   djangotest-db-1
  5. 作成されたプロジェクトのDjangoのプロジェクトフォルダmanage.pyの所有者がrootになっているので、所有者を自分に変更する(グループ名がユーザー名と異なる場合は、お使いの環境に合わせてください)。

    sudo chown -R $USER:$USER djangotest manage.py

    ローカルカレントディレクトリのフォルダ/ファイル構成は以下のとおり。

    file

  6. VSCodeのエクスプローラからDjangoのプロジェクトフォルダ内のsettings.pyを開き、データベース設定DATABASESの定義をdocker-compose.ymlに定義した設定内容に変更して保存する。

    # Database
    # https://docs.djangoproject.com/en/4.1/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'postgres',
            'USER': 'postgres',
            'PASSWORD': 'postgres',
            'HOST': 'db',
            'PORT': 5432,
        }
    }
  7. 以下のコマンドでコンテナを作成&起動する。

    docker-compose up
  8. WEBブラウザでhttp://localhost:8000を開き、以下のようなDjangoのデモページが表示されれば環境構築が完了です。

    file

    この時点でのDockerコンテナは以下のとおり。

    コンテナ:

    CONTAINER ID                                                       IMAGE                                            COMMAND                                      CREATED         STATUS                      PORTS                                       NAMES
    d27e567886a029ffae594fd2e0d58e51faa2044d2b81ff4916180c9dfe6c8492   djangotest_web                                   "python manage.py runserver 0.0.0.0:8000"    9 minutes ago   Up 8 minutes                0.0.0.0:8000->8000/tcp, :::8000->8000/tcp   djangotest-web-1
    67c090fadedabbb0cda1d37c50707b971fa40a02071f5e5cc34dd9fa30400978   postgres                                         "docker-entrypoint.sh postgres"              9 minutes ago   Up 9 minutes                5432/tcp                                    djangotest-db-1
    78c6b0bc32065275b08aa96611f2f21a52abcfb8a8d01c9b71e9c5cf4943fb8a   djangotest_web                                   "django-admin startproject djangotest ."     5 hours ago     Exited (0) 5 hours ago                                                  djangotest_web_run_93c3fe35bf59
  9. コンテナを終了する場合は、docker-compose upを実行したターミナル上でCtrl {c}を押下するか、VSCodeのカレントディレクトリ上で新しいターミナルを開きdocker-compose stopを実行する。


参考ウェブサイトなど

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする