
【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 何も付けない を適切に選択しましょう。