この記事は公開から2年以上経過しています。
Linux(openSUSE Leap 15.3)でVSCodeを使い、Docker上にPython(3.9.14)/Django(4.1.1)/psycopg2(2.9.3)/PostgreSQL(14.5)の開発環境を作ってみたので、その備忘録。
手順
-
Django開発作業用の任意のフォルダを作成して、そのままVSCodeで開く。
mkdir DjangoTest && code $_
-
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/
-
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
-
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
-
作成されたプロジェクトの
Djangoのプロジェクトフォルダ
とmanage.py
の所有者がrootになっているので、所有者を自分に変更する(グループ名がユーザー名と異なる場合は、お使いの環境に合わせてください)。sudo chown -R $USER:$USER djangotest manage.py
ローカルカレントディレクトリのフォルダ/ファイル構成は以下のとおり。
-
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, } }
-
以下のコマンドでコンテナを作成&起動する。
docker-compose up
-
WEBブラウザで
http://localhost:8000
を開き、以下のようなDjangoのデモページが表示されれば環境構築が完了です。この時点での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
-
コンテナを終了する場合は、
docker-compose up
を実行したターミナル上でCtrl
+{c}
を押下するか、VSCodeのカレントディレクトリ上で新しいターミナルを開きdocker-compose stop
を実行する。
参考ウェブサイトなど
-
docker docs
Quickstart: Compose and Django -
Django docs
はじめての Django アプリ作成、その 1
以上です。