Container安裝 node 透過Dockerfile 使用nvm進行安裝
在開發和部署過程中,我們經常需要在 Docker 容器中使用特定版本的 Node.js 和 npm,比如用 PM2 來管理 Node.js 應用。雖然可以使用容器預設的 Node.js,但為了確保環境的一致性和可控性,我們往往希望固定使用特定版本。這就引出了如何在 Docker 容器中精確控制 Node.js 環境的問題。解決這個需求的核心步驟是撰寫一個自定義的 Dockerfile,並正確使用它來創建和運行容器。
而為什麼不用 php 8.2-fpm-alpine ,是因為精簡版的容器中,有很多所需要的依賴 是沒有的 所以會讓編譯過程中不斷地產生失敗,若要同個容器中有多個環境的話 則建議使用ubuntu 會比較好一點。
以下範本 選用 php 8.2-fpm版本 內建是ubuntu,使用nvm 並且將版本定義成一個環境變量,這樣就可以隨時變更該Dockerfile,不用重複的去做很多事情。
Docker Image: php 8.2-fpm
# Dockerfile
FROM php:8.2-fpm
# 定義一個node 環境變量 可以隨時更改 node 版本
# 只需要20 18 16 ... 等
ENV NODE_VERSION 20
RUN set -eux; \
apt-get update && \
apt-get install -y --no-install-recommends \
git \
default-mysql-client \
default-libmysqlclient-dev \
vim \
zlib1g-dev \
libbz2-dev \
libzip-dev \
libreadline-dev \
libsqlite3-dev \
libncurses5-dev \
libncursesw5-dev \
xz-utils \
zip \
imagemagick \
unzip \
libssl-dev \
wget \
telnet \
iproute2 \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
iputils-ping \
libxslt1-dev \
procps \
libmagickwand-dev \
build-essential
# 安裝 nvm
ENV NVM_DIR /root/.nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash \
&& . $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default
# node
RUN npm install pm2 -g