インフラ作業支援ラボInfra Support Lab ← ガイド一覧← 戻る

Dockerの基本操作・運用コマンド|起動・停止・ログ・Compose

LinuxサーバーのDocker Engineでコンテナの状態確認・起動・停止・ログ調査・Compose運用を行うためのガイドです。実行する前にコマンドが参照のみか、状態変更か、削除かを分け、作業対象を確認できます。

このページの目的

Dockerのよく使うコマンドを、操作対象(イメージ/コンテナ/ボリューム)と本番影響に分けて整理します。Docker Desktopの画面操作、Kubernetes、詳細なDockerfile作成は対象外です。

最初にやること

docker context showとdocker ps -aで接続先と対象コンテナを確認します。次にdocker logs・docker inspectで状態を把握し、必要な操作だけを実行します。

本番環境の注意:Docker CLIが接続するdaemonを操作できる権限は非常に強力です。dockerグループへの追加はroot相当の権限を与えるため、単なる権限エラー対策として安易に行わないでください。接続先コンテキスト・ユーザー・変更承認を確認します。
Docker Engineのバージョンアップ:更新前の停止影響・依存パッケージ・更新後の確認と復旧を確認してください。

Dockerの運用・トラブルシューティング全6記事

目的別に運用系3件・障害系3件へ進めます。

運用系・個別テーマ

トラブルシューティング

Kubernetesの運用へ進む場合はKubernetes・kubectl基本操作ガイドを参照してください。

1. 最低限押さえるDockerの3つの対象

対象役割コマンド例
イメージ(Image)コンテナを作るための実行環境・ファイル内容の基になるものdocker image ls
コンテナ(Container)イメージから作られ、プロセスを実行する単位。停止してもコンテナが残る場合があるdocker ps -a
ボリューム(Volume)コンテナのライフサイクルとは別にデータを保持するための仕組みdocker volume ls

docker runはイメージから新しいコンテナを作って起動します。一方、docker startは既存の停止済みコンテナを起動します。両者は置き換え可能ではありません。

2. 操作前に接続先・バージョン・一覧を確認する

# 参照のみ:Docker CLIと接続先 docker version docker context show docker context ls # 参照のみ:コンテナ、イメージ、ボリューム docker ps docker ps -a docker image ls docker volume ls # Composeプラグインの有無とバージョン docker compose version

docker versionはクライアントとサーバーの情報を表示します。サーバー接続に失敗する場合は、daemonが停止しているとは限らず、CLIの接続先・ソケット権限・リモート接続などを切り分けます。

確認のポイント:docker context showの結果がdefaultとは限りません。リモートdaemonを向いている場合、コマンドは手元のPCではなく接続先サーバーに影響します。DOCKER_HOST・DOCKER_CONTEXTなどの接続設定も確認します。リモートdaemonでのホスト側コマンドとbind mountは、CLI端末のローカル環境と区別してください。

3. Docker基本コマンド早見表

目的コマンド影響区分
稼働中の一覧docker ps参照のみ
停止済みも含む一覧docker ps -a参照のみ
直近100行のログdocker logs --tail 100 web01参照のみ
状態・終了コードdocker inspect web01参照のみ・機密情報に注意
停止済みを再起動docker start web01状態変更
コンテナを停止docker stop web01サービス停止
稼働中を再起動docker restart web01サービス中断
コンテナを削除docker rm web01削除・復元要件確認
Compose定義を確認docker compose config -q設定検証(通常は参照のみ)
Composeサービス一覧docker compose ps -a参照のみ

表のweb01は説明用のコンテナ名です。操作前にdocker ps -aで実際の名前・IDを確認して置き換えます。例示された削除コマンドを本番でそのまま実行しないでください。

状態表示の想定例(実測ではありません):docker ps -aでUp 2 minutesならプロセス稼働、Exited (0)なら終了済みです。いずれもアプリの正常性は未確認のため、Health・通信・ログを続けて確認します。

4. 新しいコンテナを作って起動する

この操作は新しいコンテナを作成し、必要に応じてイメージを取得し、プロセスを起動します。以下は検証用サーバーでの例です。ポート競合やイメージの取得元を確認してください。

