はじめに
「Dockerのコマンド、毎回調べてる...」
そんな方のための ブックマーク必須 のチートシートです。
基本コマンドから Docker Compose、実務でよく使うパターンまで、これ1記事でDockerの操作は困らない レベルでまとめました。
Dockerの基本概念(30秒でわかる)
イメージ = アプリの設計図(テンプレート)
コンテナ = イメージから作った実行環境(実体)
Dockerfile = イメージの作り方を書いたレシピ
レジストリ = イメージの保管場所(Docker Hub等)
Dockerfile → (build) → イメージ → (run) → コンテナ
イメージ操作
# Docker Hubからイメージを取得
docker pull <イメージ名>
docker pull nginx
docker pull node:20-alpine
# ローカルのイメージ一覧
docker images
# イメージの詳細情報
docker inspect <イメージ名>
# イメージの削除
docker rmi <イメージ名>
# 未使用イメージを一括削除
docker image prune
# 全イメージを一括削除(注意!)
docker image prune -a
# イメージのビルド
docker build -t <名前:タグ> .
# ビルド(Dockerfile指定)
docker build -t myapp:v1 -f Dockerfile.prod .
# キャッシュなしでビルド
docker build --no-cache -t myapp:v1 .
# イメージにタグをつける
docker tag myapp:v1 myregistry/myapp:v1
# イメージをレジストリにプッシュ
docker push myregistry/myapp:v1
# イメージの履歴(レイヤー)を確認
docker history <イメージ名>
コンテナ操作
起動・停止
# コンテナを作成して起動
docker run <イメージ名>
# バックグラウンドで起動(-d: detach)
docker run -d <イメージ名>
# 名前をつけて起動
docker run -d --name my-nginx nginx
# ポートを指定して起動(ホスト:コンテナ)
docker run -d -p 8080:80 nginx
# 環境変数を設定して起動
docker run -d -e DB_HOST=localhost -e DB_PORT=5432 myapp
# .envファイルから環境変数を読み込み
docker run -d --env-file .env myapp
# ボリュームをマウントして起動
docker run -d -v $(pwd)/data:/app/data myapp
# 起動時にコマンドを指定
docker run -it node:20 bash
# コンテナ終了時に自動削除
docker run --rm -it python:3.12 python
# メモリ制限をつけて起動
docker run -d --memory=512m myapp
# 再起動ポリシーを設定
docker run -d --restart=always myapp
確認・管理
# 実行中のコンテナ一覧
docker ps
# 全コンテナ一覧(停止中含む)
docker ps -a
# コンテナの詳細情報
docker inspect <コンテナ名>
# コンテナのログを見る
docker logs <コンテナ名>
# ログをリアルタイムで追跡
docker logs -f <コンテナ名>
# 直近100行のログ
docker logs --tail 100 <コンテナ名>
# コンテナのリソース使用状況
docker stats
# 特定コンテナのリソース
docker stats <コンテナ名>
# コンテナ内のプロセス一覧
docker top <コンテナ名>
# コンテナのポートマッピング確認
docker port <コンテナ名>
操作
# コンテナを停止
docker stop <コンテナ名>
# コンテナを強制停止
docker kill <コンテナ名>
# コンテナを再起動
docker restart <コンテナ名>
# 停止中のコンテナを起動
docker start <コンテナ名>
# コンテナに入る(bash)
docker exec -it <コンテナ名> bash
# コンテナに入る(sh。alpineの場合)
docker exec -it <コンテナ名> sh
# コンテナ内でコマンドを実行
docker exec <コンテナ名> ls /app
# ホスト→コンテナにファイルコピー
docker cp ./file.txt <コンテナ名>:/app/
# コンテナ→ホストにファイルコピー
docker cp <コンテナ名>:/app/file.txt ./
# コンテナの削除
docker rm <コンテナ名>
# 強制削除(起動中でも)
docker rm -f <コンテナ名>
# 停止中のコンテナを一括削除
docker container prune
Dockerfile の書き方
基本テンプレート(Node.js)
# ベースイメージ
FROM node:20-alpine
# 作業ディレクトリ
WORKDIR /app
# パッケージファイルをコピー(キャッシュ活用)
COPY package.json pnpm-lock.yaml ./
# 依存関係のインストール
RUN npm install -g pnpm && pnpm install --frozen-lockfile
# ソースコードをコピー
COPY . .
# ビルド
RUN pnpm build
# ポートの公開
EXPOSE 3000
# 起動コマンド
CMD ["pnpm", "start"]
基本テンプレート(Python)
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
マルチステージビルド(本番用)
# ビルドステージ
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
# 実行ステージ(軽量)
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]
主要な命令一覧
| 命令 | 用途 |
|---|---|
FROM |
ベースイメージの指定 |
WORKDIR |
作業ディレクトリの設定 |
COPY |
ファイルのコピー |
ADD |
ファイルのコピー(URL・tar展開対応) |
RUN |
コマンドの実行(ビルド時) |
CMD |
コンテナ起動時のデフォルトコマンド |
ENTRYPOINT |
コンテナ起動時の固定コマンド |
ENV |
環境変数の設定 |
EXPOSE |
ポートの公開宣言 |
VOLUME |
ボリュームのマウントポイント |
ARG |
ビルド時の引数 |
.dockerignore
node_modules
dist
.git
.env
*.log
.DS_Store
Docker Compose
基本テンプレート
# docker-compose.yml
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
- DB_HOST=db
volumes:
- .:/app
- /app/node_modules
depends_on:
- db
db:
image: postgres:16-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- db-data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
db-data:
Composeコマンド
# 全サービスを起動(バックグラウンド)
docker compose up -d
# ビルドして起動
docker compose up -d --build
# 特定のサービスだけ起動
docker compose up -d app
# ログを確認
docker compose logs
# 特定サービスのログをリアルタイム追跡
docker compose logs -f app
# サービスの状態確認
docker compose ps
# 全サービスを停止
docker compose stop
# 全サービスを停止して削除
docker compose down
# ボリュームも含めて削除
docker compose down -v
# サービスを再起動
docker compose restart
# コンテナに入る
docker compose exec app bash
# コンテナ内でコマンド実行
docker compose exec app pnpm test
# イメージを再ビルド
docker compose build
# キャッシュなしで再ビルド
docker compose build --no-cache
ボリューム・ネットワーク
ボリューム
# ボリューム一覧
docker volume ls
# ボリュームの作成
docker volume create my-data
# ボリュームの詳細
docker volume inspect my-data
# ボリュームの削除
docker volume rm my-data
# 未使用ボリュームを一括削除
docker volume prune
ネットワーク
# ネットワーク一覧
docker network ls
# ネットワークの作成
docker network create my-network
# コンテナをネットワークに接続
docker network connect my-network <コンテナ名>
# ネットワークの詳細
docker network inspect my-network
# ネットワークの削除
docker network rm my-network
お掃除コマンド
# 未使用のコンテナ・イメージ・ネットワークを一括削除
docker system prune
# ボリュームも含めて一括削除(注意!)
docker system prune -a --volumes
# ディスク使用量の確認
docker system df
# 詳細なディスク使用量
docker system df -v
実務でよく使うパターン
開発環境の構築
# リポジトリをクローンしたらこれだけ
docker compose up -d
# → アプリ + DB + Redis が一発で起動
一時的なツール実行
# Node.js環境で1コマンド実行
docker run --rm -it node:20 node -e "console.log('hello')"
# Python環境でスクリプト実行
docker run --rm -v $(pwd):/app -w /app python:3.12 python script.py
# MySQL クライアント
docker run --rm -it mysql:8 mysql -h host.docker.internal -u root -p
デバッグ
# コンテナの中に入って調査
docker exec -it <コンテナ名> sh
# コンテナのファイルシステムを確認
docker exec <コンテナ名> ls -la /app
# 環境変数の確認
docker exec <コンテナ名> env
# ネットワーク接続の確認
docker exec <コンテナ名> ping db
トラブルシューティング
| 問題 | 確認コマンド |
|---|---|
| コンテナが起動しない | docker logs <コンテナ名> |
| ポートが使えない |
docker ps でポート確認 / lsof -i :ポート番号
|
| ディスクが足りない |
docker system df → docker system prune
|
| ビルドが遅い |
.dockerignore を確認 / マルチステージビルド |
| コンテナ間で通信できない |
docker network inspect で同じネットワークか確認 |
まとめ:最低限覚えるコマンド TOP10
| # | コマンド | 用途 |
|---|---|---|
| 1 | docker compose up -d |
サービス起動 |
| 2 | docker compose down |
サービス停止・削除 |
| 3 | docker compose logs -f |
ログ確認 |
| 4 | docker compose exec <名前> sh |
コンテナに入る |
| 5 | docker ps |
コンテナ一覧 |
| 6 | docker build -t <名前> . |
イメージビルド |
| 7 | docker run -d -p 8080:80 <名前> |
コンテナ起動 |
| 8 | docker logs <名前> |
ログ確認 |
| 9 | docker system prune |
お掃除 |
| 10 | docker images |
イメージ一覧 |
この記事をブックマークして、困ったときに見返してください!
著者: @kotaro_ai_lab
AI駆動開発やテック情報を毎日発信しています。フォローお気軽にどうぞ!