Skip to content

Commit

Permalink
feat: Optimize Dockerfile (outline#2337)
Browse files Browse the repository at this point in the history
* feat: optimize dockerfile
use new dockerfile syntaxes
leverage multi-stage builds
strip yarn cache from image
use stricter yarn install command
run as a non-root user

* fix: mark yarn-deduplicate as a required dep
`yarn --production` will fail on a clean install otherwise

* fix: add sequelize required files for migrations

* fix: use correct ARG syntax for multistage builds

* revert: mark yarn-deduplicate as a required dep
no longer required as of 0b3adad
  • Loading branch information
luludotdev authored Aug 3, 2021
1 parent c81c9a9 commit 52fc861
Showing 1 changed file with 38 additions and 12 deletions.
50 changes: 38 additions & 12 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,23 +1,49 @@
FROM node:14-alpine

ENV APP_PATH /opt/outline
RUN mkdir -p $APP_PATH
# syntax=docker/dockerfile:1.2
ARG APP_PATH=/opt/outline
FROM node:14-alpine AS deps-common

ARG APP_PATH
WORKDIR $APP_PATH
COPY ./package.json ./yarn.lock ./

# ---
FROM deps-common AS deps-dev
RUN yarn install --no-optional --frozen-lockfile && \
yarn cache clean

COPY package.json ./
COPY yarn.lock ./
# ---
FROM deps-common AS deps-prod
RUN yarn install --production=true --frozen-lockfile && \
yarn cache clean

RUN yarn --pure-lockfile
# ---
FROM node:14-alpine AS builder

ARG APP_PATH
WORKDIR $APP_PATH

COPY . .
COPY --from=deps-dev $APP_PATH/node_modules ./node_modules
RUN yarn build

RUN yarn build && \
yarn --production --ignore-scripts --prefer-offline && \
rm -rf shared && \
rm -rf app
# ---
FROM node:14-alpine AS runner

ARG APP_PATH
WORKDIR $APP_PATH
ENV NODE_ENV production
CMD yarn start

COPY --from=builder $APP_PATH/build ./build
COPY --from=builder $APP_PATH/server ./server
COPY --from=builder $APP_PATH/.sequelizerc ./.sequelizerc
COPY --from=deps-prod $APP_PATH/node_modules ./node_modules
COPY --from=builder $APP_PATH/package.json ./package.json

RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001 && \
chown -R nodejs:nodejs $APP_PATH/build

USER nodejs

EXPOSE 3000
CMD ["yarn", "start"]

0 comments on commit 52fc861

Please sign in to comment.