Containers
概要
コンテナは、アプリを実行に必要なすべて(コード、ライブラリ、システムツール)とともに 1 つのポータブルなバンドルにまとめます。そのバンドルは、あなたのラップトップでもテストサーバーでもクラウドでも同じように動作するため、古典的な「自分のマシンでは動く」問題を解消します。コンテナを構築するために最も一般的に使われるツールが Docker です。
強み
- どこでも一貫した環境。一度ビルドすればどこでも動く。
- ランタイム、OS パッケージ、依存関係を完全に制御できる。
- 一度起動すればコールドスタートがなく、安定したトラフィックに向く。
- クラウドプロバイダー間で移植可能で、強いロックインを避けられる。
- 長時間稼働するプロセスを含め、あらゆる言語やフレームワークをサポートする。
トレードオフ
- 管理すべきものが増えます。ベースイメージ、アップデート、リソースのサイジングなど。
- オーケストレーター(Kubernetes など)を追加しない限りスケーリングは自動ではなく、それは実質的な複雑さをもたらします。
- 稼働中のコンテナはアイドル状態でもコストがかかります。
- イメージが大きいほどビルドとデプロイが遅くなります。
- イメージのセキュリティパッチ適用はあなたの責任です。
使いどころ
一貫した、完全に制御された環境が必要なときにコンテナを選びましょう。特定のシステム依存を持つアプリ、長時間稼働するサービス、バックグラウンドワーカー、あるいはサーバーレスやエッジ関数の制限を超えるものなどです。
バイブコーディングとの相性
コンテナは AI 主導の対象として強力です。Dockerfile はいわばレシピであり、エージェントはレシピを書くのが得意だからです。AI に Dockerfile、.dockerignore、デプロイコマンドを生成させ、ビルドエラーを読み返して反復できます。コツ: 小さなベースイメージ(alpine や slim バリアントなど)とマルチステージビルドを依頼しましょう。これでイメージが軽量に保たれ、ビルドが速くなり、攻撃面も小さくなります。Fly.io、Google Cloud Run、Railway といったプラットフォームなら、コンテナをコマンド 1 つでデプロイできます。
# Dockerfile — multi-stage Node app
FROM node:20-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
COPY --from=build /app .
EXPOSE 3000
CMD ["node", "server.js"]
# ローカルでビルドして実行
docker build -t my-app .
docker run -p 3000:3000 my-app