一つのサーバプログラムを動かす

Bashを使う例は、コンテナをフォアグラウンド・モード(デフォルト)で起動し、つまりコンテナのBashをホストの端末でそのまま継続して使うことになる。

一方、サーバなど何かプログラムを一つ動かすケースなら、通常ではバックグラウンドでコンテナを起動するため、--detachオプションを使う。以降では他オプションとまとめて-ditとする。


サーバの基本、バックグラウンド・モード

次の例は、サーバのつもりでsleepコマンド20秒で起動する。バックグラウンド・モードのため、端末がコンテナ起動直後からホストのシェルとして使えるようになる。20秒経つと、コマンド終了しコンテナも停止、同時に削除となる。

# バックグラウンド・モードのコンテナ
docker run --rm -dit --name test centos:7 sleep 20

# 確認(20秒経過で無くなる)
docker ps --filter=name=test
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4704d85c2089        centos:7            "sleep 20"          4 seconds ago       Up 2 seconds                            test

# コンテナ起動中はUpと表示

なお、コンテナシェルからすればsleepコマンドはフォアグラウンド。コンテナ起動がホスト端末からみたらバックグラウンドということ。


Apache HTTPサーバ

httpd(2.4)を起動したい場合、いくつも方法はあるが公式リポジトリのものを使うと、

# バックグラウンド・モードのコンテナ
# --publishでホストのポート80をコンテナのポート80につなぐ
docker run --rm -dit --name test --publish 80:80 httpd:2.4 httpd-foreground

# コンテナ確認
docker ps --filter=name=test
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                NAMES
fb84e475fc86        httpd:2.4           "httpd-foreground"   7 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp   test

# 動作確認
curl localhost
<html><body><h1>It works!</h1></body></html>

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

ここでもhttpdはコンテナシェルからすればフォアグラウンド。コンテナ起動がホスト端末からみたらバックグラウンドということ。