2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

docker-entrypoint.shの前後に処理を実行する方法

Posted at

TL; DR

entrypoint.sh
#!/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の行で、受け取っている引数を全て引き継ぐことが大事です。

entrypoint.sh
#!/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とかを扱う時に便利なので是非!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?