レガシー環境から脱却したい

プログラミングや環境構築の話をまとめています。

docker環境におけるコマンドの省略方法

はじめに

今のプロジェクトではdocker-composeを使って環境構築しています。

その時に問題なのが、コンテナ起動やコンテナ内で実行(composerとかartisanとか)したいときに打つコマンドの長さです。

毎回毎回docker-compose exec app php artisan ...など打つのはちょっと面倒。

コマンドのエイリアスを設定しても良いのですが、複数人で開発するときに全員に設定してもらうのもなぁ。。。
との思いで、スクリプトファイルを用意しましています。

下記記事を参考にしています。感謝
Docker コマンドのショートカットをプロジェクトルートに置いたら快適になった - Qiita

ファイル構成

LinuxBash)とWindowsPowerShell)の両方に対応できるよう作成しています。

┬- bin      (スクリプトディレクトリ)
│    ├- doc.sh
│    ├- artisan.sh
│    ├- composer.sh
│    ├- doc.ps1
│    ├- artisan.ps1
│    └- composer.ps1
├- docker (Dockerの設定)
│    └- Dockerfile
├- src  (ソースディレクトリ)
└- docker-compose.yml

bash

  • bin/doc.sh
#!/bin/bash

cmd="docker-compose $@"

echo $cmd
$cmd
  • bin/artisan.sh
    コンテナ起動時はexec、停止時はrunコマンドで実行するように設定
#!/bin/bash

set -eu

if docker-compose ps app | grep -q Up; then
    cmd="docker-compose exec app php artisan $@"
else
    cmd="docker-compose run --rm app php artisan $@"
fi

echo $cmd
$cmd
  • bin/composer.sh
#!/bin/bash

set -eu

if docker-compose ps app | grep -q Up; then
    cmd="docker-compose exec app composer $@"
else
    cmd="docker-compose run --rm app composer $@"
fi

echo $cmd
$cmd

powershell

  • bin/doc.ps1
$cmd = "docker-compose $Args"

echo $cmd
invoke-expression $cmd
  • bin/artisan.ps1
$run = docker-compose.exe ps app | Out-String -Stream | Select-String "Up"

if($run) {
  $cmd = "docker-compose exec app php artisan $Args"
} else {
  $cmd = "docker-compose run --rm app php artisan $Args"
}

echo $cmd
invoke-expression $cmd
  • bin/composer.ps1
    ※artisan.ps1とほぼ同じため省略

使い方

プロジェクトルートに移動して下記コマンドを実行

# コンテナ起動
./bin/doc.ps1 up -d

# artisanコマンド実行
./bin/artisan.ps1 make:controller HogeController