ディレクトリ構造

あらかじめ作成しておくファイルなど。

compose.yml
backend
├ requirements.txt
└ その他Djangoファイル
docker
├ django
│├ Dockerfile
│└ wait-for-it.sh
└ mysql
 ├ Dockerfile
 └ init.sql

compose.ymlは下記のようになってます。

compose.yml

services:
  db:
    container_name: django_spa_db
    platform: linux/x86_64
    build:
      context: ./
      dockerfile: ./docker/mysql/Dockerfile
    volumes:
      - db-store:/var/lib/mysql
      - ./docker/mysql:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: "Asia/Tokyo"
    ports:
      - 3306:3306
    networks:
      - django_spa
  backend:
    container_name: django_spa_back
    build:
      context: ./
      dockerfile: ./docker/django/Dockerfile
    ports:
      - 8000:8000
    volumes:
      - ./backend:/backend
    command: ["/wait-for-it.sh", "db:3306", "--", "python", "manage.py", "runserver", "0.0.0.0:8000"]
    depends_on:
      - db
    networks:
      - django_spa
networks:
  django_spa:
    driver: bridge
volumes:
  db-store:

Pythonインタープリター設定

設定パネルを開いたらプロジェクト > Pythonインタープリター > インタープリターの追加からDocker...を選択します。

Docker Composeもあるのですが、こちらを選択するとcompose.ymlが上書きされ動かなくなりました。

新規ターゲットでは「プルまたは既存を使用」にチェックをして、イメージタグにはそのままイメージタグを入力します。

あとはそのまま進めば最初の画面でDockerコンテナのインタープリターが選択された状態になります。
パッケージも表示されていれば設定完了です。

データベース設定

データベースを見れるようにしてみます。
右バーのデータベースアイコンをクリックしてデータソース > MySQLを選択します。

設定パネルが開いたらcompose.ymlに記載した情報を入力しましょう。

これで右バーにデータベースが表示されます。

ユニットテスト

右上の再生マークの左から実行構成の編集...を選択。

次は構成テンプレートの編集...を選択。

テンプレートを次のように編集します。

オプションはユニットテスト実行時に指定しているようならそのまま入力。
Docker コンテナーの設定に記載したnetworkを追記します。
下記コマンドで確認してください。

$ docker network ls

今回は次のような設定になります。

--entrypoint= --rm --network djangoreactspa_django_spa

これでテストファイルの左にある再生アイコンからテストが実行できるようになります。

コマンドラインの実行(Ruff)

ファイルから何かしらのコマンドを実行したいときがあります。
今回はリンター・フォーマッターのRuffを実行できるようにしてみます。

最初に設定 > プロジェクト > プロジェクト構造backendがソースルートになっていることを確認します。

次に設定 > ツール > 外部ツールを選択。
下記のように入力します。

プログラム docker
引数 compose exec backend ruff check $FilePathRelativeToSourcepath$ –fix
外部ツールの設定画面

これで、右クリックから外部ツールで実行できるようになります。

以上でPyCharmでDocker+Django開発環境を整える方法でした。
もっといい方法があると思いますので、何かわかったら更新します。