概要
DockerでPython環境とDBを構築する際のテンプレート
いつもディレクトリ構成やファイルマウントどうするか悩んでいたのでテンプレートを作成した.
今後アップデートする可能性あり.
ディレクトリ構成
C:.
├─app # アプリケーション用のコードを格納
└─docker # dockerで使用するファイルやディレクトリを格納
├─app # appコンテナの設定ファイルを格納
└─database # databaseコンテナで使用するファイルやディレクトリを格納
├─data # databaseコンテナのデータを永続化するためのディレクトリ
└─init # コンテナ起動時に実行するSQLファイルを格納
主なファイル
Dockerfile
- アプリケーションサーバー用の設定を記述
- rootではなく一般ユーザーで実行できるようにする
FROM python:3.12-slim
ARG USERNAME=app-user
# ユーザーを作成し、そのユーザーのホームディレクトリを作成
RUN useradd -ms /bin/bash $USERNAME
# 作業ディレクトリを設定
WORKDIR /home/$USERNAME/app
# ユーザーを変更
USER $USERNAME
# requirements.txt をコピー
COPY requirements.txt /home/$USERNAME/app/
# pip をアップグレードし、必要なパッケージをインストール
RUN pip install --upgrade pip && \
pip install --no-cache-dir -r requirements.txt
docker-compose.yml
- データベースとアプリケーションサーバを定義
services:
database:
image: postgres:14
container_name: database
restart: always
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_DB: root
ports:
- "5432:5432"
volumes:
- ./database/data:/var/lib/postgresql/data
- ./database/init:/docker-entrypoint-initdb.d
app:
build: ./app
container_name: app
depends_on:
- database
volumes:
- ../app/:/home/app-user/app/
tty: true
コンテナ起動
dockerディレクトリに移動
cd docker
コンテナ起動
docker compose up -d
appコンテナ
appコンテナ接続
docker compose exec app /bin/bash
プログラム実行
python app.py
databaseコンテナ
databaseコンテナ接続
docker compose exec database /bin/bash
データベース接続
psql -U root
コンテナ削除
docker compose down