私は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内にどのようにインストールするのですか?
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
これは少し良く機能すると思います。
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
次の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です。
ノード画像を取得し、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