Dockerでnvmを使う方法
Docker内でnvmをインストールする手順 (日本語)
nvmとは?
nvm (Node Version Manager) は、複数の Node.js バージョンを管理するためのツールです。Dockerコンテナ内で特定のNode.jsバージョンを使用したい場合に便利です。
Dockerコンテナ内でnvmをインストールする方法
-
Dockerfileの作成
- 新しいファイルを作成し、
Dockerfile
と名付けます。
- 新しいファイルを作成し、
-
Node.jsのベースイメージ指定
-
nvmのインストール
-
nvmの初期化
ENV NVM_DIR ~/.nvm
を記述します。これは、nvmのインストールディレクトリを設定します。RUN . ~/.nvm/nvm.sh
を記述します。これは、nvmを初期化します。
-
Node.jsバージョンのインストール
FROM node:lts
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
ENV NVM_DIR ~/.nvm
RUN . ~/.nvm/nvm.sh
RUN nvm install node
Dockerイメージの作成と実行
docker run -it my-node-app
でコンテナを実行します。docker build -t my-node-app .
でDockerイメージを作成します。
コンテナ内のnvmの使用
- 例えば、
nvm use 16
でNode.jsバージョン16を使用します。 - コンテナ内で
nvm use <バージョン>
を実行して、使用するNode.jsバージョンを切り替えることができます。
FROM node:lts
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
ENV NVM_DIR ~/.nvm
RUN . ~/.nvm/nvm.sh
RUN nvm install node
docker build -t my-node-app .
docker run -it my-node-app
# コンテナ内で実行
nvm use 16
node -v
詳しい解説
-
RUN curl -o- ...
: nvmのインストールスクリプトをダウンロードして実行します。
-
コンテナの実行
-
nvmの使用
nvm use 16
: Node.jsバージョン16を使用するように切り替えます。node -v
: 現在使用中のNode.jsバージョンを確認します。
動作確認
nvm ls
を実行すると、インストールされているNode.jsバージョンのリストが表示されます。- コンテナ内で
node -v
を実行すると、インストールしたNode.jsバージョンが表示されます。
マルチステージビルドの使用
- nvmのインストール
第1ステージでnvmをインストールし、第2ステージでアプリケーションをビルドします。 - 複数のステージ
異なるビルドステージを定義し、各ステージで異なるタスクを実行します。
# Stage 1: Install nvm
FROM node:lts as builder
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
ENV NVM_DIR ~/.nvm
RUN . ~/.nvm/nvm.sh
RUN nvm install node
# Stage 2: Build the application
FROM node:lts-alpine
COPY --from=builder /app /app
WORKDIR /app
CMD ["node", "index.js"]
Docker Composeの使用
- nvmのインストール
1つのサービスでnvmをインストールし、他のサービスでそのサービスのイメージを使用します。 - 複数のサービス
複数のサービスを定義し、各サービスに異なるイメージを使用します。
version: '3.8'
services:
nvm-installer:
build: .
command: npm install
app:
build: .
depends_on:
- nvm-installer
command: node index.js
Dockerイメージの再利用
- カスタムイメージ
カスタムイメージを作成し、nvmをインストールして公開します。 - 既存のイメージ
既存のDockerイメージをベースとして使用し、nvmをインストールします。
FROM node:lts
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
ENV NVM_DIR ~/.nvm
RUN . ~/.nvm/nvm.sh
RUN nvm install node
Docker Hubの公式イメージ
- 直接使用
FROM node:lts-nvm
のように、直接使用できます。 - nvmの公式イメージ
Docker Hubで公開されているnvmの公式イメージを使用します。
Dockerイメージのレイヤーキャッシュ
- 最適化
ビルドプロセスを最適化して、レイヤーキャッシュを有効に活用します。 - レイヤーキャッシュ
Dockerイメージのレイヤーをキャッシュして、ビルド時間を短縮します。
node.js docker nvm