feat: refactor dockerfiles

* combine dev and prod into multi-stages dockerfile
* replace node with node:20-alpine to reduce image size
This commit is contained in:
Lin, Hung-Shin authored and wancat committed 2023-10-29 17:41:38 +08:00
1 parent 625c1a80da
commit 579d53a273
10 files changed
+58 -66

No files matched your search

+3
View File
@@ -69,6 +69,7 @@ jobs:
with: with:
context: . context: .
file: ./server/Dockerfile file: ./server/Dockerfile
target: prod
push: true push: true
tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:backend tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:backend
@@ -77,6 +78,7 @@ jobs:
with: with:
context: . context: .
file: ./app/Dockerfile file: ./app/Dockerfile
target: prod
push: true push: true
tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:app tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:app
@@ -85,6 +87,7 @@ jobs:
with: with:
context: . context: .
file: ./packages/analytics/Dockerfile file: ./packages/analytics/Dockerfile
target: prod
push: true push: true
tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:analytics tags: docker.io/${{ secrets.DOCKERHUB_USERNAME }}/linux-odyssey:analytics
+11 -4
View File
@@ -1,5 +1,5 @@
# Build stage # Base stage
FROM node as build-stage FROM node:20-alpine as base
WORKDIR /app WORKDIR /app
COPY package.json yarn.lock ./ COPY package.json yarn.lock ./
COPY app/package.json ./app/package.json COPY app/package.json ./app/package.json
@@ -7,14 +7,21 @@ COPY packages/file-graph/package.json ./packages/file-graph/package.json
COPY packages/utils/package.json ./packages/utils/package.json COPY packages/utils/package.json ./packages/utils/package.json
RUN yarn install --frozen-lockfile RUN yarn install --frozen-lockfile
# Dev stage
FROM base as dev
WORKDIR /app/app
CMD [ "yarn", "dev:docker", "--host", "0.0.0.0" ]
# Build stage
FROM base as build
COPY app ./app COPY app ./app
COPY packages/file-graph ./packages/file-graph COPY packages/file-graph ./packages/file-graph
COPY packages/utils ./packages/utils COPY packages/utils ./packages/utils
RUN yarn build RUN yarn build
# Production stage # Production stage
FROM nginx:stable-alpine as production-stage FROM nginx:stable-alpine as prod
COPY --from=build-stage /app/app/dist /usr/share/nginx/html COPY --from=build /app/app/dist /usr/share/nginx/html
COPY deployment/nginx.conf /etc/nginx/conf.d/default.conf COPY deployment/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80 EXPOSE 80
CMD ["nginx", "-g", "daemon off;"] CMD ["nginx", "-g", "daemon off;"]
-11
View File
@@ -1,11 +0,0 @@
FROM node
WORKDIR /app
COPY package.json yarn.lock ./
COPY app/package.json ./app/package.json
COPY packages/file-graph/package.json ./packages/file-graph/package.json
COPY packages/utils/package.json ./packages/utils/package.json
RUN yarn install --frozen-lockfile
WORKDIR /app/app
CMD [ "yarn", "dev:docker", "--host", "0.0.0.0" ]
+3
View File
@@ -5,6 +5,7 @@ services:
build: build:
context: . context: .
dockerfile: app/Dockerfile dockerfile: app/Dockerfile
target: prod
networks: networks:
internal: internal:
ports: ports:
@@ -15,6 +16,7 @@ services:
build: build:
context: . context: .
dockerfile: server/Dockerfile dockerfile: server/Dockerfile
target: prod
networks: networks:
- internal - internal
- players - players
@@ -31,6 +33,7 @@ services:
build: build:
context: . context: .
dockerfile: packages/analytics/Dockerfile dockerfile: packages/analytics/Dockerfile
target: prod
depends_on: depends_on:
- db - db
networks: networks:
+2
View File
@@ -17,6 +17,7 @@ services:
build: build:
context: . context: .
dockerfile: app/Dockerfile dockerfile: app/Dockerfile
target: prod
networks: networks:
internal: internal:
ports: ports:
@@ -29,6 +30,7 @@ services:
build: build:
context: . context: .
dockerfile: server/Dockerfile dockerfile: server/Dockerfile
target: prod
depends_on: depends_on:
- db-test - db-test
networks: networks:
+6 -3
View File
@@ -5,7 +5,8 @@ services:
- backend - backend
build: build:
context: . context: .
dockerfile: app/Dockerfile.dev dockerfile: app/Dockerfile
target: dev
ports: ports:
- 5173:5173 - 5173:5173
networks: networks:
@@ -18,7 +19,8 @@ services:
- db - db
build: build:
context: . context: .
dockerfile: server/Dockerfile.dev dockerfile: server/Dockerfile
target: dev
networks: networks:
- internal - internal
- players - players
@@ -43,7 +45,8 @@ services:
analytics: analytics:
build: build:
context: . context: .
dockerfile: packages/analytics/Dockerfile.dev dockerfile: packages/analytics/Dockerfile
target: dev
depends_on: depends_on:
- db - db
networks: networks:
+14 -8
View File
@@ -1,19 +1,25 @@
FROM node FROM node:20-alpine as build
WORKDIR /app WORKDIR /app
COPY ./package.json yarn.lock ./ COPY ./package.json yarn.lock ./
COPY packages/analytics/package.json ./packages/analytics/package.json COPY packages/analytics/package.json ./packages/analytics/package.json
COPY packages/models/package.json ./packages/models/package.json COPY packages/models/package.json ./packages/models/package.json
RUN yarn install --frozen-lockfile --production RUN yarn install --frozen-lockfile --production
COPY packages/analytics ./packages/analytics
COPY packages/models ./packages/models
WORKDIR /app/packages/analytics
ENV NODE_ENV=production
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0
ENV PORT=3001 ENV PORT=3001
EXPOSE 3001 EXPOSE 3001
# Production stage
FROM build as prod
COPY packages/analytics ./packages/analytics
COPY packages/models ./packages/models
ENV NODE_ENV=production
WORKDIR /app/packages/analytics
CMD [ "yarn", "start" ] CMD [ "yarn", "start" ]
# Development stage
FROM build as dev
RUN yarn install --frozen-lockfile
WORKDIR /app/packages/analytics
ENV NODE_ENV=development
CMD [ "yarn", "dev" ]
-16
View File
@@ -1,16 +0,0 @@
FROM node
WORKDIR /app
COPY ./package.json yarn.lock ./
COPY packages/analytics/package.json ./packages/analytics/package.json
COPY packages/models/package.json ./packages/models/package.json
RUN yarn install --frozen-lockfile
WORKDIR /app/packages/analytics
ENV NODE_ENV=development
ENV HOST=0.0.0.0
ENV PORT=3001
EXPOSE 3001
CMD [ "yarn", "dev" ]
+19 -6
View File
@@ -1,4 +1,4 @@
FROM node FROM node:20-alpine AS build
WORKDIR /app WORKDIR /app
COPY ./package.json yarn.lock ./ COPY ./package.json yarn.lock ./
@@ -8,17 +8,30 @@ COPY packages/utils/package.json ./packages/utils/package.json
COPY packages/models/package.json ./packages/models/package.json COPY packages/models/package.json ./packages/models/package.json
RUN yarn install --frozen-lockfile --production RUN yarn install --frozen-lockfile --production
ENV HOST=0.0.0.0
ENV PORT=3000
EXPOSE 3000
# Production
FROM build as prod
COPY ./server ./server COPY ./server ./server
COPY packages/file-graph ./packages/file-graph COPY packages/file-graph ./packages/file-graph
COPY packages/utils ./packages/utils COPY packages/utils ./packages/utils
COPY packages/models ./packages/models COPY packages/models ./packages/models
COPY quests ./quests COPY quests ./quests
ENV NODE_ENV=production
WORKDIR /app/server WORKDIR /app/server
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=3000
EXPOSE 3000
CMD [ "yarn", "start" ] CMD [ "yarn", "start" ]
# Development
FROM build as dev
RUN yarn install --frozen-lockfile
ENV NODE_ENV=development
CMD [ "yarn", "server" ]
-18
View File
@@ -1,18 +0,0 @@
FROM node
WORKDIR /app
COPY package.json yarn.lock ./
COPY server/package.json ./server/package.json
COPY packages/file-graph/package.json ./packages/file-graph/package.json
COPY packages/utils/package.json ./packages/utils/package.json
COPY packages/models/package.json ./packages/models/package.json
RUN yarn install --frozen-lockfile
COPY server/nodemon.json ./server/nodemon.json
ENV NODE_ENV=development
ENV HOST=0.0.0.0
ENV PORT=3000
EXPOSE 3000
CMD [ "yarn", "server" ]