Zenn
🐋

DockerでPython開発!毎回`docker build`せずにコードを即時反映する方法

2025/03/31に公開
2

はじめに

Dockerを使ってPythonの開発環境を作成し、スクリプトを実行していたら、「なぜか変更が反映されない!」と困った経験はありませんか?

せっかくコンテナ化して環境を統一したのに、コードを変更するたびに docker build しないといけないのは面倒ですよね。本記事では、この問題がなぜ発生するのかを解説し、解決策として -v オプション(ボリュームマウント)を紹介します。

急いでいる人のためのまとめ

最終的な構成

.
├── Dockerfile
└── main.py

実行手順

docker build -t my-python-app .
docker run -v .:/app my-python-app

問題の発生:変更が反映されない!?

まずは、シンプルなDocker環境でPythonスクリプトを実行してみましょう。

1. Dockerfileの作成

# Pythonの公式イメージを使用
FROM python:3.12.9

# 作業ディレクトリを設定
WORKDIR /app

# スクリプトをコンテナ内にコピー
COPY main.py /app/main.py

# Pythonスクリプトを実行
CMD ["python", "main.py"]

2. main.py の作成

print("Hello, Docker!")

3. ビルドと実行

docker build -t my-python-app .
docker run my-python-app

実行結果:

Hello, Docker!

ここで main.py を修正して、以下のように変更してみます。

print("Hello, Updated Docker!")

再度 docker run my-python-appを実行しても、出力は変わらず Hello, Docker! のままです。

なぜ変更が反映されないのか?

これは COPY コマンドが ビルド時 にファイルをコンテナにコピーするためです。docker run では、すでにビルドされたイメージを元にコンテナが作成されるため、新しい main.py の変更が反映されないのです。

docker run は、docker build で作成されたスナップショット(イメージ)を基に新しいコンテナを作成して実行します。そのため、イメージを更新しない限り、コンテナ内のファイルは変わりません。

この問題を解決するためには、毎回 docker build をやり直す必要がありますが、開発中にそんな手間をかけたくないですよね。

解決策:ボリュームマウント(-v オプション)

-v オプションを使うことで、ホストのディレクトリをコンテナ内にマウントし、リアルタイムで変更を反映できます。

docker run -v .:/app my-python-app

こうすると、ホスト側の main.py を修正すると、コンテナ内の main.py も即座に更新されるため、再ビルドなしで変更を反映できます。

まとめ

COPY はビルド時にのみ動作するため、コードを変更しても docker run では反映されない
✅ 開発中に変更を即時反映させるには、-v オプションでホストとコンテナのファイルを同期する
これにより、スムーズなPython開発環境を構築できる
Dockerを使った開発環境構築の際に、ぜひ -v オプションを活用してください!

2

Discussion

ログインするとコメントできます