docker-compose.ymlのcommandプロパティに複数コマンドを設定する方法
はじめに
Docker Compose は非常に便利ですね。
3 層構造 ( クライアント、Web、DB ) のアプリケーションを作る際には、最低限 Web のコンテナ、DB のコンテナの 2 つを同時に立ち上げる必要があります。
Docker Compose なら簡単に環境を構築できます。
これらのコンテナを立ち上げる前の準備処理を行ってきたい場合があります。
( init コンテナとでも呼びましょうか。例えば設定ファイルを作ったり。 )
docker-compose.yml
の command
プロパティにこれらの初期処理を設定したかったのですが、シェルを複数コマンド記述したり、リダイレクトさせたりで少々ハマったので共有します。
検証環境
どんなことがしたかったか?
初期処理として、以下のような 2 行のコマンドを実行してファイルを作成したいとします。
シェルで記述すると非常に簡単です。
ワンライナーだと以下のように記述できますね。
改行で区切る代わりに ;
を指定しています。
さて、このような処理をさせる docker-compose.yml
を記述してみます。
- Konnichiwa! という文字列を hello.txt に出力
- ついでにパーミッションも変更する
- hello.txt は共有フォルダに配置しているので、ローカルから見える
この定義ファイルを使って docker-compose up
してみます。
echo
以降の文字列がそのまま表示されてしまいました。
sh -c
を使う
それでは解決方法に進みます。sh -c "..."
の構文をつかって、処理させたい複数のコマンドを囲んでやります。
ちなみに、以下のように折り返して記述もできます。
ひとこと
本当は各コンテナの entrypoint.sh
などで実現するのが正しいやり方でしょうか。
ディスカッション
コメント一覧
まだ、コメントがありません