# 検証環境のみ:ホストの127.0.0.1:8080にWebサーバーを公開 docker run --name demo-web -d -p 127.0.0.1:8080:80 nginx:alpine # 状態を参照 docker ps --filter name=demo-web docker logs --tail 30 demo-web # 同じホストから接続を確認 curl -I http://127.0.0.1:8080/

-dはバックグラウンド実行、--nameは名前指定、-pはポート公開です。127.0.0.1:を指定することで、通常の全インターフェース公開を避けた検証用の例にしています。ただし既存のネットワーク設定・リバースプロキシやホスト上のプロセス構成も確認してください。

バージョン差:Docker Engine 28.0.0より古いバージョンでは、localhostに公開したポートへ同一L2セグメントの別ホストから到達できる場合があります。127.0.0.1指定だけで完全に隔離されると判断せず、Engineのバージョン・ホストのネットワーク・Firewallを確認してください。Docker公式の注意事項を参照。
公開範囲に注意:-p 8080:80のようにホストIPを省くと、設定によって外部インターフェースから到達可能になります。Dockerやホストのファイアウォール設定を踏まえ、サービス公開範囲を決めてください。

テスト環境の後片付けは、対象コンテナと保持データを確認したうえで、停止後に削除します。以下は検証用demo-webだけを対象とした例です。

# 状態変更:demo-webを停止する docker stop demo-web # 削除操作:コンテナを削除する(検証環境のみ) docker rm demo-web

5. 既存コンテナの起動・停止・再起動

# 参照のみ:対象と稼働状態 docker ps -a --filter name=web01 # 状態変更:既存コンテナを起動 docker start web01 # 状態変更:停止(実サービスが止まる) docker stop web01 # 状態変更:再起動(通信・セッションに影響) docker restart web01
操作実際に起きること確認ポイント
start停止済みの既存コンテナを起動もとの設定・マウント・起動コマンドで動くか
stopコンテナ内のメインプロセスを停止するよう要求停止猶予、アプリの終了処理、利用者への影響
restart既存コンテナを停止して起動障害原因を確認せず再起動だけ繰り返さない
rmコンテナ自体を削除する書き込みデータの保存先、復元可否を事前に確認
restart policyと混同しない:docker restartは手動で再起動する操作です。--restart=always等の再起動ポリシー設定とは異なります。再起動ループが起きる場合は、ログ・終了コード・ポリシーの3点を確認してください。

6. ログ・終了コード・詳細情報を確認する

# 参照のみ:直近ログ・タイムスタンプ・時間範囲 docker logs --tail 100 --timestamps web01 docker logs --since 30m web01 # 参照のみ:状態・終了コード・再起動回数 docker inspect --format '{{.State.Status}}' web01 docker inspect --format '{{.State.ExitCode}}' web01 docker inspect --format '{{.RestartCount}}' web01 # 参照のみ:ログ設定を確認 docker inspect --format '{{.HostConfig.LogConfig.Type}}' web01 # 実行中コンテナへコマンドを新規実行(権限・負荷に注意) docker exec web01 ls /

docker execは稼働中のコンテナ内部で新たにコマンドを実行する操作です。上のls /は参照例ですが、docker exec自体は任意のプログラムを実行できるため、使うコマンドの副作用を個別に判断してください。最小構成イメージにはshやlsが存在しないこともあります。

見え方最初に確認すること
Up・running起動しているがアプリが正常とは限らない。ヘルスチェック・接続確認へ
ExitedExitCodeと直前のログ、メインプロセス終了理由を確認
Restarting直近ログ、再起動ポリシー、終了コードを確認
docker logsが空アプリのstdout/stderrへの出力とログドライバーの設定を確認
docker inspectに値が表示環境変数等に認証情報が含まれることがある。出力の共有前に伏せる

ログドライバーの種類や設定によってはdocker logsで内容を確認できません。ログがないことだけで「エラーなし」と判断しないでください。Linuxホストのサービスログ確認やsystemd journalの容量管理は、コンテナ側のログと管理対象が異なります。

7. Docker Composeの基本操作

ComposeはYAMLファイルに定義された複数サービスをまとめて扱う機能です。以下のコマンドは正しいComposeプロジェクトのディレクトリで実行し、対象のComposeファイルとプロジェクト名を確認します。

