TL; DR
#!/bin/bash
# 前処理
echo "Do something before execution docker-entrypoint.sh"
# この行を追加
source /usr/local/bin/docker-entrypoint.sh "$@"
# 後処理
echo "Do something after execution docker-entrypoint.sh"
$ chmod +x entrypoint.sh
COPY entrypoint.sh /usr/local/bin
# ENTRYPOINT ["docker-entrypoint.sh"]
ENTRYPOINT ["entrypoint.sh"]
CMD ["apache2-foreground"]
はじめに
WordPressの公式Docker Imageを使って、色々と実行したいことがありました。
ただ、WordPressを立ち上げる前に、DBにデータを挿入する作業など、何かしらShellScriptを実行したい時にどのようにするのが良さそうかを知らなかったので残しておきます。
docker-entrypoint.sh
公式のDockerImageでは、デフォルトで起動スクリプトを「docker-entrypoint.sh」という名前で保存しておき、そのスクリプトを立ち上げの際に実行することによって、そのContainerで実行したいアプリケーションを起動するという方法が良く採られます。
多くの場合、環境変数などの設定を済ませれば、起動するだけで良いアプリケーションなどのImageに良く用いられる方法ですが、起動前後に別の処理を行いたい場合などは少し不便です。
かといって、自己流の起動スクリプトを使ってしまうと、Imageのバージョンアップによるdocker-entrypoint.shの最新版の恩恵を受けることができません。
このような場合は、そのdocker-entrypoint.shの実行を自己流の起動スクリプトに持たせることを考えます。
sourceを使って、docker-entrypoint.shを展開し、 "$@"
を使って引数を全て渡すことで解決ができます。
方法
以下のようなスクリプトを書きます。
sourceの行で、受け取っている引数を全て引き継ぐことが大事です。
#!/bin/bash
# 前処理
echo "Do something before execution docker-entrypoint.sh"
# この行を追加
source /usr/local/bin/docker-entrypoint.sh "$@"
# 後処理
echo "Do something after execution docker-entrypoint.sh"
作成したスクリプトは、実行可能な権限を与えます。
$ chmod +x entrypoint.sh
COPY entrypoint.sh /usr/local/bin
# ENTRYPOINT ["docker-entrypoint.sh"]
ENTRYPOINT ["entrypoint.sh"]
CMD ["docker-entrypoint.shへの引数"]
まとめ
sourceコマンド、zshrcの更新に使うコマンドくらいにしか思っていなかったので、感動でした。
WordPressのImageとかを扱う時に便利なので是非!