Skip to content

Commit 7b3bd57

Browse files
authored
Aligned dockerfile with dockerize tool, added security layer and optimized image (#1718)
1 parent ffd31d4 commit 7b3bd57

File tree

1 file changed

+61
-43
lines changed
  • docusaurus/docs/dev-docs/installation

1 file changed

+61
-43
lines changed

docusaurus/docs/dev-docs/installation/docker.md

Lines changed: 61 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
title: Docker
33
displayed_sidebar: devDocsSidebar
44
description: Quickly create a Docker container from a local project.
5-
65
---
76

87
import 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-
5856
FROM node:16-alpine
5957
# Installing libvips-dev for sharp Compatibility
6058
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev
6159
ARG NODE_ENV=development
6260
ENV NODE_ENV=${NODE_ENV}
61+
RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
62+
6363
WORKDIR /opt/
64-
COPY ./package.json ./yarn.lock ./
64+
COPY package.json yarn.lock ./
6565
ENV PATH /opt/node_modules/.bin:$PATH
66+
RUN chown -R strapi:strapi /opt/
67+
USER strapi
68+
COPY package.json yarn.lock ./
6669
RUN yarn config set network-timeout 600000 -g && yarn install
70+
6771
WORKDIR /opt/app
68-
COPY ./ .
69-
RUN yarn build
72+
COPY . .
73+
RUN ["yarn", "build"]
7074
EXPOSE 1337
7175
CMD ["yarn", "develop"]
7276
```
@@ -76,21 +80,28 @@ CMD ["yarn", "develop"]
7680
<TabItem value="npm" label="npm">
7781

7882
```dockerfile title="./Dockerfile"
79-
8083
FROM node:16-alpine
8184
# Installing libvips-dev for sharp Compatibility
8285
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev
8386
ARG NODE_ENV=development
8487
ENV NODE_ENV=${NODE_ENV}
88+
RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
89+
8590
WORKDIR /opt/
86-
COPY ./package.json ./package-lock.json ./
91+
COPY package.json package-lock.json ./
92+
8793
ENV 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+
8999
WORKDIR /opt/app
90-
COPY ./ .
91-
RUN npm run build
100+
COPY . .
101+
RUN ["npm", "run", "build"]
92102
EXPOSE 1337
93103
CMD ["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"
117127
services:
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"
185194
services:
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"
252260
services:
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
333341
FROM node:16-alpine as build
334-
# Installing libvips-dev for sharp Compatibility
335342
RUN apk update && apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev vips-dev > /dev/null 2>&1
336343
ARG NODE_ENV=production
337344
ENV NODE_ENV=${NODE_ENV}
345+
338346
WORKDIR /opt/
339-
COPY ./package.json ./yarn.lock ./
340-
ENV PATH /opt/node_modules/.bin:$PATH
347+
COPY package.json yarn.lock ./
341348
RUN yarn config set network-timeout 600000 -g && yarn install --production
349+
ENV PATH /opt/node_modules/.bin:$PATH
342350
WORKDIR /opt/app
343-
COPY ./ .
351+
COPY . .
344352
RUN yarn build
345353
354+
# Creating final production image
346355
FROM node:16-alpine
356+
RUN addgroup -g 1001 strapi && adduser -u 1001 -G strapi -s /bin/sh -D strapi
347357
RUN apk add --no-cache vips-dev
348358
ARG NODE_ENV=production
349359
ENV NODE_ENV=${NODE_ENV}
350-
WORKDIR /opt/app
360+
WORKDIR /opt/
351361
COPY --from=build /opt/node_modules ./node_modules
352-
ENV PATH /opt/node_modules/.bin:$PATH
362+
WORKDIR /opt/app
353363
COPY --from=build /opt/app ./
364+
ENV PATH /opt/node_modules/.bin:$PATH
365+
366+
RUN chown -R strapi:strapi /opt/app
367+
USER strapi
354368
EXPOSE 1337
355369
CMD ["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
364378
FROM 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
367380
ARG NODE_ENV=production
368381
ENV NODE_ENV=${NODE_ENV}
382+
369383
WORKDIR /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
371386
ENV PATH /opt/node_modules/.bin:$PATH
372-
RUN npm install --production
373387
WORKDIR /opt/app
374-
COPY ./ .
388+
COPY . .
375389
RUN npm run build
376390
377-
391+
# Creating final production image
378392
FROM 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
382395
ARG NODE_ENV=production
383396
ENV NODE_ENV=${NODE_ENV}
384-
WORKDIR /opt/app
397+
WORKDIR /opt/
385398
COPY --from=build /opt/node_modules ./node_modules
386-
ENV PATH /opt/node_modules/.bin:$PATH
399+
WORKDIR /opt/app
387400
COPY --from=build /opt/app ./
401+
ENV PATH /opt/node_modules/.bin:$PATH
402+
403+
RUN chown -R strapi:strapi /opt/app
404+
USER strapi
388405
EXPOSE 1337
389-
CMD ["npm", "run","start"]
406+
CMD ["npm", "run", "start"]
407+
390408
```
391409

392410
</TabItem>

0 commit comments

Comments
 (0)