3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker-compose.ymlで複数コマンドを実行する方法

Last updated at Posted at 2021-01-15

やりたいこと

docker-compose.ymlで下記のコマンドを実行したい

composer install --no-interaction
tail -f /dev/null

なぜDockerfileへ記載しないのか

リビルドが増え面倒

composer installはjsonの記載内容によってvendorにインストールされるものが変わる可能性がある
Dockerfileでcomposer installを実行する環境でコンテナ構築を行った場合、jsonを編集したらイメージから作り直しが必要になりとても面倒な為

ローカルディレクトリのマウント時に面倒が起こる

また、ローカルのディレクトリをコンテナにマウントさせている場合下記のようになる
イメージ作成→マウント→ローカルにはvendorディレクトリがない→マウント後、イメージ内にあるvendorが無くなる
※これが原因でどハマりした事あり

参考:
https://teratail.com/questions/203319

docker-compose.ymlへのコマンド記載方法(基本)

command: tail -f /dev/null

ちなみに上記コマンドは、普通にdocker-compose up -dしただけではコンテナのビルドのみで起動はされない(正確にはymlに記載の内容が全て実行終了した後コンテナが停止する)為、ymlに記載の内容が終了後も何かコマンドが実行されている状態ならコンテナが停止しない仕様からtail -fといった動作し続けるコマンドを実行することでコンテナが停止することを防いでいる

参考:
https://teratail.com/questions/280776

docker-compose.ymlへのコマンド記載方法(複数)

    command: >
      sh -c "
      composer install --no-interaction &&
      tail -f /dev/null
      "

番外編

dockerコンテナに入る時、bashだったりshだったりこの差がよくわかっていなかった為復習

shは、、

man sh

するとDASHというものが出てきた

dashとは、、

Debian Almquist shellの略で、bashよりも高速、らしい。
/bin/shの代替とも記載があったけど、なぜ代替しているのか、等深堀するのに時間がかかりそうなのでまた別の機会で。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?