IntelliJとdocker-composeを使いローカル環境を汚さずにflask+postgresql環境を構築する


動機と概要

IntelliJ+Dockerでlocalを汚さず開発」を参考にさせていただき、IntelliJとdocker-composeを使いlocal環境を汚さずにflask + postgresql開発環境を作ってみたのでまとめてみました。

環境

ソフトウェア バージョン
Windows 10 Professional -
IntelliJ Ultimate 2020.3
docker desktop community 2.5.0.1

前提条件

  • docker for windowsがインストール済み
  • IntelliJへ下記プラグインがインストール済み
    • dockerプラグイン
    • Pythonプラグイン
  • docker hubへアカウント登録済み
  • IntelliJにdocker for windowsの設定完了済み

作業概要

作業ですがざっくり下記になります。

  1. dockerコマンドを使い、dockerのpythonイメージからflaskを含んだイメージの作成(※)
  2. docker-composeのyamlファイルを作成
  3. IntelliJのSDKに2で作成したyamlを指定
  4. flask

docker-composeをご存知の方なら、
「1.と2.の手順を分ける必要はないのではないか?2.のdocker-composeにまとめれば良いじゃないか。」
と思われるかもしれませんが、IntelliJの仕様なのか、2.にまとめるとエラーを吐いてしまい実行できませんでした。

1. dockerコマンドを使い、dockerのpythonイメージからflaskを含んだイメージの作成

Dockerfileは以下。
pythonイメージにflaskをインストールするため、pipコマンドの実行と
pipへ渡すモジュールのリスト(requirements.txt)ファイルを作成。

Dockerfile
FROM python:3

LABEL version="1.0"
LABEL description="Python Flask"

WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
requirements.txt
# flask
flask
flask_sqlalchemy
# psycopg2 : postgresql driver
psycopg2-binary
psycopg2

上記ファイルを適当なフォルダに保存したら、コマンドプロンプトを起動して
フォルダ上で下記のdocker buildコマンドを実行し、flaskがインストールされた
pythonイメージを作成する。

> docker build -t <docker hubのアカウント名>/pythonflaskcheck .

2. docker-composeのyamlファイルを作成

適当なフォルダへ、下記のdocker-compose.ymlファイルを作成する。

docker-compose.yml
version: '3'

services:

  db1:
    image: postgres:12.4-alpine
    container_name: 'flask_check_db'
    expose:
      - '5432'
    ports:
      - '5432:5432'
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=appdata

  python:
    image: <docker hubのアカウント名>/pythonflaskcheck
    container_name: 'flask_check_app'
    depends_on:
      - db1
    expose:
      - '5000'
    ports:
      - '5000:5000'
    stdin_open: true
    tty: true
    command: /bin/bash

3. IntelliJのSDKに2で作成したyamlを指定

File -> Project Structureをクリック。
※ 手順を飛ばしていますが、事前にIntelliJ上でpythonのプロジェクトを作成しています。

左ペインからProjectをクリック。
右ペイン上にProject SDKが表示されるので、
リストから Add SDK → Python SDK... をクリック。


左ペインからDocker Composeをクリック。
Configuration file(s)に、2で作成したdocker-compose.ymlを指定する。
指定すると、Serviceのプルダウンに「db1」「python」がリストされるので、
「python」を選択し、OKボタンをクリックする。

flaskの起動用pythonファイルを右クリックし、メニューから「Run」をクリックする。

あとはIntelliJが自動的にdocker-composeを実行して、2.で作成したdocker-compose.ymlをもとに
コンテナを起動し、flaskアプリケーションを起動してくれる。