動機と概要
「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の設定完了済み
作業概要
作業ですがざっくり下記になります。
- dockerコマンドを使い、dockerのpythonイメージからflaskを含んだイメージの作成(※)
- docker-composeのyamlファイルを作成
- IntelliJのSDKに2で作成したyamlを指定
- flask
docker-composeをご存知の方なら、
「1.と2.の手順を分ける必要はないのではないか?2.のdocker-composeにまとめれば良いじゃないか。」
と思われるかもしれませんが、IntelliJの仕様なのか、2.にまとめるとエラーを吐いてしまい実行できませんでした。
1. dockerコマンドを使い、dockerのpythonイメージからflaskを含んだイメージの作成
Dockerfileは以下。
pythonイメージにflaskをインストールするため、pipコマンドの実行と
pipへ渡すモジュールのリスト(requirements.txt)ファイルを作成。
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
# 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ファイルを作成する。
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アプリケーションを起動してくれる。