Vscode-docker: ๋‹ค๋‹จ๊ณ„ ๋„์ปค ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€

์— ๋งŒ๋“  2017๋…„ 04์›” 28์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/vscode-docker

๊ธฐ๋ณธ dockerfile ํ…œํ”Œ๋ฆฟ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

https://codefresh.io/blog/node_docker_multistage/

//cc: @lostintangent

๊ฑฐ์นœ ์ƒ๊ฐ...

FROM node:latest AS base
WORKDIR /usr/src/app
COPY package.json .

FROM base AS dependencies
RUN npm set progress=false && npm config set depth 0
RUN npm install --only=production
RUN cp -R node_modules prod_node_modules
RUN npm install

FROM dependencies AS build
COPY . .
RUN ./node_modules/.bin/gulp
RUN cp -R client prod_client

FROM base AS release
COPY --from=dependencies /usr/src/app/prod_node_modules ./node_modules
COPY --from=build /usr/src/app/prod_client ./client
COPY . .
EXPOSE 3000
CMD npm run start
enhancement needs more info

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ข‹์€ ์†Œ๋ฆฌ! ๋˜ํ•œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒˆ AS ํ‚ค์›Œ๋“œ์™€ --from ํ”Œ๋ž˜๊ทธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ƒ‰์ƒํ™”ํ•˜๋„๋ก ์ธ๋ฐ•์Šค Docker ๊ตฌ๋ฌธ ํŒŒ์ผ ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ฎ์€ ๊ฐ€๊ฒฉ์ด์ง€๋งŒ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๊ฐ€ ๊ฝค ๋ณดํŽธํ™”๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  2. FROM ์ง€์‹œ๋ฌธ์˜ AS foo ์ ˆ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜์ง€ ์•Š๋„๋ก ๋ฆฐํ„ฐ ๊ทœ์น™์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ์ด์— ๋Œ€ํ•ด ์ž˜๋ชป๋œ ๋ถ€์ •์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋Š” ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  7 ๋Œ“๊ธ€

์ข‹์€ ์†Œ๋ฆฌ! ๋˜ํ•œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒˆ AS ํ‚ค์›Œ๋“œ์™€ --from ํ”Œ๋ž˜๊ทธ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ƒ‰์ƒํ™”ํ•˜๋„๋ก ์ธ๋ฐ•์Šค Docker ๊ตฌ๋ฌธ ํŒŒ์ผ ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ฎ์€ ๊ฐ€๊ฒฉ์ด์ง€๋งŒ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๊ฐ€ ๊ฝค ๋ณดํŽธํ™”๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  2. FROM ์ง€์‹œ๋ฌธ์˜ AS foo ์ ˆ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜์ง€ ์•Š๋„๋ก ๋ฆฐํ„ฐ ๊ทœ์น™์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์šฐ๋ฆฌ๋Š” ์ด์— ๋Œ€ํ•ด ์ž˜๋ชป๋œ ๋ถ€์ •์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋Š” ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ฐœ์„  ์‚ฌํ•ญ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. FROM ์ง€์‹œ๋ฌธ์—์„œ AS ์ ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋„๋ก ํ˜ธ๋ฒ„ ์ œ๊ณต์ž๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์‹ญ์‹œ์˜ค. ํ˜„์žฌ FROM/AS๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ˜ธ๋ฒ„ ๋™์ž‘์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  2. COPY ์ง€์‹œ๋ฌธ ๋ฐ FROM ์ง€์‹œ๋ฌธ์— "--from="์„ ์ž…๋ ฅํ•  ๋•Œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์ด๋ฆ„์˜ ์™„์„ฑ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜์—ฌ Dockerfile ์™„์„ฑ ๊ณต๊ธ‰์ž๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๊ทธ๊ฒƒ์—์žˆ๋Š” ๋™์•ˆ. Dockerfile์— ํ•˜๋‚˜์˜ CMD ๋ช…๋ น๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ (๋…น์ƒ‰ ๋ฌผ๊ฒฐ์„ )๊ฐ€ ์ด์ œ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @seank-com์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์„ค๋ช…ํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€ rcjsuen/dockerfile-utils#22๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ https://github.com/rcjsuen/dockerfile-utils/issues/22#issuecomment -366485869๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด ๋ฒ„๊ทธ๋Š” #249๊ฐ€ ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ ํ™•์žฅ ๋ฆด๋ฆฌ์Šค์—์„œ ์ˆ˜์ •๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์ด์ƒํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ฃผ์ €ํ•˜์ง€ ๋ง๊ณ  ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ํ•ด์š”!

ํ˜„์žฌ Node.js ํ…œํ”Œ๋ฆฟ:

FROM ๋…ธ๋“œ:10.13-alpine
ENV NODE_ENV ์ƒ์‚ฐ
์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ /usr/src/app
๋ณต์‚ฌ ["ํŒจํ‚ค์ง€.json", "ํŒจํ‚ค์ง€ ์ž ๊ธˆ.json ", "npm-shrinkwrap.json ", "./"]
RUN npm install --production --silent && mv node_modules ../
๋ณต์‚ฌ . .
๋…ธ์ถœ 3000
CMD npm ์‹œ์ž‘

@lostintangent , @chrisdias ๋” ๋‚˜์€ ์—ฐ์Šต์„ ์œ„ํ•ด ์ด๊ฒƒ์„ ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@lostintangent @chrisdias ๋‹น์‹ ์˜ ์ƒ๊ฐ์€?

์ด ๋ฌธ์ œ๋Š” ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ๋ณด๊ณ  ์ง€์นจ๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ–‰๋ณตํ•œ ์ฝ”๋”ฉ!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