Docker基礎:Dockerイメージを作ってみた

記事タイトルとURLをコピーする

はじめに

こんにちは、25卒の山本です。
最近めちゃくちゃ暑くて四六時中クーラーが欠かせなくなってきましたが、引き続きブログ更新は頑張ります🔥
今回はDockerについて最近初めて触れたので、実際にどのようにしてDockerイメージを作っていくのかまとめたいと思います!
基本概念については素敵な記事がすでにあったのでDockerの基本概念が知りたい方はぜひ読んでみてください✨

blog.serverworks.co.jp

前提条件

  • Docker Desktop がPCにインストールされていること。
    ※今回はあくまで個人の検証レベルでの使用なので無料でDocker Desktopを使用していますが、組織で使用する場合は無料で使用できないので注意してください。

  • VS Codeが使用できること。(今回はmacOSで構築していますが、Windowsで構築する場合はWSLを使用して構築してください)

イメージの作成手順

では、早速Dockerイメージの作成手順について紹介します。
今回は、ダミーのチャットアプリ(フロントエンドも存在しないただ応答を返すだけのアプリ)を簡単に作成してDockerイメージとしてまとめたいと思います。
各ステップの中でDocker特有のファイル構成などもあるので、そのポイントに関しても紹介していきます!

ステップ1: Projectフォルダを作成し、VS Codeで開く

  1. macOSであればターミナル(私はiTermと呼ばれるターミナル用のアプリを使用しています)、WindowsOSであればWSL上で任意のディレクトリに対してProjectフォルダを作成し、その配下に今回使用するテストアプリの情報を格納するためのプロジェクトフォルダ(今回はchat-app-test)を生成します。

  2. VS Codeを開き、以下画像のように「フォルダを開く」をクリックしてchat-app-testを選択し開きます。

    「フォルダを開く」を選択

    chat-app-testディレクトリのみが表示されていればOK

  3. 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. ステップ1と同様の手順でDockerfileという名前のファイルを作成します。

    ※このDockerfileは、コンテナをビルドする際に中身をどのようなOS・ファイル構成で構築するか等、コンテナイメージを構築するのに必要な情報を記述します。
    このファイルが存在することで、別のPCでコンテナイメージを立ち上げた際もPC自体のOSに依存しない起動が実現できる訳です。

    Dockerfileの構築
  2. 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: イメージを実行して動作確認

  1. 以下のコマンドを実行してコンテナを起動してみます。
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についてはほぼ未経験なのでたくさんアウトプットできるよう頑張ります✨