在Dockerfile中安装节点?

时间:2016-04-04 10:10:56

标签: node.js amazon-web-services jenkins docker less

我是AWS弹性beanstalk的用户,我有一点问题。我想用less + node构建我的CSS文件。但是在使用jenkins构建时,我不知道如何在dockerfile中安装节点。

这是我在docker中使用的安装包。我会很高兴有任何建议。

FROM php:5.6-apache


# Install PHP5 and modules along with composer binary
RUN apt-get update
RUN apt-get -y install \
    curl \
    default-jdk \
    git \
    libcurl4-openssl-dev \
    libpq-dev \
    libmcrypt-dev \
    libpq5 \
    npm \
    node \
    zlib1g-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng12-dev

RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

RUN docker-php-ext-install curl json mbstring opcache pdo_mysql zip gd exif sockets mcrypt

# Install pecl
RUN pecl install -o -f memcache-beta \
    && rm -rf /tmp/pear \
    && echo 'extension=memcache.so' > /usr/local/etc/php/conf.d/memcache.ini

在此之后,我运行带有代码

的entrypoint.sh
#!/usr/bin/env sh

composer run-script post-install-cmd --no-interaction

chmod 0777 -R /var/app/app/cache
chmod 0777 -R /var/app/app/logs

exec apache2-foreground

但后来我得到了这个错误

 Error Output: [2016-04-04 11:23:44] assetic.ERROR: The template ":tmp:module.html.twig" contains an error: A template that extends another one cannot have a body in ":tmp:module.ht  
  ml.twig" at line 7.     

但是当我以这种方式安装在Docker容器节点内时

apt-get install git-core curl build-essential openssl libssl-dev
 git clone https://github.com/nodejs/node.git
 cd node
 ./configure
 make
 sudo make install
 node -v

我可以构建我的CSS。所以问题是..当我使用Jenkins构建它时,上面的安装如何在我的Dockerfile中安装?

9 个答案:

答案 0 :(得分:6)

运行apt-get install node 不会安装Node.js ,因为那不是您要求的软件包。

如果您运行apt-cache info node,您可以看到您正在安装的是“业余分组无线电节点程序(过渡包)”

您应该按照the Node.js install instructions通过软件包管理器进行安装。

或者,如果您喜欢使用git构建,您可以在Docker中执行此操作:

RUN apt-get install git-core curl build-essential openssl libssl-dev \
 && git clone https://github.com/nodejs/node.git \
 && cd node \
 && ./configure \
 && make \
 && sudo make install

答案 1 :(得分:5)

二进制下载,无需任何编译

FROM ubuntu

RUN apt-get update && apt-get install -y \
  ca-certificates \
  curl

ARG NODE_VERSION=14.16.0
ARG NODE_PACKAGE=node-v$NODE_VERSION-linux-x64
ARG NODE_HOME=/opt/$NODE_PACKAGE

ENV NODE_PATH $NODE_HOME/lib/node_modules
ENV PATH $NODE_HOME/bin:$PATH

RUN curl https://nodejs.org/dist/v$NODE_VERSION/$NODE_PACKAGE.tar.gz | tar -xzC /opt/

# comes with npm
# RUN npm install -g typescript

答案 2 :(得分:4)

获取节点映像并将其放在dockerfile的顶部:

FROM node:[tag_name] AS [alias_name]

通过添加以下代码来验证版本:

RUN echo "NODE Version:" && node --version
RUN echo "NPM Version:" && npm --version

然后,每次需要在容器中使用nodejs时,添加以下代码:

COPY --from=[alias_name] . .


从上面的代码中,将以下内容替换为:

[tag_name] -您要使用的节点图像的标签值。访问https://hub.docker.com/_/node?tab=tags以获得可用标签的列表。

[alias_name] -您要在dockerfile中使用的首选映像名称。


示例:

FROM node:latest AS node_base

RUN echo "NODE Version:" && node --version
RUN echo "NPM Version:" && npm --version


FROM php:5.6-apache

COPY --from=node_base . .

### OTHER CODE GOES HERE

答案 3 :(得分:4)

根据 following 的回答,我建议通过 npm 包使用 n,它可以让您选择 nodejs 版本,或者使用 latest 标签或lts 标签。例如latest

RUN apt-get update && apt-get install -y \
    software-properties-common \
    npm
RUN npm install npm@latest -g && \
    npm install n -g && \
    n latest

答案 4 :(得分:2)

我正在使用以下Dockerfile设置节点版本8.10.0。

在这里,我已使用 NVM(节点版本管理器),因此我们可以选择应在该容器上安装哪个节点版本。安装节点模块时,请使用npm的绝对路径(例如:/root/.nvm/versions/node/v${NODE_VERSION}/bin/npm install leasot @ latest -g)

   FROM ubuntu:18.04
   ENV NODE_VERSION=8.10.0
   RUN apt-get update && \
       apt-get install wget curl ca-certificates rsync -y
   RUN wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
   ENV NVM_DIR=/root/.nvm
   RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
   RUN . "$NVM_DIR/nvm.sh" &&  nvm use v${NODE_VERSION}
   RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
   RUN cp /root/.nvm/versions/node/v${NODE_VERSION}/bin/node /usr/bin/
   RUN cp /root/.nvm/versions/node/v${NODE_VERSION}/bin/npm /usr/bin/
   RUN /root/.nvm/versions/node/v${NODE_VERSION}/bin/npm install  leasot@latest -g

注意:这是裁剪过的Dockerfile。

答案 5 :(得分:2)

我认为这样做效果更好。

    ENV NODE_VERSION=12.6.0
    RUN apt install -y curl
    RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
    ENV NVM_DIR=/root/.nvm
    RUN . "$NVM_DIR/nvm.sh" && nvm install ${NODE_VERSION}
    RUN . "$NVM_DIR/nvm.sh" && nvm use v${NODE_VERSION}
    RUN . "$NVM_DIR/nvm.sh" && nvm alias default v${NODE_VERSION}
    ENV PATH="/root/.nvm/versions/node/v${NODE_VERSION}/bin/:${PATH}"
    RUN node --version
    RUN npm --version

答案 6 :(得分:1)

接受的答案提供了指向 installation instructions for all systems 的链接,但它不会开箱即用,因为您通常(例如对于 ubuntu)没有安装所有必需的依赖项(即 curlsudo)。

例如,您将如何为 ubuntu 执行此操作:

FROM ubuntu

# Core dependencies
RUN apt-get update && apt-get install -y curl sudo

# Node
# Uncomment your target version
# RUN curl -fsSL https://deb.nodesource.com/setup_10.x | sudo -E bash -
# RUN curl -fsSL https://deb.nodesource.com/setup_12.x | sudo -E bash -
# RUN curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
# RUN curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
RUN sudo apt-get install -y nodejs
RUN echo "NODE Version:" && node --version
RUN echo "NPM Version:" && npm --version

然后构建

docker build . --progress=plain

查看 echo 语句的输出。当然,在确保一切按预期工作后,您也可以不使用 echo 语句并使用 docker build . 定期运行它。

您也可以不安装 sudo,但之后您必须删除脚本中出现的 sudo

答案 7 :(得分:0)

截图回答,例如安装v14.17.1

ENV PATH="/opt/node-v14.17.1-linux-x64/bin:${PATH}"
RUN curl https://nodejs.org/dist/v14.17.1/node-v14.17.1-linux-x64.tar.gz |tar xzf - -C /opt/ 

答案 8 :(得分:0)

只有两行

RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - 
RUN apt-get install -y nodejs