-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile
196 lines (127 loc) · 4.56 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
FROM node:18-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
else echo "Lockfile not found." && exit 1; \
fi
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN yarn build
# If using npm comment out above and use below instead
# RUN npm run build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]
# # Base on offical Node.js Alpine image
# FROM node:18-alpine
# # Set working directory
# WORKDIR /app
# # Copy package.json and package-lock.json before other files
# # Utilise Docker cache to save re-installing dependencies if unchanged
# COPY ./package*.json ./
# # Install dependencies
# RUN npm install --production
# # Copy all files
# COPY ./ ./
# # Build app
# RUN npm run build
# # Expose the listening port
# EXPOSE 3000
# # Run container as non-root (unprivileged) user
# # The node user is provided in the Node.js Alpine base image
# USER node
# # Run npm start script when container starts
# CMD [ "npm", "start" ]
# FROM node:18-alpine as build
# WORKDIR /app
# COPY package.json /app/package.json
# RUN npm install --only=prod
# COPY . .
# RUN npm run build
# # Creating nginx image and copy build folder from above
# # FROM nginx:1.16.0-alpine
# FROM nginx:stable-alpine
# RUN rm -rf /usr/share/nginx/html/*
# COPY --from=builder /app/out /usr/share/nginx/html
# RUN rm /etc/nginx/conf.d/default.conf
# COPY nginx/nginx.conf /etc/nginx/conf.d
# EXPOSE 80
# CMD ["nginx", "-g", "daemon off;"]
# FROM node:18-alpine AS base
# FROM base AS deps
# RUN apk add --no-cache libc6-compat
# WORKDIR /bookit
# COPY package.json package-lock.json* ./
# RUN \
# if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
# elif [ -f package-lock.json ]; then npm ci; \
# elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
# else echo "Lockfile not found." && exit 1; \
# fi
# FROM base AS builder
# WORKDIR /bookit
# COPY --from=deps /bookit/node_modules ./node_modules
# COPY . .
# RUN npm run build
# FROM base AS runner
# WORKDIR /bookit
# RUN addgroup --system --gid 1001 nodejs
# RUN adduser --system --uid 1001 nextjs
# COPY --from=builder /bookit/public ./public
# COPY --from=builder --chown=nextjs:nodejs /bookit/.next/standalone ./
# COPY --from=builder --chown=nextjs:nodejs /bookit/.next/static ./.next/static
# USER nextjs
# EXPOSE 3000
# CMD ["node", "server.js"]
# FROM nginx:1.22.1-alpine
# RUN mkdir /usr/share/nginx/buffer
# COPY --from=build /bookit/.next /usr/share/nginx/html
# RUN rm /etc/nginx/conf.d/default.conf
# COPY nginx/nginx.conf /etc/nginx/conf.d
# EXPOSE 80
# CMD ["nginx","-g","daemon off;"]
# WORKDIR /bookit
# COPY . .
# COPY --from=deps /bookit/node_modules ./node_modules
# RUN npm run build
# FROM node:alpine AS runner
# ENV NODE_ENV production
# COPY --from=builder /bookit/public ./public
# COPY --from=builder /bookit/.next ./.next
# COPY --from=builder /bookit/node_modules ./node_modules
# COPY --from=builder /bookit/package.json ./package.jso
# RUN addgroup -g 1001 -S nodejs
# RUN adduser -S nextjs -u 1001
# RUN chown -R nextjs:nodejs /bookit/.next
# RUN next.js
# EXPOSE 3000
# CMD [ "npm", "start" ]