Dockerfile入門
自分のアプリをコンテナ化する基本
Dockerfileの書き方、主要な命令、ベストプラクティスを解説します。
こんな人向けの記事です
- 自分のアプリをDockerイメージにしたい人
- Dockerfileの各命令の意味を知りたい人
- 効率的なDockerfileの書き方を学びたい人
Step 1Dockerfileとは
Dockerfileは、Dockerイメージの構築手順を記述したテキストファイルです。ベースイメージの指定、依存パッケージのインストール、アプリのコピー、起動コマンドなどを定義します。
Step 2基本的なDockerfile
Pythonアプリケーションの例です。
Dockerfile
# ベースイメージの指定
FROM python:3.13-slim
# 作業ディレクトリの設定
WORKDIR /app
# 依存ファイルを先にコピー(キャッシュ活用)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのコピー
COPY . .
# ポートの公開
EXPOSE 8000
# 起動コマンド
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Step 3主要な命令一覧
| 命令 | 説明 | 例 |
|---|---|---|
| FROM | ベースイメージの指定 | FROM python:3.13 |
| WORKDIR | 作業ディレクトリの設定 | WORKDIR /app |
| COPY | ファイルのコピー | COPY . . |
| RUN | ビルド時にコマンド実行 | RUN pip install -r requirements.txt |
| CMD | コンテナ起動時のコマンド | CMD ["python", "app.py"] |
| EXPOSE | 公開ポートの宣言 | EXPOSE 8000 |
| ENV | 環境変数の設定 | ENV DEBUG=false |
| ARG | ビルド時の引数 | ARG VERSION=1.0 |
| VOLUME | ボリュームのマウントポイント | VOLUME /data |
Step 4イメージのビルドと実行
ターミナル
# イメージのビルド
docker build -t myapp:latest .
# コンテナの実行
docker run -d -p 8000:8000 --name myapp myapp:latest
# ビルドキャッシュを使わずにビルド
docker build --no-cache -t myapp:latest .
Step 5docker-compose.ymlとの連携
docker-compose.yml
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_DB: mydb
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Step 6ベストプラクティス
- 軽量なベースイメージを使う:
slimやalpineを選ぶとイメージサイズが小さくなる - レイヤーキャッシュを活用: 変更頻度の低いファイル(requirements.txt等)を先にCOPYする
- .dockerignoreを使う: 不要なファイル(.git、node_modules等)をビルドから除外する
- RUN命令をまとめる: レイヤー数を減らしてイメージサイズを小さくする
.dockerignore
.git
__pycache__
*.pyc
.env
node_modules