web-dev-qa-db-ja.com

Dockerfileにノードをインストールしますか?

私はAWS Elastic 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内にどのようにインストールするのですか?

13
Delirium

apt-get install nodeを実行しても、Node.jsはインストールされません。これは、目的のパッケージではないためです。

apt-cache info nodeを実行すると、インストールしているものが「Amateur Packet Radio Node program(transitional package)」であることがわかります。

パッケージマネージャー経由でインストールするには、 Node.jsインストール手順 に従う必要があります。

または、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
11

これは少し良く機能すると思います。

    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

7
Nathan

次のDockerfileを使用してノードバージョン8.10.0をセットアップしています。

ここではNVM(Node Version Manager)を使用しているため、そのコンテナにインストールするノードのバージョンを選択できます。ノードモジュールをインストールするときは、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です。

4
Sijo M Cyril

ノード画像を取得し、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
0
gulp