Docker入門|インフラエンジニアが知っておくべきコンテナの仕組みとDockerfileの書き方

現場実践|Docker・コンテナ入門
Docker入門|インフラエンジニアが知っておくべきコンテナの仕組みとDockerfileの書き方
「Dockerって何?」「なぜコンテナが必要なの?」——インフラエンジニアがDockerとコンテナを理解するための基礎知識・Dockerfileの書き方・docker-composeを使ったローカル開発環境構築まで実践的に解説します。
💡 コンテナは「アプリの実行環境をパッケージ化して、どこでも同じように動かす技術」。Dockerを理解することはECS・Kubernetes・GitHub Actionsを理解するための必須前提知識です。
1. コンテナとVMの違い
| 仮想マシン(VM) | コンテナ | |
|---|---|---|
| 分離レベル | OSレベル(各VMに独立したOS) | プロセスレベル(ホストOSのカーネルを共有) |
| 起動時間 | 数十秒〜数分 | 数秒以内 |
| リソース効率 | 1VMあたり数GB以上のオーバーヘッド | 最小数MBから動作可能 |
| ポータビリティ | VMイメージは大きく移動が重い | イメージはレイヤー差分管理で軽量 |
2. Dockerfileの書き方
# マルチステージビルドの例(Node.jsアプリ)
# ビルドステージ
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# 実行ステージ(軽量イメージ)
FROM node:20-alpine
WORKDIR /app
# rootユーザーを避けてnodeユーザーで実行
USER node
COPY --from=builder --chown=node:node /app/dist ./dist
COPY --from=builder --chown=node:node /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]マルチステージビルドを使うとビルドツールを含まない軽量な本番イメージが作れます。セキュリティと性能の観点から本番環境では必ず使うことを推奨します。
3. docker-composeでローカル開発環境を構築
version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
- DB_HOST=db
depends_on:
- db
volumes:
- ./src:/app/src # ホットリロード用
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: myapp
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:4. よく使うDockerコマンド
# イメージのビルド
docker build -t my-app:latest .
# コンテナの起動
docker run -p 3000:3000 --name my-app my-app:latest
# 実行中のコンテナに入る
docker exec -it my-app sh
# コンテナとイメージの一括削除
docker system prune -a📌 この記事のポイント
- コンテナはVMより軽量・高速・ポータブル。Dockerはコンテナをビルド・実行・管理するデファクトスタンダードツール
- マルチステージビルドで軽量な本番イメージを作成・非rootユーザーで実行がセキュリティのベストプラクティス
- docker-composeでapp+DBのローカル開発環境を1コマンドで起動できる
キャリアの疑問、一緒に解決しませんか?
Route Bloomでは、インフラ系ITエンジニアを目指す方への個別サポートを行っています。2026年7月からフリーランス講師として本格始動予定です。
ABOUT ME



