programing

도커에 nvm을 설치하는 방법은 무엇입니까?

bestprogram 2023. 8. 25. 23:50

도커에 nvm을 설치하는 방법은 무엇입니까?

새 도커 이미지를 구축하는 중이며 NVM을 설치하여 nodejs를 관리하려고 합니다.

NVM 설치 방법에 대한 문서를 읽어보면 NVM 사용을 시작하려면 .bashrc 파일의 소스가 필요하다고 합니다.

도커 파일로 설정하려고 했지만 지금까지 빌드가 실패하고 다음 오류가 발생했습니다.

"filename: nvm: 명령을 찾을 수 없습니다."

다음은 도커 파일의 관련 행입니다.

ADD files/nvm_install.sh /root/
RUN chmod a+x  /root/nvm_install.sh
RUN bash -c "/root/nvm_install.sh"
RUN bash -l -c "source /root/.bashrc"
RUN cd /root
RUN bash -l -c "nvm install 0.10.31"

다음은 구축을 시도한 결과입니다.

도커 build -tnginx_dll.

Step 0 : FROM ubuntu
---> 826544226fdc
Step 1 : MAINTAINER dficociello
---> Using cache
---> da3bc340fbb3
Step 2 : RUN apt-get update
---> Using cache
---> 6b6b611feb4f
Step 3 : RUN apt-get install nginx curl -y
---> Using cache
---> 159eb0b16d23
Step 4 : RUN touch /root/.bashrc
---> Using cache
---> 5e9e8216191b
Step 5 : ADD files/nginx.conf /etc/nginx/
---> Using cache
---> c4a4a11296a2
Step 6 : ADD files/nvm_install.sh /root/
---> Using cache
---> b37cba2a18ca
Step 7 : RUN chmod a+x  /root/nvm_install.sh
---> Using cache
---> bb13e2a2893d
Step 8 : RUN bash -c "/root/nvm_install.sh"
---> Using cache
---> 149b49a8fc71
Step 9 : RUN bash -l -c "source /root/.bashrc"
---> Running in 75f353ed0d53
---> 0eae8eae7874
Removing intermediate container 75f353ed0d53
Step 10 : RUN cd /root
---> Running in feacbd998dd0
---> 284293ef46b0
Removing intermediate container feacbd998dd0
Step 11 : RUN bash -l -c "nvm install 0.10.31"
---> Running in 388514d11067
bash: nvm: command not found
2014/09/17 13:15:11 The command [/bin/sh -c bash -l -c "nvm install 0.10.31"] returned a non-zero         code: 127

저는 도커가 꽤 생소해서 도커 파일을 작성하는 데 있어 기본적인 무언가를 놓치고 있을 수도 있지만, 지금까지 제가 읽은 모든 것이 좋은 해결책을 보여주지 못했습니다.

이 신이당 때.RUN bash...별도의 프로세스에서 실행될 때마다 환경에 설정된 항목은 유지 관리되지 않습니다.설치 방법은 다음과 같습니다.nvm:

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Set debconf to run non-interactively
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections

# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
        apt-transport-https \
        build-essential \
        ca-certificates \
        curl \
        git \
        libssl-dev \
        wget \
    && rm -rf /var/lib/apt/lists/*

ENV NVM_DIR /usr/local/nvm # or ~/.nvm , depending
ENV NODE_VERSION 0.10.33

# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.20.0/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/v$NODE_VERSION/bin:$PATH

2020년 2월 20일 업데이트:이 솔루션은 사용 중인 경우에 작동합니다.debian기본 이미지사용 중인 경우ubuntu 답을 보세요.

과 같습니다.nvm내가 찾은 것:

SHELL ["/bin/bash", "--login", "-c"]

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
RUN nvm install 10.15.3

설명.

  • 첫 번째 줄은 도커 파일의 기본 셸을 bash 로그인 셸로 설정합니다.참고: 이는 모든 후속 항목이RUN,CMD,그리고.ENTRYPOINT현재 사용자(일반적으로 루트) 아래에서 실행되며, 형식으로 실행되는 경우 ~/.svrc 파일의 소스가 됩니다.

  • 은 " 번줄이설다니됩치두째다니"를 합니다.nvm바시로bash로 스크립트를 실행하면 ~/.bashrc 파일에 스크립트가 추가됩니다.

  • 세 번째 줄은 특정 버전의 nodejs를 설치하고 사용합니다.nvm,npm,그리고.node명령은 bash 로그인 셸을 통해 실행되므로 사용할 수 있습니다(라인 1 참조).

Ubuntu(마지막 버전)에서 Node.js를 NVM으로 설치하는 방법을 찾는 모든 사람을 돕기 위해 아래 도커 파일을 만들었습니다.나는 Docker, Ubuntu, Node.js의 최신 버전을 사용하고 있으며 NVM이 제대로 작동하고 있습니다($PATH는 수정되었습니다).저는 이것을 생산 환경에서 사용하고 있습니다.

$ docker info \
Server Version: 1.9.1
Kernel Version: 4.1.13-boot2docker
Operating System: Boot2Docker 1.9.1 (TCL 6.4.1); master : cef800b - Fri Nov 20 19:33:59 UTC 2015

Node.js Version: stable 4.2.4 LTS
Ubuntu Version: 14.04.3


도커 파일:

FROM ubuntu:14.04.3

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# make sure apt is up to date
RUN apt-get update --fix-missing
RUN apt-get install -y curl
RUN apt-get install -y build-essential libssl-dev

ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 4.2.4

# Install nvm with node and npm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.30.1/install.sh | bash \
    && source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

RUN mkdir /usr/app
RUN mkdir /usr/app/log

WORKDIR /usr/app

# log dir
VOLUME /usr/app/log

# Bundle app source
COPY . /usr/app
# Install app dependencies
RUN npm install

EXPOSE  3000
CMD ["node", "server.js"]

Nvm 경로가 승인된 응답 이후 변경되었으므로 최신 nvm 버전을 사용하려면 몇 가지 변경해야 합니다.또한 재매핑할 필요가 없습니다.sh작동하기 위해:

ENV NVM_DIR /usr/local/nvm
RUN mkdir -p $NVM_DIR
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
ENV NODE_VERSION v7.9.0
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION"

ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH

당신이 그것이 필요할지 확신할 수 없습니다.--delete-prefixnvm use그랬지만, 그건 제 기본 이미지가 이상할 수도 있어요.

가장 깨끗한 방법을 찾는 데 한두 시간이 걸렸습니다. --로그인이 .bashrc를 실행하지 않는 것 같아서 대화형 모드에서 실행하려면 -i를 제공해야 합니다.이로 인해 Docker가 잠시 동안 사용자에게 소리를 지르게 되므로 설치를 위해 이 방법만 실행한 다음 표준 셸로 재설정합니다.

# Installing Node
SHELL ["/bin/bash", "--login", "-i", "-c"]
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
RUN source /root/.bashrc && nvm install 12.14.1
SHELL ["/bin/bash", "--login", "-c"]

RUNDocker 파일은 다른 컨테이너에서 실행됩니다.따라서 컨테이너에 있는 파일을 원본으로 하면 다음 컨테이너에서는 해당 내용을 사용할 수 없습니다.

따라서 응용 프로그램을 설치하고 여러 단계를 수행해야 할 때 동일한 컨테이너에서 수행해야 합니다.

예를 들어,

ADD files/nvm_install.sh /root/
RUN chmod a+x /root/nvm_install.sh && \
  /root/nvm_install.sh && \
  source /root/.bashrc && \
  cd /root && \
  nvm install 0.10.31

2022년 업데이트

단 하나의 답변으로 컬 설치가 완료되었지만 전체 도커 파일이 작동하지 않았습니다.

이것은 최신 Ubuntu로 최신 nvm 2022 버전을 설치하는 복사/붙여넣기 준비가 된 나의 도커 파일입니다.

상세하고 교훈적인 버전

FROM ubuntu

# nvm requirements
RUN apt-get update
RUN echo "y" | apt-get install curl
# nvm env vars
RUN mkdir -p /usr/local/nvm
ENV NVM_DIR /usr/local/nvm
# IMPORTANT: set the exact version
ENV NODE_VERSION v16.17.0
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION"
# add node and npm to the PATH
ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/bin
ENV PATH $NODE_PATH:$PATH
RUN npm -v
RUN node -v

로그.

enter image description here

요약본

도커 및 리눅스 전문가용

FROM ubuntu

ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION v16.17.0
RUN mkdir -p /usr/local/nvm && apt-get update && echo "y" | apt-get install curl
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
RUN /bin/bash -c "source $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use --delete-prefix $NODE_VERSION"
ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/bin
ENV PATH $NODE_PATH:$PATH

메모들

  • nodejs를 입니다. 설정하는 경우nvm use v1616.17.0이 다운로드되면 v1616.17.0을 PATH에 설정할 수 없습니다.
  • nvm을 사용하면 최종 버전 및 특정 버전인 raw.g를 검색할 수 있습니다.스크립트의 /nvm/v0.39.1/install.sh 은 대신 https://github.com/nvm-sh/nvm#install--update-script 을 읽어줍니다. raw.githubuser content./nvm/messages/install.sh
  • 표준인 nodejsapp을 대신사를 사용합니다.FROM node:16
  • 기본 이미지가 노드 16이 아닌 다른 프로젝트에서 이 nvm 스니펫을 사용할 수 있습니다.예를 들어 Python Docker 이미지가 있는데 nodejs가 필요했습니다.

이는 2018년의 주요 답변을 기반으로 합니다.

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install base dependencies
RUN apt-get update && apt-get install -y -q --no-install-recommends \
        apt-transport-https \
        build-essential \
        ca-certificates \
        curl \
        git \
        libssl-dev \
        wget

ENV NVM_DIR /usr/local/nvm
ENV NODE_VERSION 8.11.3

WORKDIR $NVM_DIR

RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash \
    && . $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

:nvmbash 이 아니라입니다.은 만약이 은일당망수다있니습칠이에 수 . 만약 당신을 망칠 수 있습니다.$PATH.

여기 제 작업 버전이 있습니다.

FROM ubuntu:14.04

# Declare constants
ENV NVM_VERSION v0.29.0
ENV NODE_VERSION v5.0.0

# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh

# Install pre-reqs
RUN apt-get update
RUN apt-get -y install curl build-essential

# Install NVM
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash

# Install NODE
RUN source ~/.nvm/nvm.sh; \
    nvm install $NODE_VERSION; \
    nvm use --delete-prefix $NODE_VERSION;

@abdulljibali 및 @shamisis 답변의 도움을 받았습니다.

@Kuhes 답변의 제안을 바탕으로 소스 명령을 도커 파일에서 다음과 같이 대체했습니다.

RUN cat ~/.nvm/nvm.sh >> installnode.sh
RUN echo "nvm install 0.10.35" >> installnode.sh
RUN sh installnode.sh

2021년 2월 25일 주요 문제는 bash 셸에 특정된 '소스' 지침을 사용하는 것입니다.Ubuntu 18 설치를 위해 'source'를 '.'로 바꾼 것이 저에게 효과적이었습니다.내 도커 파일:

FROM ubuntu:bionic

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

ENV NVM_DIR /root/.nvm
ENV NODE_VERSION 14.16

# Install nvm with node and npm
RUN curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.35.3/install.sh | bash \
  && . $NVM_DIR/nvm.sh \ 
  && nvm install $NODE_VERSION

저는 우선 제가 모든 것을 뒤져서 실용적인 예를 얻었다는 사실부터 시작해야 합니다.nvm東京의 docker하나도 못 찾았어요이 스레드의 답변도 작동하지 않았습니다.

그래서, 저는 꽤 많은 시간을 보냈고 효과적인 방법을 생각해냈습니다.

# install dependencies
RUN apt-get update && apt-get install -y \
      curl \
      npm \
      nodejs \
      git;

# compatibility fix for node on ubuntu
RUN ln -s /usr/bin/nodejs /usr/bin/node;

# install nvm
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.24.1/install.sh | sh;

# invoke nvm to install node
RUN cp -f ~/.nvm/nvm.sh ~/.nvm/nvm-tmp.sh; \
    echo "nvm install 0.12.2; nvm alias default 0.12.2" >> ~/.nvm/nvm-tmp.sh; \
    sh ~/.nvm/nvm-tmp.sh; \
    rm ~/.nvm/nvm-tmp.sh;

을 확인nodejs경유로apt-get뿐만 아니라.이렇게 하지 않으면 일부 패키지가 도커 내부에 설치되지 않습니다.

질문에서 nvm 명령을 가져오려는 시도 간의 주요 차이점:

RUN bash -l -c "source /root/.bashrc"

이는 작동하지 않으며 승인된 답변에서 동일한 작업을 시도합니다.

source $NVM_DIR/nvm.sh

두 번째 버전은 nvm.sh 스크립트의 소스를 직접 제공하는 반면, 원본은 .vmsrc 파일을 통해 이를 수행하려고 합니다.

.bashrc 파일에는 비인터랙티브 셸에서 실행되는 경우 종료되는 초기 행이 있습니다.

# If not running interactively, don't do anything
case $- in
    *i*) ;;
    *) return;;
esac

따라서 실제로 셸에 nvm 명령을 입력하는 nvm.sh 를 소스로 만들 수 있는 수준에는 도달하지 못합니다.

도커가 상호작용하지 않는 셸에서 이러한 것을 실행한다고 해도 놀라지 않을 것입니다.이것은 명시적으로 지적되지 않았기 때문에, 저는 그것이 제가 부랑자와 비슷한 일을 할 때 저를 발견한 것이기 때문에 그것을 언급할 것이라고 생각했습니다.

이것들 중 어느 것도 나에게 효과가 없었습니다, 나에게.python3-onbuild컨테이너 nvm 설치에 대한 심볼릭 링크를 강제로 생성해야 했습니다.

# Install npm and nodejs
RUN apt-get install -y build-essential libssl-dev

RUN mkdir /root/.nvm
ENV NVM_DIR /root/.nvm
ENV NODE_VERSION 8.9.4

RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.9/install.sh | bash
RUN chmod +x $HOME/.nvm/nvm.sh
RUN . $HOME/.nvm/nvm.sh && nvm install $NODE_VERSION && nvm alias default $NODE_VERSION && nvm use default && npm install -g npm

RUN ln -sf /root/.nvm/versions/node/v$NODE_VERSION/bin/node /usr/bin/nodejs
RUN ln -sf /root/.nvm/versions/node/v$NODE_VERSION/bin/node /usr/bin/node
RUN ln -sf /root/.nvm/versions/node/v$NODE_VERSION/bin/npm /usr/bin/npm

이것이 저에게 효과가 있었습니다(저는 데비안 버스터를 사용하고 있습니다).

RUN apt-get update
RUN apt-get install -y build-essential checkinstall libssl-dev
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash
SHELL ["/bin/bash", "--login", "-c"]

은 이제할수합니다야를 할 수 있을 입니다.nvm install <version>.

이미지 "php:7.4.15"(데비안:buster-slim)를 확장할 때 nodejs의 lts-version을 설치합니다.

# Install nvm to install npm and node.js
ENV NVM_DIR /root/.nvm
ENV NODE_VERSION lts/*
RUN mkdir $HOME/.nvm && \
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash && \
    chmod +x $HOME/.nvm/nvm.sh && \
    . $HOME/.nvm/nvm.sh && \
    nvm install --latest-npm "$NODE_VERSION" && \
    nvm alias default "$NODE_VERSION" && \
    nvm use default && \
    DEFAULT_NODE_VERSION=$(nvm version default) && \
    ln -sf /root/.nvm/versions/node/$DEFAULT_NODE_VERSION/bin/node /usr/bin/nodejs && \
    ln -sf /root/.nvm/versions/node/$DEFAULT_NODE_VERSION/bin/node /usr/bin/node && \
    ln -sf /root/.nvm/versions/node/$DEFAULT_NODE_VERSION/bin/npm /usr/bin/npm

nvm not found컨테이너를 실행하는 사용자가 아닌 다른 사용자를 위해 설치된 경우 발생할 수 있습니다.컨테이너를 실행하는 사용자 정의 사용자를 사용하여 설치 앞에 접두사를 붙여야 할 수 있습니다. 후의최.USER문은 컨테이너 사용자를 정의합니다.

USER $USERNAME

RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

이유

nvm설치 스크립트(예: v0.39.1), 에 설치된 것을 볼 수 있습니다.$HOME현재 사용자의.하지 않은는 " " " 입니다.ubuntu는 이지는입니다.root는, 그나다사로컨테를때시작할너이른,nvm찾을 수 없습니다. 따라서 설치 및 실행 사용자가 정렬되었는지 확인하십시오.

nvm_default_install_dir() {
  [ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm"
}

2022년 업데이트:

https://stackoverflow.com/a/60137919/2047472 을 기반으로 다음을 생각해냈습니다.

FROM python:3.10

RUN touch .profile

SHELL ["/bin/bash", "--login", "-i", "-c"]
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
SHELL ["/bin/bash", "--login", "-c"]

RUN nvm install
RUN node -v
RUN npm -v
  • .nvmrc그리고 소스를 사용하여 nvm을 초기화합니다. nvm.sh 의 버그로 인해 반환 코드 3과 함께 종료되지 않도록 주의하십시오..nvmrc
  • 요 ㅠㅠㅠㅠㅠㅠㅠ.profile존재하지 않았기 때문에 nvm이 활성화되지 않은 경우 이후 RUN 명령에서 nvm이 활성화되지 않습니다.
    • touch .bashrc없었어요 ㅠㅠㅠㅠㅠㅠ

저는 여기 있는 모든 도커 파일을 뒤지는 것이 벅차서, 관련 복사 붙여넣기 가능한 스니펫을 공유하고 싶었습니다.

# Install node and npm
# Installing a specific version of node directly is dificult. Use `nvm` to
# install it (which installs both `node` and `npm`)

ENV NODE_VERSION 14.17.5       # Set this to any desired version
ENV NVM_DIR /usr/local/nvm     # Can be anything, but this is a good default
ENV NVM_VERSION 0.39.3         # Must match one of the tag versions on https://github.com/nvm-sh/nvm/tags

RUN mkdir -p $NVM_DIR \
  && curl https://raw.githubusercontent.com/creationix/nvm/v$NVM_VERSION/install.sh | bash \
  && . $NVM_DIR/nvm.sh \
  && nvm install $NODE_VERSION \
  && nvm alias default $NODE_VERSION \
  && nvm use default \
  && node -v \
  && npm -v

# Update the $PATH to make your installed `node` and `npm` available!
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

여기에 있는 대부분의 정보와 다른 게시물을 테스트한 결과, 제 경우에는 권한 문제와 관련이 있는 것으로 밝혀졌습니다. 예를 들어 root 사용자로 실행되지 않는 한 anpm 프로젝트를 설치하지 못하는 등의 이상한 버그가 발생했습니다. 제 설정은 PHP CMS를 따라 VueJs를 실행하는 것이었습니다. 최종적으로 작동한 부분은 다음과 같습니다.

ENV NVM_DIR $TMP_STORE/nvm
ENV NODE_VERSION 16.15.0

RUN chown -R www-data:www-data /var/www/

USER www-data
RUN export XDG_CONFIG_HOME=$TMP_STORE \
    && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

#RUN chown -R www-data:www-data $NVM_DIR

RUN source $NVM_DIR/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default

ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

RUN npm install -g @vue/cli \
    && npm install -g vue

USER root

전체 도커 구성은 여기에서 확인할 수 있습니다.

또한 CircleCI runner 이미지를 확장하는 도커 파일에 이상한 어려움을 겪었습니다. 이것은 저에게 효과가 있었습니다.

FROM circleci/runner:launch-agent
SHELL ["/bin/bash", "--login", "-c"]

USER $USERNAME

RUN wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash;

ENV NODE_VERSION 18.12.1

ENV NVM_DIR $HOME/.nvm

RUN \
    . ~/.nvm/nvm.sh \
    && nvm install $NODE_VERSION \
    && nvm alias default $NODE_VERSION \
    && nvm use default;


ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules
ENV PATH      $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH

RUN npm -v
RUN node -v

2023년 개발 계획서로 사용

개발컨너를사시기환작고설위다사다니습용했음해에기정하경을테이를 했습니다.Dockcerfile제가 설명한 목적과 완벽하게 일치합니다.저는 이것을 이루기 위해 힘든 시간을 보내기 때문에 이것을 공유합니다.

FROM ubuntu:22.04
ENV HOME="/root"
ENV NVM_DIR="${HOME}/.nvm"
ENV NVM_VERSION=v0.39.3
ENV NODE_VERSION=18

RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential\
        libssl-dev \
        git \
        curl \
        ca-certificates \
    && git clone https://github.com/nvm-sh/nvm.git "${NVM_DIR}" 
WORKDIR  "${NVM_DIR}"
RUN git checkout ${NVM_VERSION} \
    && \. "./nvm.sh" \
    && nvm install "${NODE_VERSION}" \
    && echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> "${HOME}/.bashrc" \
    && echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> "${HOME}/.bashrc"  

WORKDIR "${HOME}"

이것은 bash와 함께 작동하기 위한 것입니다(다른 종류의 셸과 작동하는지는 모르겠습니다).이미지를 실행하는 데 사용한 명령은 다음과 같습니다.

 docker run -ti --rm --name node_test <your-image-name | id-image> /bin/bash

알파인 기반 이미지에서 NVM이 제대로 작동하도록 하는 데 정말 어려움을 겪었습니다.저는 결국 공식 노드 알파인 이미지에서 공유 디렉터리를 여러 개 복사했습니다.지금까지는 꽤 잘 작동하는 것 같습니다.

# Dockerfile

###############################################################################
# https://docs.docker.com/develop/develop-images/multistage-build/
# Builder Image
# This image is intended to build the app source code, not to run it.
###############################################################################
FROM node:16-alpine as builder

WORKDIR /build-tmp

COPY ./dist/src/yarn.lock .
COPY ./dist/src/package.json .
RUN yarn install --production

###############################################################################
# Execution image
# Nothing from the builder image is included here unless explicitly copied
###############################################################################
FROM osgeo/gdal:alpine-normal-3.4.2

# It's seemingly very difficult to build a specific version of node in an Alpine linux
# image, so let's copy node from the builder image into this execution image!
COPY --from=builder /usr/lib /usr/lib
COPY --from=builder /usr/local/share /usr/local/share
COPY --from=builder /usr/local/lib /usr/local/lib
COPY --from=builder /usr/local/include /usr/local/include
COPY --from=builder /usr/local/bin /usr/local/bin

...

CMD ["node", "main"]

최근에 사용한 솔루션은 다음과 같습니다.

# Install nvm/Node.js
ENV NVM_VERSION=0.39.1
ENV NODE_VERSION=16.17.1
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v$NVM_VERSION/install.sh | bash
RUN bash --login -c "nvm install $NODE_VERSION"

# Do whatever with nvm
RUN bash --login -c "nvm use $NODE_VERSION && npm [...]"

sh 셸만 설치되거나 sh 셸에 의존하는 사람들을 위한 또 다른 깨끗한 솔루션.이 솔루션과 다른 솔루션의 차이점은 노드 빈을 다른 셸에서 사용할 수 있도록 PATH를 변경해야 한다는 점입니다.도움이 되길 바랍니다.

# install node with nvm and within bash, then carry node bin to sh
SHELL ["/bin/bash", "--login", "-c"]
ENV NODE 14.21.3 
ENV NODE_BIN /root/.nvm/versions/node/v$NODE/bin/
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
RUN nvm install $NODE
ENV PATH="${PATH}:${NODE_BIN}"
SHELL ["/bin/sh", "-c"]

14.21.3 및 0.39.3을 원하는 노드 및 nvm 버전으로 교체

언급URL : https://stackoverflow.com/questions/25899912/how-to-install-nvm-in-docker