npmをローカルにインストールせずに、Dockerだけでnpm initやnpm installをする方法を解説します。
npm init
まずは、ディレクトリを作成して中に移動します。
mkdir app && cd app
次に、dockerを使ってnpm initします。以下のコマンドを実行してください。実行するとpackage.jsonが生成されます。
docker run --rm -w "/usr/app" -v "${PWD}:/usr/app" node:15.3-alpine npm init -y
コマンドの解説をします。
docker run <IMAGE>は、イメージをコンテナ化するコマンドです。今回はnode:15.3-alpineを指定しています。これは、公式のイメージで、ローカルになければコマンドを実行したときにインストールされます。
--rmオプションは、コンテナの終了時に自動的にそのコンテナを削除します。詳しくはこちらに書いてあります。
-wオプションでワーキングディレクトリを指定しています。システムの邪魔にならなければどこでもいいですが、今回は/usr/appとしました。
-vオプションは、マウントをします。今回は、${PWD}:/usr/appとしているので、現在のディレクトリを/usr/appにマウントすることになります。こうすることで、npm init -yを実行して、/usr/app内に生成されるpackage.jsonを現在のディレクトリに反映させることができます。
最後の引数は、実行したいコマンドです。
npm install
上記と同じように以下のコマンドを実行します。例としてexpressをインストールしてみました。実行するとpackage-lock.jsonやnode_modulesが生成されます。
docker run --rm -w "/usr/app" -v "${PWD}:/usr/app" node:15.3-alpine npm install express
Dockerを使うことで、npmをインストールせずに使うことができました。