Lab 2: Dockerイメージのビルド

このラボでは、Dockerfileを使って独自のDockerイメージをビルドする方法を学びます。

1. Dockerfileの基本構文

Dockerfileはイメージの設計図です。以下の命令を使います:

命令説明
FROMベースイメージを指定
WORKDIR作業ディレクトリを設定
COPYホストのファイルをイメージにコピー
RUNビルド時にコマンドを実行
EXPOSEコンテナが使用するポートを宣言
CMDコンテナ起動時のデフォルトコマンド

2. サンプルFlaskアプリを準備する

まず作業ディレクトリを作成し、必要なファイルを作成します。

# 作業ディレクトリを作成して移動
mkdir -p ~/flask-app
cd ~/flask-app

app.py を作成

cat << 'EOF' > app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello, Docker Lab!</h1><p>おめでとうございます!Flaskアプリがコンテナで動いています。</p>'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
EOF

requirements.txt を作成

cat << 'EOF' > requirements.txt
flask
EOF

Dockerfile を作成

cat << 'EOF' > Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]
EOF
💡 Dockerfileの解説:
1. FROM python:3.11-slim — Python 3.11の軽量版イメージをベースにする
2. WORKDIR /app — コンテナ内の作業ディレクトリを /app に設定
3. COPY requirements.txt . — 依存関係ファイルを先にコピー(キャッシュ効率化)
4. RUN pip install ... — ライブラリをインストール
5. COPY app.py . — アプリケーションコードをコピー
6. EXPOSE 5000 — ポート5000を使うことを宣言
7. CMD ["python", "app.py"] — コンテナ起動時にアプリを実行

3. イメージをビルドする

# イメージをビルド(-t でタグ名を指定、最後の . はビルドコンテキスト)
docker build -t flask-app .

ビルドが成功すると、各ステップが順番に実行されてイメージが作成されます。

4. コンテナを起動する

# ビルドしたイメージからコンテナを起動
docker run -d --name my-flask -p 5000:5000 flask-app

ブラウザで http://localhost:5000 にアクセスして、「Hello, Docker Lab!」が表示されれば成功です。

5. イメージの確認

# ローカルにあるイメージ一覧
docker images

# 特定のイメージを検索
docker images flask-app

📝 練習問題

課題: 上記の手順に従って、Flaskアプリのイメージをビルドし起動してみましょう。
  1. 3つのファイル(app.py, requirements.txt, Dockerfile)を作成する
  2. docker build -t flask-app . でイメージをビルド
  3. docker run -d --name my-flask -p 5000:5000 flask-app で起動
  4. ブラウザで http://localhost:5000 にアクセスして確認
  5. docker images でイメージサイズを確認
  6. 確認後、コンテナを停止・削除する
# 後片付け
docker stop my-flask
docker rm my-flask

← 前のラボ | 次のラボへ → Lab 3: ボリュームとデータ永続化