📢 この記事は Gemini-2.5-pro によって翻訳されました
Windows 環境で bash スクリプトを動かすのは、明らかにちょっとハードルが高いよね。Linux 環境であっても、別のディストリビューションに特化したスクリプトを動かすのは少し面倒だったりする。そんな時、Docker を使えばこの問題を解決できるし、ローカル環境をクリーンに保つこともできるんだ。
この記事では alpine を例に、Docker の Linux システムを使ってカレントディレクトリでインタラクティブな処理を行う方法を紹介するよ。
原理
実のところ、カレントディレクトリのすべてのファイルをコンテナ内のディレクトリにマウントしているだけなんだ。コマンドのテンプレートはこんな感じ。
| |
それぞれの引数の意味は以下の通りだよ。
| 引数 | 意味 |
|---|---|
| –rm | コンテナ終了後に削除する |
| -it | interactive と tty 出力の組み合わせ。対話操作と出力を表示するために必要 |
| -v | パスのマッピング。カレントディレクトリをコンテナの /data にマッピングする |
| -w | ワーキングディレクトリの設定。コンテナに入った時に最初から /data にいられるようにする |
| sh | 最後に sh コマンドを実行することを指定 |
また、単発のコマンドを実行したいだけで対話的な出力が必要ない場合は、最後にそのコマンドを入力すればいいよ。例えばこんな感じ。
| |
Windows
PowerShell と CMD 環境ではコマンドが異なるんだ。主な違いは環境変数の書き方だよ。以下は alpine の対話型端末を開くコマンド。
- PowerShell
| |
- CMD
| |
Linux
Linux の場合、コンテナに入るとデフォルトで root 権限になる。コンテナ内で生成されたファイルがホスト側で root 権限になってしまい、編集できなくなるのを防ぐために、現在のユーザーの UID と GID をマッピングしておくのがベストだよ。
| |
MacOS
権限の問題を気にする必要はないから、変数は Linux と同じで大丈夫。
| |
注意事項 - Alpine
alpine は非常に軽量化されたシステムだから、よく使うコマンドでも自分でインストールする必要があるかもしれない。その時は apk add コマンドを使ってインストールしてね。