はじめに
Alpine Linuxにnvmをインストールしたイメージをベースイメージにして任意のバージョンのNode.jsをインストールしたDockerイメージを作成します。
今回の作業環境と作成するDockerイメージの内容は以下になります。
作業環境
- Windows10 pro
- Docker for Windows
作成するDockerイメージの内容
- Alpine Linux
- nvm : v0.33.11
- Node.js : v6.11.5
Node.jsのインストール
nvmをインストールしたイメージからコンテナを起動して、使用したいバージョンのNode.jsをインストールする手順を確認していきます。
PS C:\works\docker\alpine-nvm-node> docker run --rm -it alpine-nvm bash
bash-4.4#
v6.11.5
をインストールしたいので以下のよう打ち込みましょう。
bash-4.4# nvm install 6.11.5
正常にインストールできたかと思いますが、結果を見てみると何やらエラーが・・・
env: can't execute 'node': No such file or directory
nvm is not compatible with the npm config "prefix" option: currently set to ""
Run `nvm use --delete-prefix v6.11.5` to unset it.
Node.jsのバージョンを見ようとしても「そんなんねぇよ!」って言われてしまいます・・・
bash-4.4# node -v
bash: /root/.nvm/versions/node/v6.11.5/bin/node: No such file or directory
公式ドキュメントのインストール手順をよくよく読んでみると、ソースコードからコンパイルしなくてはいけないと書いてありました。
なので、いったんv6.11.5
を削除して、ソースコードからコンパイルしなおすことにします。
ソースコードからコンパイルするにはinstall
に-s
オプションをつければいいようです。
bash-4.4# nvm uninstall 6.11.5
Uninstalled node v6.11.5
bash-4.4# nvm install -s 6.11.5
結構時間がかかるので放置して他のことをしてましょう。
インストールが終わったらNode.jsのバージョンを確認してみましょう。
bash-4.4# node -v
v6.11.5
成功ですね!
Dockerfileの作成
では上記の手順をもとにDockerfileを作成していきましょう。
nvmをインストールしたイメージとは別のイメージにしたいので、新しいディレクトリで新規でDockerfileを作成します。
FROM alpine-nvm
RUN \
nvm install -s 6.11.5
こんな感じですね。
こちらで作成したイメージをベースイメージにしています。
早速ビルドしてみましょう。
PS C:\works\docker\alpine-nvm-node> docker build -t alpine-nvm-node:v6.11.5 .
途中で/bin/sh: nvm: not found
と出て止まったかと思います。
Dockerfileからイメージを作成する場合、デフォルトのシェルで動作するので、nvmが動くbash
で動くようにしてあげないといけなかったようです。
いろいろ調べた結果、以下のようにDockerfileを変更します。
FROM alpine-nvm
SHELL ["/bin/bash", "-c"]
RUN \
source ~/.bashrc && \
nvm install -s 6.11.5 && \
nvm cache clear
動作するシェルを指定しただけでは.bashrc
を読み込んでくれないようなので、手順の中に組み込みます。
また、ソースからビルドするのでnvmのキャッシュディレクトリの容量が大きくなっています。
ついでにそれも削除するようにしておきます。
これでビルドを実行するとイメージが作成されるはずです。
作成されたイメージを確認してみましょう。
PS C:\works\docker\alpine-nvm-node> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine-nvm-node v6.11.1 6ba8a1f65a76 10 minutes ago 252MB
alpine-nvm latest a2f9534c5a8e 3 hours ago 208MB
イメージからコンテナを起動してNode.jsがインストールされているのを確認します。
PS C:\works\docker\alpine-nvm-node> docker run --rm -it alpine-nvm-node:v6.11.1 bash
bash-4.4# node -v
v6.11.5
成功です!
これでいろいろなバージョンのNode.jsの環境をDockerで用意することができるようになりました!
ちなみにNode.js公式のDockerイメージは、各バージョンがすでにDockerHubにあります。
https://hub.docker.com/_/node/
Alpine Linuxがベースのイメージもあります!
今回nvmをインストールして、Node.jsの複数バージョンをインストールできるようにしたのは、複数バージョンのNode.jsが必要になったからです。
その必要になった理由は別記事で説明します!