【Docker】RailsのENTRYPOINTのentrypoint.shがやっていることを調べてみる
やること
RailsのDockerfileによくでてくる、ENTRYPOINTのentrypoint.shがなにをやっているのかを調べました
対象の記述
Dockerfile
...
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
このような形で、ENTRYPOINTでentrypoint.shを実行し、最後にCMD命令を行っている
ENTRYPOINTとCMDの併用
挙動
ENTRYPOINT命令とCMD命令を併用しているので、ENTRYPOINTの引数にCMD命令を渡していることがわかる
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
pumaの起動が失敗しないように既に起動しているプロセスをkillしてから、execコマンドを実行している。
そして、execコマンドに"$@"を渡しているので、引数(CMD命令の中身)を最後に実行するということがわかる。
位置パラメータについて
結論
entrypoint.shで様々なshellを実行したあとに、puma(アプリケーション・サーバー)を起動するCMD命令を実行している