VSCode リモートコンテナの Python3.8 にnvm , nodeのインストールをDockerファイルに記述する


リモートコンテナ用のdockerイメージ(Debian11, Python3.8)の環境でnodeを使いたかったので入れた
いろんなOSさわると、遭遇するエラーもさまざま

  • 入れた対象OS
root ➜ /workspaces $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:        11
Codename:       bullseye

Dockerファイルに記載してnvmとnodeをインストール(Rebuild Containerで実行して1分かからず)

  • 操作しているユーザー環境変数の設定はしていない
  • apt upgrade はしなくても良い
  • node install ではビルドしない(-s 指定しない)
  • install.sh が実行されると、/usr/local/share/nvm に nvmが入っていることを気づかずにやっていてつまづいた

  • 作成したDeockerfile(https://gist.github.com/ssugimoto/acd7fe5d25b9adaf149dd3c8a3bdbf2a )、以下も同じ

FROM mcr.microsoft.com/vscode/devcontainers/python:3.8

RUN apt-get update \
    && apt-get -y install curl \
    && apt-get autoremove -y \
    && apt-get clean -y \

RUN apt-get upgrade \
    && apt-get -y install curl

ENV NVM_DIR /usr/local/share/nvm
ENV NODE_VERSION 12.22.1
#
# Install nvm with node and npm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

WORKDIR /workspaces
  • 入れたバージョンの確認
root ➜ /workspaces/test $ 
root ➜ /workspaces/test $ nvm --version
0.38.0
root ➜ /workspaces/test $ node --version
v12.22.1
root ➜ /workspaces/test $ npm --version
6.14.12
root ➜ /workspaces/test $ python --version
Python 3.8.11

エラーの対応

  • /bin/sh: nvm: not found docker , "bash: nvm: command not found"
    nvm コマンドがありません。

    • 手動でインストールすると発生しないけど、Dockerfileだと発生する
    • RUN コマンド1行で(まとめて)記載する必要があるんだけど、1行で記載しても解決できず。
    • そもそもnvmがインストールされる場所が想定と違ってた

参考

ENV NVM_DIR /usr/local/nvm
・・・
. $NVM_DIR/nvm.sh

の2つの箇所、 /usr/local/nvm にはインストールされないので変更が必要

なぜ、node用のリモートコンテナを使わないのか

  • VSCodeリモートコンテナ Debian10 node12(node12または14)の環境が入っているOS Debian10ではPython3.7がインストール済で、Python3.8 を sudo apt-get install python3.8 ではインストールできなかった
  • Pyhon3.8を使うには いくつかの xxx-devライブラリを入れ、 make altinstall する必要があり、コンテナが使えるまでの時間が長すぎた

Dockerファイルに書かないで、通常のインストール

  • ほぼ、以下のコマンド入る(sudo ついてるけど、rootで作業しています)
# sudo apt update
# sudo apt upgrade
# sudo apt-get install curl

nvm のインストール
# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
# nvm --version
# nvm install v12.22.1

コンテナビルドに続いて Amplif cli 入れたら3分くらいかかった(176sec)

devcontainer.json に
"postCreateCommand": "npm install -g @aws-amplify/[email protected]",
を追記した場合に、npm install が3分かかった

npm install ログの最後

+ @aws-amplify/[email protected]
added 1404 packages from 775 contributors in 176.666s