
【Docker基礎】デーモンとして動くコンテナ
Docker コンテナを起動する際、どのように動き続けるか(あるいは一度実行してすぐ終了するか)は、コンテナの種類や目的によって異なります。
「デーモン」とは、UNIX や Linux 上で常に待ち受け動作を行うプログラムを指し、Webサーバーやデータベースサーバーなどがその代表例です。ここでは、コンテナを一度実行して終了するのか、デーモンとして動かすのかに応じて、どうオプションを指定すればよいかを解説します。

一度限り実行するコンテナとデーモンの違い
- 一度限り実行するコンテナ
・実行してすぐに終了するコマンドやスクリプトをコンテナ化。
・例: 「1回だけバックアップを取る」や「ユーティリティプログラムを走らせて結果を取得後終了」。
・短時間で終了するため、-d(バックグラウンド) や -i, -t(対話的モード) が不要なことも多い。 - デーモンとして動くコンテナ
・UNIX / Linux のデーモンのように、常に待機して長時間稼働するプログラム。
・例: Webサーバー(Nginx, Apache)、DBサーバー(MySQL, PostgreSQL)など。
・コンテナを起動したら、そのまま動き続けてもらいたいので、-d(バックグラウンド実行) をよく使う。
よく登場するオプションの意味
| オプション | 意味 |
|---|---|
| -d | デタッチド(detached)モード。コンテナをバックグラウンドで実行し、制御を戻す。デーモン運用に最適。 |
| -i | インタラクティブ(interactive)モード。標準入力を受け付け、コンテナ内でキーボード入力ができる。 |
| -t | TTY(擬似ターミナル)モード。コンテナに疑似ターミナルを割り当てる。-it と一緒に使う場合が多い。 |
なぜ -d と -it は同時に使わないことが多い?
- -d は「コンテナがバックグラウンドで動作する」
- -it は「ターミナルを直接操作できる」
同時に使うと、「バックグラウンドで動かしながら、しかもターミナル操作もしたい」という矛盾が生じやすいため、基本的には排他的に使われることが多いです。
使い分けの例
一度だけ処理するコンテナ(ユーティリティ用途など)
docker run ubuntu echo "Hello, Docker!"- イメージ:
ubuntu - 実行コマンド:
echo "Hello, Docker!" - 特徴:
・一度出力したらコンテナは即終了するため、特に-dや-itは不要
・短時間で終わるジョブ系の処理に向いている。
デーモンとして動かすコンテナ(Webサーバーなど)
docker run -d -p 8080:80 --name my-nginx nginx- オプション:
-d(バックグラウンド)、-p 8080:80(ポートマッピング)、--name(コンテナ名を指定) - 特徴:
・nginx がデーモンとして常駐し、8080 番ポート経由でアクセスを受け付ける。
・-dを付けないと、コンテナがターミナルをブロックして、ホスト側の操作ができなくなってしまう。
3-3. コンテナ内を対話的に操作(-it)
docker run -it ubuntu /bin/bash- オプション:
-it→ インタラクティブ + TTY - 意味:
・Ubuntu イメージでコンテナを起動し、ターミナル(bash)に直接入る。
・コンテナ内でコマンドを色々実行したい場合に最適 - 終了方法:
・exitコマンドでコンテナ内のシェルを抜けるとコンテナも終了する(デフォルト設定の場合)。
まとめ
-d(バックグラウンド) はデーモンサービス向け
・Webサーバーや DB サーバーなど、長時間稼働が必要なコンテナで利用-it(対話モード + TTY) はコンテナ内部を操作したい場合
・シェル操作やデバッグ、コマンドラインでの実験など- これらのオプションは必須ではない
・1回実行して終わるジョブ系コンテナなら、docker runのみで十分
結局、コンテナがデーモンとして動き続けるのか、単発作業で即終了するのか、あるいは対話的な操作が必要なのかによって、オプションの組み合わせが変わってきます。自分が動かしたいアプリケーションの性質を見極め、-d or -it or 何も付けない を適切に選択しましょう。