# 参照のみ:設定を検証(正常なら通常は出力なし) docker compose config -q # 参照のみ:現在のコンテナを確認 docker compose ps -a # 参照のみ:サービスログ docker compose logs --tail 100 # 状態変更:サービス群を起動/必要なら再作成 docker compose up -d # 状態変更:サービス群を停止(コンテナは通常残る) docker compose stop # 削除を伴う:コンテナとプロジェクトのネットワークを停止・削除 docker compose down
コマンド主な作用注意点
config -qCompose設定の整合性を検証環境変数・ファイル参照の不足で失敗する場合がある
up -d必要なコンテナやネットワークを作成・更新して起動イメージや設定の差異によって再作成が発生する
stopサービスを停止サービス停止による業務影響
downコンテナと既定の対象ネットワークを削除名前付きボリュームは原則保持、匿名ボリュームの再利用に注意
down -vさらにCompose定義の名前付き・匿名ボリュームも削除対象データ消失のおそれ。通常の停止目的では使わない
避けるべき一括削除:docker system pruneやdocker compose down -vを、ディスク不足への最初の対応として実行しないでください。どのイメージ・コンテナ・ボリュームが業務データを保持しているかを先に確認します。

8. ボリューム・ネットワーク・容量確認の注意

# 参照のみ:Dockerが管理するディスク使用量 docker system df # 参照のみ:対象コンテナのマウント構成 docker inspect --format '{{json .Mounts}}' web01 # 参照のみ:コンテナのポート公開 docker port web01 # 参照のみ:ネットワーク一覧 docker network ls

ホストディレクトリを直接マウントするbind mount、Dockerが管理するvolume、コンテナ自身の書き込み可能レイヤーは保存先と削除時の扱いが違います。削除前にdocker inspectのMountsを確認し、永続データの有無とバックアップ・復元方法を確かめます。

docker system dfはDockerオブジェクトが使用している容量の確認です。ホスト全体の空き容量はLinuxのディスク使用量確認、No space left on device発生時は容量不足の切り分けを併用します。

9. 結果別に最初の確認先を選ぶ

困っていること最初に見るもの
コンテナが一覧に見えないdocker ps -aとCLIの接続先コンテキストを確認
コンテナが起動直後に停止するdocker logs --tail 100、終了コード、イメージの起動設定を確認
コンテナが再起動を繰り返す状態・終了コード・再起動回数・ポリシーを確認。ログ取得前に無闇に再起動しない
Composeファイルでエラーdocker compose config -q、実行ディレクトリ・変数・Composeファイルを確認
ログが表示されないログドライバー、stdout/stderr、アプリ独自ログを確認
通信できない・容量がないLinuxネットワーク疎通と容量不足へ

このページは基本操作の入口です。Docker固有の起動障害・Compose障害は今後別ページを設ける場合も、ここで説明したコマンドの意味を繰り返さず、各症状の原因判定に専念させます。

10. 本番操作前のチェックリスト

運用の基本:まずdocker context show → docker ps -a → docker logs・docker inspectで事実を集め、必要な場合だけ状態変更を行います。docker stopやdownの実行自体を成功判定にせず、業務の正常性を確認してください。

11. 操作後に正常性を判定する

# 参照のみ:対象のcontext・状態と直近ログ docker context show docker ps -a docker inspect --format '{{.State.Status}} {{if .State.Health}}{{.State.Health.Status}}{{else}}healthcheck-not-configured{{end}}' web01 docker logs --tail 30 --timestamps web01

runningだけで完了としません。検証用nginxの例ではcurl -fI http://127.0.0.1:8080/の応答を確認し、本番アプリでは監視、依存先、業務操作、外部公開範囲も照合します。docker inspectの出力には秘匿値が含まれる場合があるため共有前に確認してください。

変更を伴う詳細手順はComposeの変更・切り戻し、Volumeの整合性と復元、ログ保持設定に分離しています。失敗時は起動失敗の原因別調査へ進んでください。

公式・一次資料

Dockerの周辺障害をLinux側から確認

コンテナ内部だけでなく、ホストのネットワーク、ディスク、journalを確認する場合は、関連ガイドから原因を切り分けます。

Linuxの疎通を確認