From 838d87349884d58ea2c363c631744068bad69a21 Mon Sep 17 00:00:00 2001 From: Eyal Zekaria Date: Fri, 9 Mar 2018 11:38:08 +0100 Subject: [PATCH 1/2] Symlink yarn directory this will allow for an easier upgrade/downgrade of yarn, e.g: ``` FROM node:6-slim ENV YARN_VERSION 1.5.1 RUN curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" &&\ tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ &&\ ln -snf /opt/yarn-v$YARN_VERSION /opt/yarn &&\ rm yarn-v$YARN_VERSION.tar.gz ``` --- Dockerfile-alpine.template | 4 ++-- Dockerfile-slim.template | 4 ++-- Dockerfile-stretch.template | 4 ++-- Dockerfile-wheezy.template | 4 ++-- Dockerfile.template | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Dockerfile-alpine.template b/Dockerfile-alpine.template index 4c5623a0..4422fa47 100644 --- a/Dockerfile-alpine.template +++ b/Dockerfile-alpine.template @@ -58,8 +58,8 @@ RUN apk add --no-cache --virtual .build-deps-yarn curl gnupg tar \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ - && mkdir -p /opt/yarn \ - && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION /opt/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ diff --git a/Dockerfile-slim.template b/Dockerfile-slim.template index 95cf72a6..ae0793b9 100644 --- a/Dockerfile-slim.template +++ b/Dockerfile-slim.template @@ -58,8 +58,8 @@ RUN set -ex \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ - && mkdir -p /opt/yarn \ - && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION /opt/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz diff --git a/Dockerfile-stretch.template b/Dockerfile-stretch.template index a9a2fc59..6f19543b 100644 --- a/Dockerfile-stretch.template +++ b/Dockerfile-stretch.template @@ -53,8 +53,8 @@ RUN set -ex \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ - && mkdir -p /opt/yarn \ - && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION /opt/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz diff --git a/Dockerfile-wheezy.template b/Dockerfile-wheezy.template index 397233e3..42b6bbfa 100644 --- a/Dockerfile-wheezy.template +++ b/Dockerfile-wheezy.template @@ -49,8 +49,8 @@ RUN set -ex \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ - && mkdir -p /opt/yarn \ - && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION /opt/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz diff --git a/Dockerfile.template b/Dockerfile.template index c6249db3..d738b502 100644 --- a/Dockerfile.template +++ b/Dockerfile.template @@ -53,8 +53,8 @@ RUN set -ex \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ && curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz.asc" \ && gpg --batch --verify yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz \ - && mkdir -p /opt/yarn \ - && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/yarn --strip-components=1 \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -s /opt/yarn-v$YARN_VERSION /opt/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \ && ln -s /opt/yarn/bin/yarn /usr/local/bin/yarnpkg \ && rm yarn-v$YARN_VERSION.tar.gz.asc yarn-v$YARN_VERSION.tar.gz From 926d446701b9dbffe09e10d49235ee3d26a18321 Mon Sep 17 00:00:00 2001 From: Eyal Zekaria Date: Fri, 9 Mar 2018 11:38:53 +0100 Subject: [PATCH 2/2] Update README.md with an example on how to upgrade/downgrade yarn version --- docs/BestPractices.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/BestPractices.md b/docs/BestPractices.md index 0d97f4c5..d77f37cb 100644 --- a/docs/BestPractices.md +++ b/docs/BestPractices.md @@ -29,6 +29,21 @@ ENV NPM_CONFIG_PREFIX=/home/node/.npm-global ENV PATH=$PATH:/home/node/.npm-global/bin # optionally if you want to run npm global bin without specifying path ``` +## Upgrading/downgrading Yarn + +If you need to upgrade/downgrade `yarn`, you can do so by issuing the following commands in your `Dockerfile`: + +```Dockerfile +FROM node:6 + +ENV YARN_VERSION 1.5.1 + +RUN curl -fSLO --compressed "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \ + && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \ + && ln -snf /opt/yarn-v$YARN_VERSION /opt/yarn \ + && rm yarn-v$YARN_VERSION.tar.gz +``` + ## Handling Kernel Signals Node.js was not designed to run as PID 1 which leads to unexpected behaviour when running inside of Docker. For example, a Node.js process running as PID 1 will not respond to `SIGTERM` (`CTRL-C`) and similar signals. As of Docker 1.13, you can use the `--init` flag to wrap your Node.js process with a [lightweight init system](https://github.com/krallin/tini) that properly handles running as PID 1.