🫣

DockerのENTRYPOINTとCMD

2024/12/31に公開

ENTRYPOINTとは?

ENTRYPOINTは、コンテナが起動されたときに実行されるデフォルトのコマンドを指定します。ENTRYPOINTに指定されたコマンドは、コンテナが起動されるたびに必ず実行されます。

CMDとは?

CMDは、デフォルトのコマンドおよび引数を指定します。CMDはENTRYPOINTと組み合わせて使われることが多く、ENTRYPOINTに指定されたコマンドのデフォルトの引数を提供します。

ENTRYPOINTとCMDは、Dockerコンテナの起動時に実行されるコマンドを制御するための強力なツールです。ENTRYPOINTは必ず実行されるコマンドを指定し、CMDはそのコマンドのデフォルトの引数を提供します。これらを組み合わせることで、柔軟かつ再利用可能なコンテナを構築できます。

例1: ENTRYPOINTのみを指定

以下のDockerfileでは、ENTRYPOINTに["sleep"]を指定しています。この場合、コンテナを起動する際に追加の引数を渡すことで、sleepコマンドの実行時間を指定できます。

# Dockerfile
FROM ubuntu
ENTRYPOINT ["sleep"]

このDockerfileをビルドして、コンテナを実行するコマンドは以下の通りです:

docker build -t ubuntu-sleeper .
docker run -t ubuntu-sleeper 10

このコマンドは、sleep 10を実行し、コンテナは10秒間スリープします。

例2: ENTRYPOINTに引数を指定

ENTRYPOINTに引数を指定することもできます。以下の例では、ENTRYPOINTに["sleep", "10"]を指定しています。この場合、コンテナが起動されると、sleep 10が自動的に実行されます。

# Dockerfile
FROM ubuntu
ENTRYPOINT ["sleep", "10"]

このDockerfileをビルドして、コンテナを実行するコマンドは以下の通りです:

docker build -t ubuntu-sleeper .
docker run -t ubuntu-sleeper

このコマンドも、sleep 10を実行し、コンテナは10秒間スリープします。

例3: CMDのみを指定

以下のDockerfileでは、CMDに["sleep", "10"]を指定しています。この場合、コンテナが起動されると、デフォルトでsleep 10が実行されますが、コンテナ起動時に他の引数を指定することもできます。

# Dockerfile
FROM ubuntu
CMD ["sleep", "10"]

このDockerfileをビルドして、コンテナを実行するコマンドは以下の通りです:

docker build -t ubuntu-sleeper .
docker run -t ubuntu-sleeper

このコマンドも、sleep 10を実行し、コンテナは10秒間スリープします。

例4: ENTRYPOINTとCMDの組み合わせ

以下のDockerfileでは、ENTRYPOINTに["sleep"]を指定し、CMDに["10"]を指定しています。この場合、コンテナが起動されると、デフォルトでsleep 10が実行されますが、コンテナ起動時に他の引数を指定することもできます。
やろうと思えば、ENTRYPOINTとCMDの組み合わせもできます。

# Dockerfile
FROM ubuntu
ENTRYPOINT ["sleep"]
CMD ["10"]

このDockerfileをビルドして、コンテナを実行するコマンドは以下の通りです:

docker build -t ubuntu-sleeper .
docker run -t ubuntu-sleeper

このコマンドは、sleep 10を実行し、コンテナは10秒間スリープします。

docker run -t ubuntu-sleeper 20

引数を少し変えたこのコマンドは、sleep 20を実行し、コンテナは20秒間スリープすることができます。
docker run時に引数が設定されていなければデフォルトでCMDで設定した値が入ります。

この記事が、ENTRYPOINTとCMDの使い方を理解する一助となれば幸いです。ぜひ、実際に試してみて、Dockerの強力な機能を体験してみてください。

ヘッドウォータース

Discussion