N
nob@lit-forge
Docker / docker-compose 早見表
Docker の基本コマンド(build / run / exec / logs / cp)、docker-compose のサブコマンド、イメージ・コンテナ・ネットワーク・ボリュームの管理、Dockerfile のディレクティブ、docker-compose.yml の基本構文をひとまとめ。
#Docker#docker-compose#コンテナ#DevOps
イメージ
docker pull nginx:alpine # イメージ取得 docker images # 一覧 docker image ls --filter dangling=true # タグ無し(ゴミ)のみ docker rmi <image> # 削除 docker image prune -a # 未使用イメージを全削除 docker build -t myapp:1.0 . # Dockerfile からビルド docker build --no-cache -t myapp . # キャッシュ無しで再ビルド docker tag myapp:1.0 reg/myapp:1.0 # タグ付与 docker push reg/myapp:1.0 # レジストリへ push docker history <image> # レイヤ履歴 docker inspect <image> # 詳細 JSON
コンテナの起動・停止
docker run -it --rm ubuntu bash # 対話起動、終了時に削除 docker run -d --name web -p 80:80 nginx # デーモン起動 + ポート公開 docker run --restart=unless-stopped ... # 自動再起動ポリシー docker ps # 起動中コンテナ docker ps -a # 停止済み含む全て docker start/stop/restart <name> # 開始 / 停止 / 再起動 docker rm <name> # 停止済みを削除 docker rm -f <name> # 起動中を強制削除 docker container prune # 停止済みを一括削除
実行中コンテナの操作
docker exec -it web bash # シェルに入る docker exec web env # 環境変数の確認 docker logs -f --tail 100 web # ログ追従(末尾 100 行から) docker logs --since 10m web # 直近 10 分のログ docker stats # CPU / メモリのリアルタイム使用量 docker top web # 中のプロセス一覧 docker cp web:/etc/nginx/nginx.conf . # コンテナ → ホストへコピー docker cp file.txt web:/tmp/ # ホスト → コンテナへコピー
ネットワーク・ボリューム
docker network ls # ネットワーク一覧 docker network create mynet # カスタム bridge docker run --network mynet ... # 参加 docker network inspect mynet # 詳細(IP / DNS 等) docker volume ls # ボリューム一覧 docker volume create data # 作成 docker run -v data:/data ... # マウント(named volume) docker run -v $(pwd):/app ... # ホストディレクトリをマウント docker volume inspect data # ホスト側の path を確認 docker volume prune # 未使用を削除
Dockerfile 主要ディレクティブ
# syntax=docker/dockerfile:1 FROM node:22-alpine AS build WORKDIR /app COPY package*.json ./ RUN --mount=type=cache,target=/root/.npm npm ci COPY . . RUN npm run build FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html EXPOSE 80 HEALTHCHECK --interval=30s CMD wget -q --spider http://localhost/ || exit 1 CMD ["nginx", "-g", "daemon off;"]
FROM: ベースイメージ(マルチステージは AS <name>)WORKDIR: 作業ディレクトリ(絶対パス推奨)COPY/ADD: ファイル配置(ADD は URL / 展開付きだが基本は COPY)RUN: ビルド時のシェル実行(レイヤが増える)CMD: デフォルト実行コマンド(上書き可)ENTRYPOINT: 固定エントリポイント(CMD と組み合わせる)ARG: ビルド時引数 /ENV: 実行時環境変数EXPOSE: ドキュメント的に公開ポートを宣言HEALTHCHECK: ヘルスチェックUSER: 実行ユーザー(root 以外推奨)
docker compose
docker compose up -d # バックグラウンド起動 docker compose up --build # 再ビルドして起動 docker compose ps # サービス一覧 docker compose logs -f web # サービスのログ追従 docker compose exec web sh # サービスへ exec docker compose restart web # サービス再起動 docker compose down # 停止 + 削除 docker compose down -v # ボリュームも削除 docker compose pull # イメージ更新 docker compose config # マージ済み YAML を確認
docker-compose.yml(抜粋):
services:
web:
build: .
image: myapp:dev
ports:
- "3000:3000"
environment:
NODE_ENV: development
volumes:
- ./src:/app/src
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: secret
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
retries: 10
volumes:
db_data:トラブル時によく打つ
docker system df # ディスク使用量サマリ docker system prune -a --volumes # 未使用を一括削除(慎重に) docker events # リアルタイムイベント docker info # デーモン情報 docker version # クライアント + サーバーのバージョン docker context ls # 接続先コンテキスト docker buildx ls # マルチアーキビルダー一覧
よくあるハマり
- Permission denied on /var/run/docker.sock: ユーザーを
dockerグループに追加(sudo usermod -aG docker $USER)。再ログインが必要 - Apple Silicon で amd64 のイメージを動かしたい:
docker run --platform linux/amd64 ... - ビルドが遅い: BuildKit キャッシュマウント(
RUN --mount=type=cache,...)、レイヤ順序の最適化、.dockerignoreでnode_modulesや.gitを除外 - log の巨大化:
/etc/docker/daemon.jsonでlog-opts.max-sizeとmax-fileを設定 - コンテナ内で localhost が繋がらない: ホスト側を指したいなら
host.docker.internal(Mac/Windows)、Linux は--add-host=host.docker.internal:host-gateway