Macで使える超便利なDockerコマンド(自作する必要があるから知らなかった)

Macで使える超便利なDockerコマンド(自作する必要があるから知らなかった)

Michael Charles Aubrey // Fri Mar 01 2024

コマンドは以下の通りです:

  • docker open - ターミナルからDocker Desktopを開く(そしてdockerデーモンを起動する)

  • docker close - ターミナルからDocker Desktopを閉じる(そしてdockerデーモンを停止する)

  • docker flush - 実行中および停止中のすべてのコンテナを停止して削除する

どうやって実現するの?

以下に示すZsh用の簡単な関数を使用します。

docker() {
    case "$1" in
        "open")
            echo "Opening the Docker app..."
            open --background -a Docker
            ;;
        "close")
            echo "Stopping currently running Docker containers..."
            command docker ps -q | xargs -r -L1 command docker stop
            if [ $? -eq 0 ]; then
                echo "Closing the Docker app..."
                test -z "$(command docker ps -q 2>/dev/null)" && osascript -e 'quit app "Docker"'
            else
                echo "Failed to stop containers."
            fi
            ;;
        "flush")
            echo "Stopping and removing all containers."
            command docker container stop $(command docker ps -a -q) && command docker container rm $(command docker ps -a -q)
            if [ $? -eq 0 ]; then
                echo "Done."
            else
                echo "Failed to flush containers."
            fi
            ;;
        *)
            command docker "$@"
            ;;
    esac
}

先ほど説明したコマンドをターミナルで使用できるようにするには、Zshの設定に組み込む必要があります。これは、スクリプトを~/.zshrcファイルに追加することで実現できます。あるいは、~/.zshrcがソースとする別のファイルに追加することもできます。まず、ホームディレクトリにある~/.zshrcファイルを好みのテキストエディタで開きます。そして、このスクリプトをファイルの最後にコピー&ペーストするだけです。

でも、なぜこれが必要なの?

この節を最後に置いたのは、ここまでたどり着いた方は、おそらくこのような機能を求める独自の理由があるだろうと考えたからです。

私の場合は、2019年頃に性能の低いMacbook Airを使用していたことがきっかけでした。Docker Desktopを常にバックグラウンドで実行したくありませんでしたが、ターミナルからDockerデーモンを簡単に起動・停止する方法が欲しかったのです。

さらに、docker composeで立ち上げたプロジェクトを終了させたい場合でも、必ずしもdocker-compose.ymlファイルがあるプロジェクトディレクトリに移動したくないこともありました。

これらは些細な問題に見えるかもしれませんが、これらのコマンドは長年にわたって予想以上の有用性を発揮してきました。他の人にも役立つかもしれないと思い、共有することにしました。

この記事は元々 dev.to に掲載されています。