๊ธฐ๋ณธ 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
์ข์ ์๋ฆฌ! ๋ํ ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
์ AS
ํค์๋์ --from
ํ๋๊ทธ๋ฅผ ์ ์ ํ๊ฒ ์์ํํ๋๋ก ์ธ๋ฐ์ค Docker ๊ตฌ๋ฌธ ํ์ผ ์ ์
๋ฐ์ดํธํฉ๋๋ค. ์ด๊ฒ์ ๋ฎ์ ๊ฐ๊ฒฉ์ด์ง๋ง ๋ค๋จ๊ณ ๋น๋๊ฐ ๊ฝค ๋ณดํธํ๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
FROM
์ง์๋ฌธ์ AS foo
์ ์ ๋ํด ๋ถํํ์ง ์๋๋ก ๋ฆฐํฐ ๊ท์น์ ์
๋ฐ์ดํธํฉ๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๋ ์ด์ ๋ํด ์๋ชป๋ ๋ถ์ ์ ์ ๊ณตํ๋๋ฐ ์ด๋ ์ด์์ ์ด์ง ์์ต๋๋ค.
๋ค์ ๊ฐ์ ์ฌํญ๋ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
FROM ์ง์๋ฌธ์์ AS ์ ์ ์ฌ์ฉํ ๋ ์ด๋ฏธ์ง ์ด๋ฆ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ๋ฌธ ๋ถ์ํ๋๋ก ํธ๋ฒ ์ ๊ณต์๋ฅผ ์ ๋ฐ์ดํธํ์ญ์์ค. ํ์ฌ FROM/AS๋ฅผ ์ฌ์ฉํ ๋ ํธ๋ฒ ๋์์ด ์ค๋จ๋์์ต๋๋ค.
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 ๋น์ ์ ์๊ฐ์?
์ด ๋ฌธ์ ๋ ์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ๊ณ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ข ๋ฃ๋์์ต๋๋ค. ๋ฌธ์ ๋ณด๊ณ ์ง์นจ๋ ์ฐธ์กฐํ์ธ์.
ํ๋ณตํ ์ฝ๋ฉ!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ข์ ์๋ฆฌ! ๋ํ ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
์
AS
ํค์๋์--from
ํ๋๊ทธ๋ฅผ ์ ์ ํ๊ฒ ์์ํํ๋๋ก ์ธ๋ฐ์ค Docker ๊ตฌ๋ฌธ ํ์ผ ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๊ฒ์ ๋ฎ์ ๊ฐ๊ฒฉ์ด์ง๋ง ๋ค๋จ๊ณ ๋น๋๊ฐ ๊ฝค ๋ณดํธํ๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.FROM
์ง์๋ฌธ์AS foo
์ ์ ๋ํด ๋ถํํ์ง ์๋๋ก ๋ฆฐํฐ ๊ท์น์ ์ ๋ฐ์ดํธํฉ๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๋ ์ด์ ๋ํด ์๋ชป๋ ๋ถ์ ์ ์ ๊ณตํ๋๋ฐ ์ด๋ ์ด์์ ์ด์ง ์์ต๋๋ค.