Dockerコンテナのプロセスをめぐる旅

 

2023年02月26日

Dockerコンテナのプロセスをめぐる旅







こんにちは、エンジニアの友田です。MLエンジニアを目指しています。

Nodejsの環境をDockerで構築していたところ、コンテナのプロセスってどうなってるの?って疑問を抱き検証しました。

注意事項

Dockerを使ったことがある方向けです。

事前の準備

Dockerfileとdocker-compose.ymlを準備します。

DockerfileのENTRYPOINT命令は、コンテナ起動時にそのコンテナのデフォルトプロセスとして実行されるコマンドを指定するために使用されます。
ここでは実行されるコマンドにnodeを指定しています。

docker-compose.ymlファイルのvolumesオプションは、ホストからコンテナへマウントするディレクトリを指定しています。
ここではsrcディレクトリを指定しています。つまり、srcディレクトリ配下に作成したファイルはコンテナへ同期されます。

 

Node.jsでJavaScriptファイルを実行する方法

nodeコマンドに続けてJavaScriptファイルのパスを指定します。

例えば、main.jsファイルを実行する場合は、下記コマンドです。

 

コンテナ起動時にJavaScriptファイルを実行する

ENTRYPOINTでnodeを指定しています。つまり、コンテナ起動時にnodeコマンドが実行されます。パラメータ(param)を渡す方法は以下です。

このコマンドは、nodeというコンテナイメージを起動し、ENTROYPOINTにparamを渡します。”run”に続く”node”とは、docker-compose.ymlの3行目のサービス名”node”に当たります。

JavaScriptファイルを実行する場合、下記のようにファイルを指定します。

 

実行中のDockerコンテナを確認する方法

 

Node.jsでJavaScriptファイルを実行して、コンテナのプロセスを確認する

3パターンに分けて実行します。実行直後にdocker ps でコンテナのプロセスを確認します。

 

標準出力1行

コンテナのプロセスを確認しましょう。
何も表示されません。

10秒スリープ

コンテナのプロセスを確認しましょう。
実行したコンテナのプロセスが確認できます。10秒後に確認すると、プロセスが確認できません。

無限ループ

コンテナのプロセスを確認しましょう。
実行したコンテナのプロセスが確認できます。ドッカーデーモンを停止しない限り確認できます。

最後に

コンテナのプロセスを確認しました。デフォルトプロセスは、DockerfileのENTRYPOINT命令で指定します。今回は、nodeコマンドです。
“node”は、JavaScriptコードを実行するためのコマンドです。

さて皆さん。コンテナを起動したら手動で停止するまで動いていませんか? なぜか気になりませんか?ENTRYPOINT命令を指定しなくても。この理由について次回説明します。

最後までお読みいただきありがとうございました。


無題ドキュメント