0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【保存版】Docker入門チートシート|よく使うコマンドを完全網羅

0
Posted at

はじめに

「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 dfdocker 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駆動開発やテック情報を毎日発信しています。フォローお気軽にどうぞ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?