mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-04-24 03:00:09 -04:00
Docker image size optimization (#910)
* build(docker): use slim base images * build(docker): create new stages that only include necessary files * build(docker): delete devDependencies after build * build(docker): move env vars to a later point for better caching
This commit is contained in:
@@ -1,11 +1,8 @@
|
||||
FROM node:14 as base
|
||||
FROM node:14-slim as base
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ARG GRAPHQL_HOST
|
||||
ARG GRAPHQL_DOMAIN=onrender.com
|
||||
|
||||
ENV GRAPHQL_URL https://$GRAPHQL_HOST.$GRAPHQL_DOMAIN/v1/graphql
|
||||
ENV HASURA_GRAPHQL_ADMIN_SECRET metagame_secret
|
||||
# Install dependencies not included in the slim image
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python
|
||||
|
||||
# Install dependencies for dev and prod
|
||||
COPY package.json .
|
||||
@@ -28,7 +25,35 @@ COPY packages/utils ./packages/utils/
|
||||
COPY packages/discord-bot ./packages/discord-bot/
|
||||
COPY packages/@types ./packages/@types/
|
||||
|
||||
# Set env vars
|
||||
ARG GRAPHQL_HOST
|
||||
ARG GRAPHQL_DOMAIN=onrender.com
|
||||
|
||||
ENV GRAPHQL_URL https://$GRAPHQL_HOST.$GRAPHQL_DOMAIN/v1/graphql
|
||||
ENV HASURA_GRAPHQL_ADMIN_SECRET metagame_secret
|
||||
|
||||
# Build
|
||||
RUN yarn backend:build
|
||||
|
||||
# Delete devDependencies
|
||||
RUN yarn install --pure-lockfile --production --ignore-scripts --prefer-offline
|
||||
|
||||
# Create completely new stage including only necessary files
|
||||
FROM node:14-alpine as app
|
||||
WORKDIR /app
|
||||
|
||||
# Copy necessary files into the stage
|
||||
COPY --from=build /usr/src/app/package.json ./package.json
|
||||
COPY --from=build /usr/src/app/node_modules ./node_modules
|
||||
|
||||
COPY --from=build /usr/src/app/packages/backend/package.json ./packages/backend/package.json
|
||||
COPY --from=build /usr/src/app/packages/backend/dist ./packages/backend/dist
|
||||
|
||||
COPY --from=build /usr/src/app/packages/utils/package.json ./packages/utils/package.json
|
||||
COPY --from=build /usr/src/app/packages/utils/dist ./packages/utils/dist
|
||||
COPY --from=build /usr/src/app/packages/utils/node_modules ./packages/utils/node_modules
|
||||
|
||||
COPY --from=build /usr/src/app/packages/discord-bot/package.json ./packages/discord-bot/package.json
|
||||
COPY --from=build /usr/src/app/packages/discord-bot/dist ./packages/discord-bot/dist
|
||||
|
||||
CMD [ "yarn", "backend", "start" ]
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
FROM node:12 as base
|
||||
FROM node:12-slim as base
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ARG GRAPHQL_HOST
|
||||
|
||||
ENV GRAPHQL_URL https://$GRAPHQL_HOST.onrender.com/v1/graphql
|
||||
ENV HASURA_GRAPHQL_ADMIN_SECRET metagame_secret
|
||||
# Install dependencies not included in the slim image
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python
|
||||
|
||||
# Install dependencies for dev and prod
|
||||
COPY package.json .
|
||||
@@ -25,9 +23,32 @@ COPY packages/discord-bot ./packages/discord-bot/
|
||||
COPY packages/utils ./packages/utils/
|
||||
COPY packages/@types ./packages/@types/
|
||||
|
||||
# Set env vars
|
||||
ARG GRAPHQL_HOST
|
||||
|
||||
ENV GRAPHQL_URL https://$GRAPHQL_HOST.onrender.com/v1/graphql
|
||||
ENV HASURA_GRAPHQL_ADMIN_SECRET metagame_secret
|
||||
ENV RUNTIME_ENV docker
|
||||
|
||||
# Build
|
||||
RUN yarn discord-bot build
|
||||
|
||||
ENV RUNTIME_ENV=docker
|
||||
# Delete devDependencies
|
||||
RUN yarn install --pure-lockfile --production --ignore-scripts --prefer-offline
|
||||
|
||||
# Create completely new stage including only necessary files
|
||||
FROM node:12-alpine as app
|
||||
WORKDIR /app
|
||||
|
||||
# Copy necessary files into the stage
|
||||
COPY --from=build /usr/src/app/package.json ./package.json
|
||||
COPY --from=build /usr/src/app/node_modules ./node_modules
|
||||
|
||||
COPY --from=build /usr/src/app/packages/discord-bot/package.json ./packages/discord-bot/package.json
|
||||
COPY --from=build /usr/src/app/packages/discord-bot/dist ./packages/discord-bot/dist
|
||||
|
||||
COPY --from=build /usr/src/app/packages/utils/package.json ./packages/utils/package.json
|
||||
COPY --from=build /usr/src/app/packages/utils/dist ./packages/utils/dist
|
||||
COPY --from=build /usr/src/app/packages/utils/node_modules ./packages/utils/node_modules
|
||||
|
||||
CMD [ "yarn", "discord-bot", "start" ]
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
FROM node:14 as base
|
||||
FROM node:14-slim as base
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ARG GRAPHQL_HOST
|
||||
ARG GRAPHQL_DOMAIN=onrender.com
|
||||
|
||||
ENV NEXT_PUBLIC_GRAPHQL_URL https://$GRAPHQL_HOST.$GRAPHQL_DOMAIN/v1/graphql
|
||||
# Install dependencies not included in the slim image
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends g++ make python git ca-certificates
|
||||
|
||||
# Install dependencies for dev and prod
|
||||
COPY package.json .
|
||||
@@ -31,7 +29,35 @@ COPY packages/utils ./packages/utils/
|
||||
COPY packages/design-system ./packages/design-system/
|
||||
COPY packages/@types ./packages/@types/
|
||||
|
||||
# Set env vars
|
||||
ARG GRAPHQL_HOST
|
||||
ARG GRAPHQL_DOMAIN=onrender.com
|
||||
|
||||
ENV NEXT_PUBLIC_GRAPHQL_URL https://$GRAPHQL_HOST.$GRAPHQL_DOMAIN/v1/graphql
|
||||
|
||||
# Build
|
||||
RUN yarn web:build
|
||||
|
||||
# Delete devDependencies
|
||||
RUN yarn install --pure-lockfile --production --ignore-scripts --prefer-offline
|
||||
|
||||
# Create completely new stage including only necessary files
|
||||
FROM node:14-alpine as app
|
||||
WORKDIR /app
|
||||
|
||||
# Copy necessary files into the stage
|
||||
COPY --from=build /usr/src/app/package.json ./package.json
|
||||
COPY --from=build /usr/src/app/node_modules ./node_modules
|
||||
|
||||
COPY --from=build /usr/src/app/packages/web/package.json ./packages/web/package.json
|
||||
COPY --from=build /usr/src/app/packages/web/public ./packages/web/public
|
||||
COPY --from=build /usr/src/app/packages/web/.next ./packages/web/.next
|
||||
|
||||
COPY --from=build /usr/src/app/packages/utils/package.json ./packages/utils/package.json
|
||||
COPY --from=build /usr/src/app/packages/utils/dist ./packages/utils/dist
|
||||
COPY --from=build /usr/src/app/packages/utils/node_modules ./packages/utils/node_modules
|
||||
|
||||
COPY --from=build /usr/src/app/packages/design-system/package.json ./packages/design-system/package.json
|
||||
COPY --from=build /usr/src/app/packages/design-system/dist ./packages/design-system/dist
|
||||
|
||||
CMD [ "yarn", "web", "start" ]
|
||||
|
||||
Reference in New Issue
Block a user