FlaskアプリをDockerでコンテナ化する方法!初心者でもわかる完全ステップガイド
生徒
「Flaskで作ったアプリを、Dockerというものを使って公開できるって聞いたんですが、本当ですか?」
先生
「はい、できますよ。Docker(ドッカー)は、アプリを箱に入れるようにして、どこでも同じ環境で動かせる便利なツールです。」
生徒
「でも難しそうです…。パソコンもあまり触ったことないんです。」
先生
「大丈夫です。一つひとつ、ゆっくり丁寧に説明していきますね。」
1. Docker(ドッカー)ってなに?わかりやすく解説
Docker(ドッカー)は、アプリやプログラムを箱(コンテナ)に詰めて持ち運ぶ仕組みです。
たとえば、家で作った料理をお弁当箱に入れて、どこでも同じ味で食べられるようにするイメージです。
このお弁当箱が「Dockerコンテナ」です。Flaskアプリをこの箱に入れると、他の人もそのまま同じ状態で動かせます。
2. Flask(フラスク)とは?超入門
Flask(フラスク)は、Pythonという言語で作る軽いウェブアプリの仕組みです。
例えば、問い合わせフォームや簡単なブログを作るときに使います。
Flaskは「必要なものだけ」を用意して、自分の好きな形で作れるのが特徴です。
3. DockerでFlaskを動かすと、なにが良いの?
- 他の人のパソコンやサーバーでも同じように動く
- 「動かないエラー」が少なくなる
- 一度作れば何度でも同じように使える
つまり、アプリの配布や運用が、とてもラクになるのです。
4. まずはFlaskアプリを作ってみよう
以下はとても簡単なFlaskアプリの例です。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "こんにちは!これはDockerで動くFlaskアプリです。"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
このコードは「Flaskを使って、ウェブページに文字を表示する」だけのシンプルなものです。
5. Dockerfile(ドッカーファイル)とは?
Dockerfileとは、「どんなお弁当を作るか」を書いたレシピのようなものです。
このレシピを元に、DockerがFlaskアプリを箱に詰めてくれます。
下のように書きます。
FROM python:3.10-slim
WORKDIR /app
COPY . /app
RUN pip install flask
EXPOSE 5000
CMD ["python", "app.py"]
ポイントの説明:
FROM:Pythonを使うよ、という宣言WORKDIR:作業フォルダを「/app」にするCOPY:今のファイルをコンテナにコピーRUN:FlaskをインストールEXPOSE:使うポート(入口)を指定CMD:アプリのスタート方法
6. Dockerでコンテナを作る手順
以下のようにコマンドを順番に入力していきます。
これは「お弁当箱を作って、フタを開けて中を見る」という流れです。
# Dockerfileのある場所に移動して
docker build -t flask-docker-app .
# コンテナを起動する
docker run -p 5000:5000 flask-docker-app
-tは「名前をつける」という意味です。-pは「ポート番号の橋渡し」です。
7. ブラウザで確認してみよう
Dockerを動かしたあと、パソコンのブラウザを開いて、次のURLにアクセスします。
http://localhost:5000
「こんにちは!これはDockerで動くFlaskアプリです。」と表示されれば成功です。
8. エラーが出たときのチェックポイント
- Dockerがインストールされていない: → 公式サイトからインストールして再起動
- ポート5000が使えない: → 他のアプリが使っているかもしれません。
docker run -p 8000:5000などで変更してみましょう - Flaskのスペルミス: →
flaskは小文字です。大文字にしないよう注意
9. Flaskアプリを更新したらどうする?
アプリを修正したら、もう一度Dockerイメージを作り直します。
docker build -t flask-docker-app .
docker run -p 5000:5000 flask-docker-app
こうすることで、新しい内容に反映されます。
10. requirements.txtを使う方法も知っておこう
Flask以外にもたくさんのライブラリを使うときは、requirements.txtという一覧ファイルを使います。
flask
Dockerfileを以下のように変更します。
FROM python:3.10-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
これで、まとめて必要なライブラリが自動でインストールされます。
まとめ
FlaskアプリをDockerでコンテナ化するまでの流れを振り返ると、Pythonで作った軽量なウェブアプリをどこでも同じ環境で動かすために、Dockerという仕組みが非常に役立つことがわかります。とくに初心者が悩みやすい「環境の違いによる動作のズレ」を防ぎ、安定してアプリを動かせる点が大きな魅力です。この記事を通して、Dockerという仕組みが何をしてくれるのか、そしてFlaskアプリをどのようにコンテナに詰めて動かすのかを具体的に理解できたはずです。まずはFlaskアプリを作り、その後Dockerfileを用意するという流れは、ウェブ開発の基本的な手順を身につけるうえでも大切な経験になります。
Dockerでコンテナを作る仕組みは、あたかも手作りした料理をお弁当箱に詰め込んで、どこへでも持ち運べるようにしたような感覚に近いものです。PythonやFlaskのインストール環境が人それぞれ違っても、Dockerコンテナにまとめてしまえば、いつでも同じ状態で実行できます。また、Dockerfileはレシピのような役割を持ち、どのPythonバージョンを使うか、どのライブラリをインストールするか、どのポートを開くかなどを明確に記述することで、誰が使っても同じ環境が再現されます。手順そのものはシンプルでありながら、実際の開発では非常に重要な概念が詰まっています。
コンテナを実行するときのdocker buildやdocker runのコマンドは、開発の現場でも頻繁に使われる基本操作です。アプリを修正したら新しくイメージを作り直し、再度コンテナを起動するというサイクルは、学習を続けるうちに自然と身についていくでしょう。また、requirements.txtを使って複数のライブラリをまとめて管理する方法も、Flaskアプリを本格的に運用するうえで欠かせない知識です。ライブラリの管理を適切に行うことで、コンテナの再現性が高まり、別のパソコンやサーバーで動作確認するときも安心できます。
さらに、エラーが出たときのチェックポイントも非常に重要です。ポートの競合やDockerのインストール状態、スペルミスといった初歩的なつまずきは、初心者が必ずどこかで経験するポイントです。今回の解説で紹介したような手順を思い出しながら、一つずつ丁寧に確認していくことで、エラーに強い開発スタイルが自然と身に付いていきます。特にFlaskアプリではポート番号の指定が重要で、Dockerコンテナ内と外の接続を正しくマッピングすることで、ブラウザからアプリにアクセスできるようになります。
ここでは、記事内で扱ったFlaskアプリの代表的な構成とDockerfileをもう一度掲載し、全体の関連性を整理しておきます。各ファイルの役割や記述の意味を再確認することで、DockerとFlaskのつながりがより深く理解できるでしょう。
Flaskアプリの基本構成サンプル
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "こんにちは!これはDockerで動くFlaskアプリです。"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
Dockerfileの基本構成サンプル
FROM python:3.10-slim
WORKDIR /app
COPY . /app
RUN pip install flask
EXPOSE 5000
CMD ["python", "app.py"]
これらのファイルがどのようにつながっているのかを意識しながら実際にコンテナを作成してみると、DockerがどのタイミングでFlaskアプリを読み込み、どのように環境を整えてくれるのかが一段と理解しやすくなります。今回紹介した手順を実際に動かしてみることで、コンテナ化という技術の意味がはっきり見えてきますし、今後クラウドサービスにデプロイする際の基礎力としても大きく役立つでしょう。FlaskとDockerという二つのテーマは、今のウェブ開発においてとても相性が良く、学んでおくことで開発の幅が大きく広がります。
生徒
「DockerでFlaskアプリを動かす仕組みがだいぶイメージできるようになりました。コンテナという考え方がわかりやすかったです。」
先生
「一度仕組みを理解すると、Dockerはとても強力な道具になりますよ。環境の違いで悩まされることが減るので、開発が楽になります。」
生徒
「Dockerfileの意味もわかりました。レシピのように必要な手順が書いてあるんですね。」
先生
「その通り。Flaskアプリをどう動かすかをDockerに教えるためのものです。慣れてくると、もっと複雑なアプリの設定もできるようになりますよ。」
生徒
「実際に自分のアプリでも試してみたいです!環境が変わっても同じように動かせるのはすごく便利ですね。」