22title : Docker
33displayed_sidebar : devDocsSidebar
44description : Quickly create a Docker container from a local project.
5-
65---
76
87import DockerEnvTable from '/docs/snippets/docker-env-table.md'
@@ -54,19 +53,24 @@ Sample `Dockerfile`:
5453<TabItem value =" yarn " label =" yarn " >
5554
5655``` dockerfile title="./Dockerfile"
57-
5856FROM node:16-alpine
5957# Installing libvips-dev for sharp Compatibility
6058RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev
6159ARG NODE_ENV=development
6260ENV NODE_ENV=${NODE_ENV}
61+ RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
62+
6363WORKDIR /opt/
64- COPY ./ package.json ./ yarn.lock ./
64+ COPY package.json yarn.lock ./
6565ENV PATH /opt/node_modules/.bin:$PATH
66+ RUN chown -R strapi:strapi /opt/
67+ USER strapi
68+ COPY package.json yarn.lock ./
6669RUN yarn config set network-timeout 600000 -g && yarn install
70+
6771WORKDIR /opt/app
68- COPY ./ .
69- RUN yarn build
72+ COPY . .
73+ RUN [ " yarn" , " build" ]
7074EXPOSE 1337
7175CMD ["yarn" , "develop" ]
7276```
@@ -76,21 +80,28 @@ CMD ["yarn", "develop"]
7680<TabItem value =" npm " label =" npm " >
7781
7882``` dockerfile title="./Dockerfile"
79-
8083FROM node:16-alpine
8184# Installing libvips-dev for sharp Compatibility
8285RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev
8386ARG NODE_ENV=development
8487ENV NODE_ENV=${NODE_ENV}
88+ RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
89+
8590WORKDIR /opt/
86- COPY ./package.json ./package-lock.json ./
91+ COPY package.json package-lock.json ./
92+
8793ENV PATH /opt/node_modules/.bin:$PATH
88- RUN npm install
94+ RUN chown -R strapi:strapi /opt/
95+ USER strapi
96+ COPY package.json package-lock.json ./
97+ RUN npm config set network-timeout 600000 -g && npm install
98+
8999WORKDIR /opt/app
90- COPY ./ .
91- RUN npm run build
100+ COPY . .
101+ RUN [ " npm" , " run" , " build" ]
92102EXPOSE 1337
93103CMD ["npm" , "run" , "develop" ]
104+
94105```
95106
96107</TabItem >
@@ -112,8 +123,7 @@ Sample `docker-compose.yml`:
112123<TabItem value =" mysql " label =" MySQL " >
113124
114125``` yml title="./docker-compose.yml"
115-
116- version : ' 3'
126+ version : " 3"
117127services :
118128 strapi :
119129 container_name : strapi
@@ -140,7 +150,7 @@ services:
140150 - ./.env:/opt/app/.env
141151 - ./public/uploads:/opt/app/public/uploads
142152 ports :
143- - ' 1337:1337'
153+ - " 1337:1337"
144154 networks :
145155 - strapi
146156 depends_on :
@@ -162,7 +172,7 @@ services:
162172 - strapi-data:/var/lib/mysql
163173 # - ./data:/var/lib/mysql # if you want to use a bind folder
164174 ports :
165- - ' 3306:3306'
175+ - " 3306:3306"
166176 networks :
167177 - strapi
168178
@@ -180,8 +190,7 @@ networks:
180190<TabItem value="mariadb" label="MariaDB">
181191
182192` ` ` yml title="./docker-compose.yml"
183-
184- version : ' 3'
193+ version : " 3"
185194services :
186195 strapi :
187196 container_name : strapi
@@ -208,7 +217,7 @@ services:
208217 - ./.env:/opt/app/.env
209218 - ./public/uploads:/opt/app/public/uploads
210219 ports :
211- - ' 1337:1337'
220+ - " 1337:1337"
212221 networks :
213222 - strapi
214223 depends_on :
@@ -229,7 +238,7 @@ services:
229238 - strapi-data:/var/lib/mysql
230239 # - ./data:/var/lib/mysql # if you want to use a bind folder
231240 ports :
232- - ' 3306:3306'
241+ - " 3306:3306"
233242 networks :
234243 - strapi
235244
@@ -247,8 +256,7 @@ networks:
247256<TabItem value="postgresql" label="PostgreSQL">
248257
249258` ` ` yml title="./docker-compose.yml"
250-
251- version : ' 3'
259+ version : " 3"
252260services :
253261 strapi :
254262 container_name : strapi
@@ -275,12 +283,12 @@ services:
275283 - ./.env:/opt/app/.env
276284 - ./public/uploads:/opt/app/public/uploads
277285 ports :
278- - ' 1337:1337'
286+ - " 1337:1337"
279287 networks :
280288 - strapi
281289 depends_on :
282290 - strapiDB
283-
291+
284292 strapiDB :
285293 container_name : strapiDB
286294 platform : linux/amd64 # for platform error on Apple M1 chips
@@ -296,7 +304,7 @@ services:
296304 # - ./data:/var/lib/postgresql/data/ # if you want to use a bind folder
297305
298306 ports :
299- - ' 5432:5432'
307+ - " 5432:5432"
300308 networks :
301309 - strapi
302310
@@ -329,28 +337,34 @@ The following `Dockerfile` can be used to build a production Docker image for a
329337<TabItem value="yarn" label="yarn">
330338
331339` ` ` dockerfile title="./Dockerfile.prod"
332-
340+ # Creating multi-stage build for production
333341FROM node:16-alpine as build
334- # Installing libvips-dev for sharp Compatibility
335342RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev > /dev/null 2>&1
336343ARG NODE_ENV=production
337344ENV NODE_ENV=${NODE_ENV}
345+
338346WORKDIR /opt/
339- COPY ./package.json ./yarn.lock ./
340- ENV PATH /opt/node_modules/.bin:$PATH
347+ COPY package.json yarn.lock ./
341348RUN yarn config set network-timeout 600000 -g && yarn install --production
349+ ENV PATH /opt/node_modules/.bin:$PATH
342350WORKDIR /opt/app
343- COPY ./ .
351+ COPY . .
344352RUN yarn build
345353
354+ # Creating final production image
346355FROM node:16-alpine
356+ RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
347357RUN apk add --no-cache vips-dev
348358ARG NODE_ENV=production
349359ENV NODE_ENV=${NODE_ENV}
350- WORKDIR /opt/app
360+ WORKDIR /opt/
351361COPY --from=build /opt/node_modules ./node_modules
352- ENV PATH /opt/node_modules/.bin:$PATH
362+ WORKDIR /opt/app
353363COPY --from=build /opt/app ./
364+ ENV PATH /opt/node_modules/.bin:$PATH
365+
366+ RUN chown -R strapi:strapi /opt/app
367+ USER strapi
354368EXPOSE 1337
355369CMD ["yarn", "start"]
356370` ` `
@@ -360,33 +374,37 @@ CMD ["yarn", "start"]
360374<TabItem value="npm" label="npm">
361375
362376` ` ` dockerfile title="./Dockerfile.prod"
363-
377+ # Creating multi-stage build for production
364378FROM node:16-alpine as build
365- # Installing libvips-dev for sharp Compatibility
366- RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev && rm -rf /var/cache/apk/* > /dev/null 2>&1
379+ RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev > /dev/null 2>&1
367380ARG NODE_ENV=production
368381ENV NODE_ENV=${NODE_ENV}
382+
369383WORKDIR /opt/
370- COPY ./package.json ./package-lock.json ./
384+ COPY package.json package-lock.json ./
385+ RUN npm config set network-timeout 600000 -g && npm install --only=production
371386ENV PATH /opt/node_modules/.bin:$PATH
372- RUN npm install --production
373387WORKDIR /opt/app
374- COPY ./ .
388+ COPY . .
375389RUN npm run build
376390
377-
391+ # Creating final production image
378392FROM node:16-alpine
379- # Installing libvips-dev for sharp Compatibility
380- RUN apk add vips-dev
381- RUN rm -rf /var/cache/apk/*
393+ RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
394+ RUN apk add --no-cache vips-dev
382395ARG NODE_ENV=production
383396ENV NODE_ENV=${NODE_ENV}
384- WORKDIR /opt/app
397+ WORKDIR /opt/
385398COPY --from=build /opt/node_modules ./node_modules
386- ENV PATH /opt/node_modules/.bin:$PATH
399+ WORKDIR /opt/app
387400COPY --from=build /opt/app ./
401+ ENV PATH /opt/node_modules/.bin:$PATH
402+
403+ RUN chown -R strapi:strapi /opt/app
404+ USER strapi
388405EXPOSE 1337
389- CMD ["npm", "run","start"]
406+ CMD ["npm", "run", "start"]
407+
390408` ` `
391409
392410</TabItem>
0 commit comments