如何在 Docker 容器中安裝 NVM
1.概述
Node 版本管理器 (NVM) 是用於管理機器上多個 Node.js 版本的工具。
在本教程中,我們將學習如何在 Docker 容器中安裝 NVM。我們將討論三種方法:
- 使用 NVM Docker 映像,適用於 Node.js 是主要或唯一使用的軟體的情況
- 運行安裝命令,用於在現有或新的 Docker 容器中進行安裝
- 從 Dockerfile 構建,用於自動化安裝過程
2. 使用 NVM Docker 映像
我們可以從 Docker Hub 上提供的幾個 NVM Docker 映像中進行選擇。讓我們拉取guolin/node-nvm-docker
映像:
$ docker pull guolin/node-nvm-docker
現在,我們可以在圖像列表中看到它:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
guolin/node-nvm-docker latest 6dc6207658b5 8 years ago 703MB
下載鏡像後,讓我們以互動模式運行基於它的容器:
$ docker run
--name node-nvm
-it
guolin/node-nvm-docker
bash
這將在容器中啟動一個 Bash shell:
root@0787786b89f9:/#
容器中預先安裝了NVM版本管理器;因此,我們可以直接確認其版本:
root@0787786b89f9:/# nvm --version
0.30.1
此外,Node.js 也預先安裝在容器中,所以我們也來驗證一下這個版本:
root@0787786b89f9:/# nvm current
v4.2.1
3.運行命令安裝NVM
我們可以透過執行幾個命令在現有或新的 Docker 容器中安裝 NVM 。
讓我們啟動一個互動式 Ubuntu 容器來安裝 NVM:
$ docker run
-it
--name ubuntu-demo
ubuntu
/bin/bash -c "echo 'Hello World'; /bin/bash"
輸出「Hello World」訊息後,將啟動互動式 Bash shell:
root@8cc33fbb81e0:/#
首先,我們需要下載curl
命令列工具:
root@8cc33fbb81e0:/# apt update && apt install curl -y
之後,我們可以使用curl
下載並安裝 NVM:
root@8cc33fbb81e0:/# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16631 100 16631 0 0 406k 0 --:--:-- --:--:-- --:--:-- 406k
=> Downloading nvm as script to '/root/.nvm'
=> Appending nvm source string to /root/.bashrc
=> Appending bash_completion source string to /root/.bashrc
我們可以關閉並重新開啟終端以開始使用 NVM。或者,讓我們運行export
命令來載入 NVM 並開始使用它:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
載入NVM後,我們可以使用nvm
指令來尋找它的用法:
root@8cc33fbb81e0:/# nvm
Node Version Manager (v0.40.2)
Usage:
nvm --help Show this message
nvm --version Print out the installed version of nvm
讓我們使用它來安裝和使用最新的 Node 版本:
root@8cc33fbb81e0:/# nvm install node
Downloading and installing node v23.11.0...
Downloading https://nodejs.org/dist/v23.11.0/node-v23.11.0-linux-x64.tar.gz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v23.11.0 (npm v10.9.2)
然後,我們可以確認安裝報表的 Node 版本:
root@8cc33fbb81e0:/# nvm current
v23.11.0
有趣的是,即使尚未安裝 Node,我們也可以執行此命令。
4. 從 Dockerfile 構建
當我們想要自動化安裝流程時,最合適的選擇可能是使用 Dockerfile 。我們將分三步驟完成此操作:
- 建立 Dockerfile
- 建置 Docker 映像
- 運行 Docker 容器
4.1.建立 Dockerfile
我們可以將先前手動完成的大部分工作放入 Dockerfile 中:
FROM ubuntu:latest
ARG NODE_VERSION=20
# install curl
RUN apt update && apt install curl -y
# install nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
# set env
ENV NVM_DIR=/root/.nvm
# install node
RUN bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION"
# set ENTRYPOINT for reloading nvm-environment
ENTRYPOINT ["bash", "-c", "source $NVM_DIR/nvm.sh && exec \"$@\"", "--"]
# set cmd to bash
CMD ["/bin/bash"]
我們可以看到我們正在像以前一樣在 Ubuntu 基礎上安裝 cURL、NVM 和 Node。
4.2.建置 Docker 映像
現在,是時候從我們的 Dockerfile 建立一個 Docker 映像了。為此,我們需要進入包含 Dockerfile 的目錄。
讓我們執行docker build
指令來建立一個名為nvm:latest
Docker 映像:
$ docker build
-t nvm:latest .
docker images
顯示我們已成功建立它:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvm latest 7383b5cdf243 6 minutes ago 345MB
ubuntu latest 602eb6fb314b 2 days ago 78.1MB
4.3.運行 Docker 容器
現在,我們可以建立一個容器,它與我們之前從已經安裝了 Node.js 和 NVM 的 Docker Hub 映像建置的容器非常相似。
讓我們從建置的映像檔中運行一個範例容器:
$ docker run --rm -it nvm
root@c012e7d835d9:/#
現在,我們可以再次驗證 Docker 容器中安裝的 NVM、Node 和 NPM 版本:
root@c012e7d835d9:/# nvm -v
0.40.2
root@c012e7d835d9:/# nvm current
v20.19.0
root@c012e7d835d9:/# npm -v
10.8.2
但是,我們並不局限於 Dockerfile 中配置的版本。為了演示,讓我們在同一個容器中安裝一個新版本的 Node:
root@c012e7d835d9:/# nvm install 23.11.0
Downloading and installing node v23.11.0...
Downloading https://nodejs.org/dist/v23.11.0/node-v23.11.0-linux-x64.tar.gz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v23.11.0 (npm v10.9.2)
我們可以使用nvm ls
指令列出所有已安裝的版本:
root@c012e7d835d9:/# root@c012e7d835d9:/# nvm ls
v20.19.0
-> v23.11.0
default -> 20 (-> v20.19.0)
-> 表示活動 Node 版本。
5. 結論
在本文中,我們了解了在 Docker 容器內安裝 NVM 的不同方法。我們可以在現有容器或新容器中安裝 NVM。或者,當我們想要自動化安裝過程時,我們可以使用配置了所有安裝說明的 Dockerfile 來建立我們自己的映像和容器。
與往常一樣,本文中使用的 Docker 命令可在 GitHub 上找到。