12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

テコテックAdvent Calendar 2018

Day 8

nvmでNode.jsをインストールしたDockerイメージの作成

Last updated at Posted at 2018-12-07

はじめに

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を作成します。

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を変更します。

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が必要になったからです。
その必要になった理由は別記事で説明します!

参考にしたサイト

Installing nvm on Alpine Linux
Dockerfileでビルド時にbashを使う

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?