デタッチドモードでContainerをバックグラウンド実行する

デタッチドモード(-dフラグ)を使用してDocker containerをバックグラウンドで実行する方法を学びます。containerのライフサイクル管理、ログアクセス、実行中のcontainerへの再接続について解説します。

Basic Commands

詳細な説明

-dによるバックグラウンドContainer

デフォルトでは、docker runはターミナルをcontainerの標準出力と標準エラーストリームに接続します。デタッチドモードフラグ(-d)はcontainerをバックグラウンドで実行し、ターミナルを他の作業に使えるようにします:

docker run -d nginx

Dockerは完全なcontainer IDを出力し、すぐにshellプロンプトに戻ります。Nginxサーバーはバックグラウンドで実行され続けます。

Container IDと命名

デタッチドcontainerが起動すると、Dockerは64文字の16進数container IDを出力します:

a3f5b7c9e1d2f4a6b8c0e2d4f6a8b0c2e4d6f8a0b2c4e6d8f0a2b4c6e8d0f2

containerは完全なID、短いプレフィックス(最初の12文字)、または名前で参照できます。本番環境では命名を強く推奨します:

docker run -d --name my-webserver nginx

ログの確認

containerの出力はターミナルに接続されていないため、docker logsで確認します:

docker logs my-webserver        # すべてのログ
docker logs -f my-webserver     # フォロー(tail -fと同様)
docker logs --tail 50 my-webserver  # 最後の50行

Containerへの再接続

ターミナルをデタッチドcontainerに再接続できます:

docker attach my-webserver

注意: 接続中にCtrl+Cを押すと、containerのPID 1にSIGINTが送信され、containerが停止する可能性があります。停止せずにデタッチするにはCtrl+P、Ctrl+Qを使用してください。

実行中のContainerでコマンドを実行する

接続する代わりに、実行中のデタッチドcontainer内で追加コマンドを実行できます:

docker exec -it my-webserver bash

これによりメインのNginxプロセスに影響を与えずに、container内で新しいbashセッションが開始されます。

デタッチドモードを使うべき場面

  • 継続的に実行するWebサーバー(Nginx、Apache)。
  • バックグラウンドサービスとして実行するデータベース(PostgreSQL、MySQL、Redis)。
  • メッセージキュー(RabbitMQ、Kafka)やその他の長時間実行インフラ。
  • ジョブ間で永続化が必要なCI/CDエージェント

ユースケース

開発マシンや本番サーバーで、ターミナルセッションを占有せずに、バックグラウンドで継続的に実行する必要があるWebサーバーやデータベースをデプロイする場合に使用します。

試してみる — Docker Run Command Builder

フルツールを開く