コンテナで動かすプロセスの数

Dockerコンテナは「アプリケーション・コンテナ」なのでアプリ単体でも動かせるが、ホストや仮想マシンでは起動中に様々な種類のプロセスが動く。


ホストでは様々なプロセスが動く

CentOS7ではプロセスIDが1のsystemdを筆頭に様々なプロセスが動く

# ホストで、プロセスツリー
pstree -p 1
systemd(1)─┬─ModemManager(872)─┬─{ModemManager}(900)
           │                   └─{ModemManager}(903)
           ├─NetworkManager(939)─┬─{NetworkManager}(1015)
..以下省略

コンテナでBashシェルの場合

Dockerコンテナの場合、CentOSやUbuntu、Debianといった基本的なLinuxイメージでは、/bin/bashデフォルトのコマンドになっていることが多く、Bashプロセスが一つ動く。

docker run --rm -it --name test centos:7 bash
# コンテナシェルで
# ps -Aですべてのプロセス表示
ps -A
  PID TTY          TIME CMD
    1 pts/0    00:00:00 bash
   15 pts/0    00:00:00 ps

上記のようにsystemdなどは起動しておらず、プロセスIDが1なのはbash


コンテナでサーバの場合

コンテナでサーバを起動する場合も、プログラム一つだけで動かせる。

# --publishでホストのポート80をコンテナのポート80につなぐ
docker run --rm -dit --name test --publish 80:80 httpd:2.4 httpd-foreground

# プロセス数を確認
# 上のコンテナにpsコマンドを別プロセスで起動
docker exec -it test ps -A --format pid,ppid,args
  PID  PPID COMMAND
    1     0 httpd -DFOREGROUND
    7     1 httpd -DFOREGROUND
    8     1 httpd -DFOREGROUND
    9     1 httpd -DFOREGROUND
   91     0 ps -A --format pid,ppid,args

# コンテナ停止・削除
docker stop test

上記のように、ホストと異なりsystemdなどは動いておらず、サーバプログラムが一つだけ(httpdプロセスは複数でも)。