はじめに
こんにちは、25卒の山本です。
最近めちゃくちゃ暑くて四六時中クーラーが欠かせなくなってきましたが、引き続きブログ更新は頑張ります🔥
今回はDockerについて最近初めて触れたので、実際にどのようにしてDockerイメージを作っていくのかまとめたいと思います!
基本概念については素敵な記事がすでにあったのでDockerの基本概念が知りたい方はぜひ読んでみてください✨
前提条件
Docker Desktop がPCにインストールされていること。
※今回はあくまで個人の検証レベルでの使用なので無料でDocker Desktopを使用していますが、組織で使用する場合は無料で使用できないので注意してください。VS Codeが使用できること。(今回はmacOSで構築していますが、Windowsで構築する場合はWSLを使用して構築してください)
イメージの作成手順
では、早速Dockerイメージの作成手順について紹介します。
今回は、ダミーのチャットアプリ(フロントエンドも存在しないただ応答を返すだけのアプリ)を簡単に作成してDockerイメージとしてまとめたいと思います。
各ステップの中でDocker特有のファイル構成などもあるので、そのポイントに関しても紹介していきます!
ステップ1: Projectフォルダを作成し、VS Codeで開く
macOSであればターミナル(私はiTermと呼ばれるターミナル用のアプリを使用しています)、WindowsOSであればWSL上で任意のディレクトリに対してProjectフォルダを作成し、その配下に今回使用するテストアプリの情報を格納するためのプロジェクトフォルダ(今回はchat-app-test)を生成します。
VS Codeを開き、以下画像のように「フォルダを開く」をクリックしてchat-app-testを選択し開きます。
「フォルダを開く」を選択
chat-app-testディレクトリのみが表示されていればOK VS Codeのエクスプローラー(左側のサイドバー)で、chat-app-test フォルダの上で右クリック(またはControlキーを押しながらクリック)し、「New File (新規ファイル)」を選択して、app.py という名前のファイルを作成します。同様に、requirements.txt というファイルも作成します。
右クリック後「新しいファイル」を作成
ステップ2:ダミーアプリの記述
1.app.pyに以下のコードを記述します。
# app.py from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/') def home(): return "Hello, AI Chat! This is a test application." @app.route('/chat', methods=['POST']) def chat(): data = request.json user_message = data.get('message', 'No message received.') # ここで単純な応答を返します。 ai_response = f"You said: '{user_message}'. This is a test AI response." return jsonify({"response": ai_response}) if __name__ == '__main__': app.run(host='0.0.0.0', port=3000)
2.requirements.txt に以下の内容を記述します。 ※このファイルが存在することで、Dockerコンテナ内でFlaskがインストールされます。
# requirements.txt Flask==2.3.3
ステップ3: Dockerfileへの記述
- ステップ1と同様の手順でDockerfileという名前のファイルを作成します。
※この
Dockerfile
は、コンテナをビルドする際に中身をどのようなOS・ファイル構成で構築するか等、コンテナイメージを構築するのに必要な情報を記述します。
このファイルが存在することで、別のPCでコンテナイメージを立ち上げた際もPC自体のOSに依存しない起動が実現できる訳です。
Dockerfileの構築 - Dockerfileに以下の内容を記述します。
`#` Dockerfile `#` Pythonの公式イメージをベースとする FROM python:3.9-slim-buster `#` 作業ディレクトリを /app に設定 WORKDIR /app `#` ホストのrequirements.txtをコンテナの/appにコピー COPY requirements.txt `#` Pythonの依存関係をインストール RUN pip install --no-cache-dir -r requirements.txt `#` ホストのapp.pyをコンテナの/appにコピー COPY app.py `#` アプリケーションがリッスンするポートを公開 EXPOSE 3000 `#` コンテナ起動時に実行されるコマンド CMD ["python", "app.py"]
ステップ4: Dockerイメージをビルドする
1.VS Codeのメニューバーより「ターミナル」→「新しいターミナル」を選択し、ターミナルパネルを開く。


2.以下のコマンドを実行してDockerイメージをビルドします。
docker build -t test-chat-app .
-t test-chat-app
: 作成するイメージにtest-chat-app
という名前をつけます。.
: 現在のディレクトリに存在するDockerfileを使用します。
3. ビルドが成功したら以下のコマンドで作成されたイメージがローカルに存在することを確認します。
docker images

ステップ5: イメージを実行して動作確認
- 以下のコマンドを実行してコンテナを起動してみます。
docker run -p 3000:3000 test-chat-app
-p 3000:3000
: ポートマッピング設定(左側でホストOS、右側でコンテナ内部でlistenさせるポート番号を指定)

2.Dockerコンテナが起動した状態のまま(ターミナルを閉じずに)、Webブラウザを開き、以下のURLにアクセスした結果を確認します。
http://localhost:3000/

3. 動作確認が完了したらdocker run
を実行しているターミナルの戻り、Ctrl + c
を押してコンテナを停止します。
まとめ
今回はdockerイメージのビルド経験を通じてオンプレミスでインフラエンジニアをしていた際になんとなくで理解していたDockerに関して詳細なイメージを持つことができました。
資格勉強などをしている中でも最近よく目にするコンテナ技術ですが、単語と概略は理解していても中身が実際どのようになっているのかまではなかなかイメージが築きづらいのではないかと思います。
今回の簡単なアプリ実装を題材にしたDockerイメージ構築の経験で私と同じようにコンテナ技術に関して少し知識が曖昧な方への理解の手助けになれれば幸いです!
山本 竜也 (記事一覧)
2025年度新入社員です!AWSについてはほぼ未経験なのでたくさんアウトプットできるよう頑張ります✨