🐳 STEP 5: Dockerの基本コマンド
docker run、stop、start、rm、logs、ps – 実務で必須のコマンドを完全マスター
📋 このステップで学ぶこと
- docker run の詳細なオプションと使い方
- docker stop / start / restart でコンテナのライフサイクルを制御
- docker rm でコンテナを削除する方法と注意点
- docker ps でコンテナの状態を確認・フィルタリング
- docker logs でログを確認・トラブルシューティング
- Nginxコンテナを使った実践演習
🚀 1. docker run – コンテナを起動する
1-1. docker runとは?
docker runは、イメージからコンテナを作成して起動する最も重要なコマンドです。
STEP 4でも使いましたが、ここでより詳しく学んでいきます。
1-2. docker runの内部動作
docker runは、実は内部で2つの操作を行っています。
通常はdocker runを使えば十分ですが、
「作成だけして後で起動」したい場合はdocker createを使います。
1-3. よく使うオプション一覧
docker runには多くのオプションがあります。特に重要なものを見ていきましょう。
| オプション | 意味 | 使用例と説明 |
|---|---|---|
-d |
デタッチモード | バックグラウンドで実行。コンテナ起動後すぐにプロンプトに戻る |
--name |
コンテナに名前を付ける | --name my-nginx 後から操作しやすくなる |
-p |
ポートマッピング | -p 8080:80 ホスト8080番→コンテナ80番 |
-e |
環境変数を設定 | -e DB_HOST=localhost |
-v |
ボリュームマウント | -v /host/path:/container/path ファイル共有 |
-it |
対話モード | -i(入力)+ -t(端末)を組み合わせ |
--rm |
終了時に自動削除 | 一時的なコンテナに便利。停止と同時に削除 |
--network |
ネットワーク指定 | --network my-net 特定のネットワークに接続 |
--restart |
再起動ポリシー | --restart always 異常終了時に自動再起動 |
1-4. 実践:Nginxコンテナを起動
Webサーバーの「Nginx」を使って、実際にコンテナを起動してみましょう。
docker run:コンテナを作成して起動-d:バックグラウンドで実行(detached mode)--name my-nginx:コンテナ名を「my-nginx」に設定-p 8080:80:ホストの8080番ポートをコンテナの80番ポートに接続nginx:使用するイメージ名(タグ省略時はlatest)
実行すると、以下のような出力が表示されます。
動作確認
ブラウザで http://localhost:8080 にアクセスしてみてください。
「Welcome to nginx!」というページが表示されれば成功です。
コマンドラインで確認する場合は、curlコマンドを使います。
1-5. docker runのバリエーション
様々なシナリオでのdocker runの使い方を見てみましょう。
① ワンタイムコマンドの実行
コマンドを実行したら自動的に削除される一時的なコンテナを作成します。
--rm:コンテナ終了時に自動削除ubuntu:Ubuntuイメージを使用echo "Hello, Docker!":コンテナ内で実行するコマンド
このコマンドを実行すると「Hello, Docker!」と表示され、コンテナは自動削除されます。
一時的なテストやスクリプト実行に便利です。
② 対話モードでBashを起動
コンテナ内で対話的にコマンドを実行したい場合に使います。
-i:標準入力を開いたままにする(interactive)-t:疑似ターミナルを割り当てる(tty)-it:上記2つの組み合わせで、対話的な操作が可能にbash:起動時に実行するコマンド(シェルを起動)
③ 環境変数を指定して起動
アプリケーションに設定を渡す場合に使います。
-e MY_NAME=Taro:環境変数MY_NAMEに「Taro」を設定-e MY_ENV=development:環境変数MY_ENVに「development」を設定env:コンテナ内で環境変数一覧を表示
④ 複数のオプションを組み合わせた実践的な例
-d:バックグラウンドで実行--name my-app:コンテナ名を設定-p 3000:3000:ポート3000を公開-e NODE_ENV=production:本番環境として設定-v $(pwd)/app:/app:現在のディレクトリのappフォルダをマウント--restart unless-stopped:手動停止以外では自動再起動node:18:Node.js v18のイメージを使用
⏸️ 2. docker stop – コンテナを停止する
2-1. docker stopの基本
docker stopは、実行中のコンテナを停止するコマンドです。
docker stop:コンテナを停止するコマンドmy-nginx:停止するコンテナ名(またはコンテナID)
成功すると、停止したコンテナ名が表示されます。
2-2. 停止の仕組み(シグナル)
docker stopは、単純にコンテナを止めるのではなく、正常終了の機会を与える仕組みになっています。
- SIGTERM:「終了してください」という丁寧なお願い。アプリは後処理ができる
- SIGKILL:「今すぐ終了しろ」という強制命令。後処理なしで即終了
2-3. タイムアウトを指定する
待機時間を変更したい場合は、-tオプションを使います。
-t または --time で、SIGTERMを送ってからSIGKILLを送るまでの待機秒数を指定します。
データベースなど終了処理に時間がかかるアプリケーションでは、長めに設定することがあります。
2-4. 複数のコンテナを一度に停止
docker ps -q は実行中のコンテナIDのみを出力します。
$() でその出力を別のコマンドに渡しています。
つまり「実行中の全コンテナのIDを取得して、それらを停止」という意味です。
2-5. docker stop と docker kill の違い
- まずSIGTERMを送信
- アプリに終了処理の機会を与える
- 10秒後に強制終了
- データ損失のリスクが低い
- 即座にSIGKILLを送信
- 終了処理の機会なし
- すぐに停止する
- データ損失の可能性あり
▶️ 3. docker start – コンテナを再開する
3-1. docker startの基本
docker startは、停止しているコンテナを再開するコマンドです。
docker start:停止中のコンテナを起動するコマンドmy-nginx:起動するコンテナ名(またはコンテナID)
3-2. docker run と docker start の違い
この2つのコマンドは混同しやすいので、違いを明確にしておきましょう。
| 項目 | docker run | docker start |
|---|---|---|
| 動作 | 新しいコンテナを作成して起動 | 既存のコンテナを再開 |
| 対象 | イメージを指定 | コンテナを指定 |
| オプション | 各種設定が可能(-p, -e, -v等) | 以前のrun時の設定を引き継ぐ |
| 使用場面 | 初めてコンテナを作る時 | 停止したコンテナを再び使う時 |
docker run = 「新規作成 + 起動」(イメージからコンテナを作る)
docker start = 「再開」(既存のコンテナを起動する)
3-3. よく使うオプション
-a:アタッチモード。コンテナの標準出力をターミナルに表示-i:標準入力を開いたまま維持(対話的な操作用)
3-4. docker restart – 再起動
docker restartは、stop + startを一度に行うコマンドです。
内部的には以下の順序で実行されます:
① docker stop my-nginx(停止)
② docker start my-nginx(起動)
タイムアウトを指定することもできます。
3-5. コンテナのライフサイクル図解
🗑️ 4. docker rm – コンテナを削除する
4-1. docker rmの基本
docker rmは、コンテナを削除するコマンドです。
デフォルトでは、停止中のコンテナのみ削除できます。
docker rm:コンテナを削除するコマンド(remove の略)my-nginx:削除するコンテナ名(またはコンテナID)
4-2. よく使うオプション
| オプション | 意味 | 使用例 |
|---|---|---|
-f |
強制削除 | 実行中のコンテナも削除可能に |
-v |
ボリュームも削除 | 関連するボリュームも一緒に削除 |
実行中のコンテナを強制削除
-f(force)を使うと、実行中のコンテナでも即座に削除されます。
アプリケーションに終了処理の機会を与えないため、データ損失の可能性があります。
通常はdocker stopしてからdocker rmすることを推奨します。
4-3. 複数のコンテナを一度に削除
docker ps -a -q -f status=exitedの意味:-a:全てのコンテナ(停止中も含む)-q:IDのみを出力(quiet mode)-f status=exited:停止中のコンテナのみフィルタ
4-4. docker container prune – 一括クリーンアップ
停止中のコンテナを一括で削除する便利なコマンドです。
4-5. docker system prune – 総合クリーンアップ
コンテナだけでなく、未使用のイメージやネットワークもまとめて削除できます。
コンテナを削除すると、コンテナ内のデータも完全に削除されます。
重要なデータは、ボリュームやバインドマウントで
ホストマシンに保存しておく必要があります(STEP 10で学習)。
📋 5. docker ps – コンテナ一覧を表示
5-1. docker psの基本
docker psは、コンテナの一覧を表示するコマンドです。
デフォルトでは、実行中のコンテナのみ表示されます。
5-2. 出力項目の詳細説明
| 項目 | 説明 |
|---|---|
| CONTAINER ID | コンテナを識別する一意のID(64文字中の先頭12文字を表示) |
| IMAGE | コンテナの元になったイメージ名とタグ |
| COMMAND | コンテナ起動時に実行されたコマンド(長い場合は省略) |
| CREATED | コンテナが作成されてからの経過時間 |
| STATUS | 現在の状態(Up=実行中、Exited=停止、Created=作成済み未起動) |
| PORTS | ポートマッピング情報(ホスト:コンテナ/プロトコル) |
| NAMES | コンテナ名(–nameで指定、未指定時はランダム生成) |
5-3. よく使うオプション
停止中のコンテナも含めて表示
-a または --all を付けると、停止中のコンテナも含めて全て表示されます。
停止中のコンテナは STATUS が「Exited (終了コード)」と表示されます。
その他の便利なオプション
5-4. フィルタリング機能
-fオプションで条件を指定して、特定のコンテナだけを表示できます。
status:コンテナの状態(running, exited, created, paused)name:コンテナ名(部分一致)ancestor:元になったイメージlabel:ラベルexited:終了コード(0=正常、それ以外=エラー)
5-5. カスタムフォーマット
--formatオプションで、表示する項目をカスタマイズできます。
よく使うコマンドは、シェルの設定ファイルにエイリアスを登録しておくと便利です。
📝 6. docker logs – ログを確認する
6-1. docker logsの基本
docker logsは、コンテナの標準出力・標準エラーを表示するコマンドです。
トラブルシューティングやデバッグに欠かせません。
docker logs:コンテナのログを表示するコマンドmy-nginx:ログを表示するコンテナ名(またはコンテナID)
6-2. リアルタイムでログを監視
-fオプションを使うと、新しいログが出力されるたびにリアルタイムで表示されます。
-f または --follow は、Linuxの tail -f と同じ動作です。
新しいログが出力されると、自動的に表示が追加されます。
終了するには Ctrl + C を押します。
6-3. よく使うオプション
| オプション | 説明と使用例 |
|---|---|
-f |
リアルタイムでログを表示し続ける |
--tail N |
最新のN行のみ表示。例:--tail 100 |
-t |
タイムスタンプを付けて表示 |
--since |
指定した時刻以降のログを表示。例:--since 1h |
--until |
指定した時刻までのログを表示 |
実践的な使用例
6-4. ログの検索と保存
grepコマンドと組み合わせて、特定のキーワードを検索できます。
2>&1 は、標準エラー出力(2)を標準出力(1)にリダイレクトする意味です。
これにより、両方の出力を一緒に処理できます。
6-5. ログドライバーの設定
ログの保存先や形式を変更することもできます。
--log-opt max-size=10m:1ファイルあたり最大10MB--log-opt max-file=3:最大3ファイルでローテーション
これにより、ログが肥大化してディスクを圧迫することを防げます。
ログは放置するとディスク容量を圧迫します。
本番環境では必ずログローテーションを設定しましょう。
💪 7. 練習問題
ここまで学んだコマンドを使って、練習問題に取り組みましょう。
Nginxコンテナを起動してください
要件:
- コンテナ名:web-server
- ポート:ホストの8888番をコンテナの80番にマッピング
- バックグラウンドで実行
-dでバックグラウンド実行、--nameで名前指定、-pでポートマッピングします。
実行中のコンテナを確認してください
web-serverが実行中であることを確認し、STATUS、PORTS、NAMESを確認してください。
出力で「STATUS」が「Up」、「PORTS」が「0.0.0.0:8888->80/tcp」、「NAMES」が「web-server」であることを確認します。
コンテナのログをリアルタイムで確認してください
web-serverのログをリアルタイムで表示し、ブラウザで http://localhost:8888 にアクセスしてアクセスログが表示されることを確認してください。
ブラウザでアクセスすると、「GET / HTTP/1.1」のようなアクセスログが表示されます。
Ctrl+C でログ表示を終了します。
コンテナを停止・再開・削除してください
以下の順序で操作してください:
- web-serverを停止
- 停止を確認(docker ps -a)
- web-serverを再開
- 再開を確認
- web-serverを停止して削除
複数のNginxコンテナを起動してください
要件:
- nginx1: ポート8001
- nginx2: ポート8002
- nginx3: ポート8003
- すべてバックグラウンドで実行
名前でフィルタリングしてコンテナを表示してください
「nginx」を含むコンテナのみを表示してください。
-f "name=nginx" で名前に「nginx」を含むコンテナのみ表示されます。
全てのNginxコンテナを一度に停止・削除してください
nginx1、nginx2、nginx3を効率的に停止・削除してください。
一時的なコンテナでコマンドを実行してください
Ubuntuコンテナで「Hello from Ubuntu!」と表示し、コンテナは自動削除されるようにしてください。
--rm オプションにより、コマンド実行後にコンテナは自動削除されます。
docker ps -a で確認しても、このコンテナは表示されません。
環境変数を設定してコンテナを起動してください
要件:
- イメージ:nginx
- コンテナ名:env-test
- 環境変数:MY_NAME=Taro、MY_ENV=production
- 起動後、コンテナ内で環境変数を確認
カスタムフォーマットでコンテナ情報を表示してください
実行中のコンテナの「名前」「状態」「使用イメージ」のみを表形式で表示してください。
📝 STEP 5 のまとめ
- docker run:イメージからコンテナを作成・起動(-d, –name, -p, -e, -v, -it, –rm)
- docker stop:コンテナを正常停止(SIGTERMを送信)
- docker start:停止中のコンテナを再開
- docker restart:stop + start を一度に実行
- docker rm:コンテナを削除(-f で強制削除)
- docker ps:コンテナ一覧を表示(-a, -q, -f でフィルタリング)
- docker logs:ログを確認(-f でリアルタイム、–tail で行数指定)
| コマンド | 主な用途 |
|---|---|
docker run -d --name X -p Y:Z image |
バックグラウンドでコンテナを起動 |
docker ps |
実行中のコンテナを確認 |
docker ps -a |
全てのコンテナを確認(停止中含む) |
docker logs -f X |
ログをリアルタイムで確認 |
docker stop X |
コンテナを停止 |
docker start X |
コンテナを再開 |
docker rm X |
コンテナを削除 |
docker rm -f X |
実行中でも強制削除 |
このSTEPで学んだ6つのコマンドが、Dockerの基本中の基本です。
実務では毎日のように使うコマンドなので、確実にマスターしましょう。
特にdocker runのオプション(-d、–name、-p、-e、-v、–rm)は
様々な場面で使うので、しっかり覚えておいてください。
次のSTEP 6では、「Dockerイメージの仕組み」を学びます。
- イメージとコンテナの違い
- レイヤー構造の理解
- ベースイメージとは
- イメージサイズの最適化
Dockerの内部構造を深く理解して、より効率的にコンテナを扱えるようになりましょう!
学習メモ
Docker・コンテナ技術入門 - Step 5