Nodeの実行ファイルをmulti-stage buildでCOPYして持って来て使ってみました。
CircleCIでHugoのビルド環境を整えている時に、go以外にもNodeも必要だったのでFROMをどれにしようと悩んでいたのですが、FROMをgoにして公式リポジトリのalpineでコンパイルされたNodeを持ってこれば良いんじゃないかと思い試してみました。
/usr/local/bin/node
このバイナリファイルだけコピーしてきても共有ライブラリを使っていて↓のようなエラーが出てしまうので実行する側でもg++をインストールする必要があります。
Error loading shared library libstdc++.so.6: No such file or directory (needed by /usr/local/bin/node)
Error loading shared library libgcc_s.so.1: No such file or directory (needed by /usr/local/bin/node)
Error relocating /usr/local/bin/node: _ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode: symbol not found
Error relocating /usr/local/bin/node: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9push_backEc: symbol not found
Error relocating /usr/local/bin/node: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6resizeEmc: symbol not found
Error relocating /usr/local/bin/node: _ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base: symbol not found
Error relocating /usr/local/bin/node: _ZNSi10_M_extractIdEERSiRT_: symbol not found
その他にもnpmなども使いたいので、以下の様に設定したら動かすことができました。
FROM node:10.13.0-alpine AS node
FROM alpine:3.8
RUN apk add --no-cache --virtual g++
COPY --from=node /usr/local/bin/ /usr/local/bin/
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules