๋„์ปค: ๋‚˜์œ ์กฐ์–ธ

๋„์ปค: ๋‚˜์œ ์กฐ์–ธ

๋‚ด๊ฐ€ ์ž๋™์ฐจ ์šด์ „์„ ๋ฐฐ์šธ ๋•Œ ์ฒซ ์ˆ˜์—…์—์„œ ๊ฐ•์‚ฌ๊ฐ€ ๊ต์ฐจ๋กœ์— ์—ญ์œผ๋กœ ์ฐจ๋ฅผ ๋ชฐ๊ณ  ๋“ค์–ด๊ฐ„ ๋‹ค์Œ ์ ˆ๋Œ€ ๊ทธ๋ ‡๊ฒŒํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๊ทœ์น™์„ ์ฆ‰์‹œ ๊ทธ๋ฆฌ๊ณ  ํ‰์ƒ ๋™์•ˆ ๊ธฐ์–ตํ–ˆ์Šต๋‹ˆ๋‹ค.

Grigory Oster์˜ "Bad Advice"๋ฅผ ์•„์ด๋“ค์—๊ฒŒ ์ฝ์–ด ์ฃผ๋ฉด ์•„์ด๋“ค์ด ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค๋Š” ์ƒ๊ฐ์ด ์–ผ๋งˆ๋‚˜ ์‰ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋– ์˜ค๋ฅด๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dockerfile์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋งŽ์€ ๊ธฐ์‚ฌ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž˜๋ชป๋œ Dockerfile์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์„ ์ ‘ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๊ณต๋ฐฑ์„ ๋ฉ”์šฐ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ์ œ๊ฐ€ ์ง€์›์„ ๋ฐ›๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ทธ๋Ÿฌํ•œ dockerfile์ด ๋” ์ ์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๋“ฑ์žฅ์ธ๋ฌผ, ์ƒํ™ฉ, Dockerfile์€ ํ—ˆ๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ณธ์ธ์„ ์•Œ์•„๋ณด์‹ ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋ถˆ๊ธธํ•˜๊ณ  ๋”์ฐํ•œ Dockerfile ๋งŒ๋“ค๊ธฐ

Peter(์ˆ˜์„ java/rubby/php ๊ฐœ๋ฐœ์ž): ๋™๋ฃŒ Vasily๋‹˜, ์ด๋ฏธ Docker์— ์ƒˆ ๋ชจ๋“ˆ์„ ์—…๋กœ๋“œํ•˜์…จ๋‚˜์š”?
Vasily(์ค‘ํ•™์ƒ): ์•„๋‹ˆ์š”, ์‹œ๊ฐ„์ด ์—†์–ด์„œ ์ด Docker๋กœ๋Š” ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์–ด์ง€๋Ÿฌ์›Œ์š”.

ํ”ผํ„ฐ: XNUMX๋…„ ์ „์— ๋งˆ๊ฐ ๊ธฐํ•œ์ด ์žˆ์—ˆ์–ด์š”. ์ œ๊ฐ€ ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์ด ๋‹น์‹ ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†๋Š”์ง€ ๋งํ•ด ๋ณด์„ธ์š”.

๋ฐ”์‹ค๋ฆฌ: ์ตœ์†Œํ•œ์ด์ง€๋งŒ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ํฌํ•จ๋˜๋„๋ก ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.
ํ”ผํ„ฐ: ์šฐ๋ถ„ํˆฌ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์„ธ์š”. ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถˆํ•„์š”ํ•œ ๊ฒƒ๋“ค์ด ๋‚˜์ค‘์— ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฒ„์ „์ด ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๊ฐ€ ๋˜๋„๋ก ์ตœ์‹  ํƒœ๊ทธ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.

Dockerfile์— ์ฒซ ๋ฒˆ์งธ ์ค„์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

FROM ubuntu:latest

ํ”ผํ„ฐ: ๋‹ค์Œ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋ฌด์—‡์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๊นŒ?
๋ฐ”์‹ค๋ฆฌ: ๊ทธ๋Ÿผ ๋ฃจ๋น„, ์›น ์„œ๋ฒ„๊ฐ€ ์žˆ๊ณ  ๋ช‡ ๊ฐ€์ง€ ์„œ๋น„์Šค ๋ฐ๋ชฌ์ด ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Peter: ์˜ˆ, ํ•„์š”ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Ruby, Bundler, nodejs, imagemagick ๋“ฑ... ๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ™•์‹คํžˆ ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋ฅผ ์–ป์œผ์„ธ์š”.
๋ฐ”์‹ค๋ฆฌ: ๊ทธ๋ฆฌ๊ณ  ๋ฃจํŠธ์— ์†ํ•˜์ง€ ์•Š๋„๋ก ์‚ฌ์šฉ์ž๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์„ ๊ฑด๊ฐ€์š”?
ํ”ผํ„ฐ: ์  ์žฅ, ๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ์ „ํžˆ ๊ถŒ๋ฆฌ๋ฅผ ๊ฐ–๊ณ  ์žฅ๋‚œ์„ ์ณ์•ผ ํ•˜์ž–์•„์š”.
๋ฐ”์‹ค๋ฆฌ: ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ๋ฌถ์œผ๋ ค๋ฉด ์•ฝ 15๋ถ„ ์ •๋„์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค...
(ํ”ผํ„ฐ๋Š” ๊ผผ๊ผผํ•˜๊ณ  ์•„์ฃผ ๋˜‘๋˜‘ํ•œ ํ›„๋ฐฐ๋ฅผ ๋ฌด๋ก€ํ•˜๊ฒŒ ๋ฐฉํ•ดํ•œ๋‹ค.)
ํ”ผํ„ฐ: ๋ณ„๋„์˜ ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋ฉด ์ฝ๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Dockerfile์ด ์ปค์ง‘๋‹ˆ๋‹ค.

FROM ubuntu:latest
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs
RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

๊ทธ๋Ÿฐ ๋‹ค์Œ DevOps(๊ทธ๋Ÿฌ๋‚˜ Dev๋ณด๋‹ค Ops๊ฐ€ ๋” ๋งŽ์Œ)์ธ Igor Ivanovich๊ฐ€ ์‚ฌ๋ฌด์‹ค๋กœ ๋‹ฌ๋ ค์™€ ์ด๋ ‡๊ฒŒ ์™ธ์ณค์Šต๋‹ˆ๋‹ค.

AI: Petya, ๋‹น์‹ ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์Œ์‹ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋˜ ๋ง์ณค์Šต๋‹ˆ๋‹ค. ์–ธ์ œ ๋๋‚ ๊นŒ์š”...

์ž‘์€ ์ถฉ๋Œ ํ›„ Igor Ivanovich๋Š” ์‹ํžˆ๊ณ  ๊ทธ์˜ ๋™๋ฃŒ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

AI: ๋ญ ํ•˜๋Š” ๊ฑฐ์•ผ?
Vasily: Peter๋Š” ์ œ๊ฐ€ ์ƒˆ ๋ชจ๋“ˆ์„ ์œ„ํ•œ Dockerfile์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๊ณ  ์žˆ์–ด์š”.
AI: ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค... ์—ฌ๊ธฐ์— ๋ฌด์—‡์„ ์ผ๋‚˜์š”? ๋ณ„๋„์˜ ๋ช…๋ น์œผ๋กœ ์ €์žฅ์†Œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ถ”๊ฐ€ ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ Gemfile์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ข…์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์„ค์น˜ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ”ผํ„ฐ: ๋‹น์‹ ์˜ ์ผ์„ ํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ๋“  ์•Œ์•„๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Igor Ivanovich๋Š” ์Šฌํ”„๊ฒŒ ํ•œ์ˆจ์„ ์‰ฌ๊ณ  ๋ˆ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ„๋ฐ˜ํ–ˆ๋Š”์ง€ ์•Œ์•„ ๋‚ด๊ธฐ ์œ„ํ•ด ๋– ๋‚ฉ๋‹ˆ๋‹ค.

ํ”ผํ„ฐ: ์˜ˆ, ํ•˜์ง€๋งŒ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๊ทธ์˜ ๋ง์ด ์˜ณ์•˜์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ด๋ฏธ์ง€์— ๋ฐ€์–ด ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰์‹œ SSH์™€ Supervisor๋ฅผ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ๋ชฌ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

Vasily: ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋จผ์ € Gemfile๊ณผ Gemfile.lock์„ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ๋ชจ๋“  ๊ฒƒ์„ ์„ค์น˜ํ•˜๊ณ  ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Gemfile์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ์บ์‹œ์—์„œ ๋ ˆ์ด์–ด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
ํ”ผํ„ฐ: ์™œ ์ด ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”? ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ๋ฒˆ์— ๋ณต์‚ฌํ•˜์„ธ์š”. ๋ฐ”๋กœ ๋ณต์‚ฌํ•˜์„ธ์š”. ์ฒซ ๋ฒˆ์งธ ์ค„.

Dockerfile์€ ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

FROM ubuntu:latest
COPY ./ /app
WORKDIR /app
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

ํ”ผํ„ฐ: ๊ทธ๋Ÿผ ๋‹ค์Œ์€์š”? ๊ฐ๋…์ž๋ฅผ ์œ„ํ•œ ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋ฐ”์‹ค๋ฆฌ: ์•„๋‹ˆ, ์•„๋‹ˆ. ํ•˜์ง€๋งŒ ๋นจ๋ฆฌ ํ• ๊ฒŒ์š”.
ํ”ผํ„ฐ: ๊ทธ๋Ÿผ ๊ทธ๋ ‡๊ฒŒ ํ• ๊ฒŒ์š”. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ์ž‘ํ•˜๋Š” init ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์Šค์ผ€์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข‹์Šต๋‹ˆ๋‹ค. nohup์„ ์‚ฌ์šฉํ•˜์—ฌ ssh๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ๋…์ž๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿผ ๊ทธ๋ƒฅ ์Šน๊ฐ์„ ํƒœ์šฐ์„ธ์š”.
Q: ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผ Docker๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์ธ์‹ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‚ด์šฉ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.
P: ๋ง๋„ ์•ˆ ๋˜๋Š” ์†Œ๋ฆฌ๋กœ ๋จธ๋ฆฌ๋ฅผ ๊ดด๋กญํžˆ์ง€ ๋งˆ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ? ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๊นŒ? Igor Ivanovich๊ฐ€ ์•ˆ์ •์„ฑ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”. ๊ทธ๊ฐ€ ๊ธ‰์—ฌ๋ฅผ๋ฐ›๋Š” ๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ž„๋ฌด๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ฅผ ์œ„ํ•ด Dockefile์„ ์ž‘์„ฑํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•˜๋‹ค๊ณ  ๋งํ•˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”.

10๋ถ„ ๋ถ„๋Ÿ‰์˜ ๊ณ ์–‘์ด ๊ด€๋ จ ๋™์˜์ƒ XNUMX๊ฐœ.

Q. ๋‹ค ํ–ˆ์–ด์š”. ๋Œ“๊ธ€์„ ๋” ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
์—ฌ: ๋ณด์—ฌ์ฃผ์„ธ์š”!

Dockerfile์˜ ์ตœ์‹  ๋ฒ„์ „:

FROM ubuntu:latest

# ะšะพะฟะธั€ัƒะตะผ ะธัั…ะพะดะฝั‹ะน ะบะพะด
COPY ./ /app
WORKDIR /app

# ะžะฑะฝะพะฒะปัะตะผ ัะฟะธัะพะบ ะฟะฐะบะตั‚ะพะฒ
RUN apt-get update 

# ะžะฑะฝะพะฒะปัะตะผ ะฟะฐะบะตั‚ั‹
RUN apt-get upgrade

# ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะฝัƒะถะฝั‹ะต ะฟะฐะบะตั‚ั‹
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ bundler
RUN gem install bundler

# ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ nodejs ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ัะฑะพั€ะบะธ ัั‚ะฐั‚ะธะบะธ
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะทะฐะฒะธัะธะผะพัั‚ะธ
RUN bundle install --without development test --path vendor/bundle

# ะงะธัั‚ะธะผ ะทะฐ ัะพะฑะพะน ะบััˆะธ
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# ะ—ะฐะฟัƒัะบะฐะตะผ ัะบั€ะธะฟั‚, ะฟั€ะธ ัั‚ะฐั€ั‚ะต ะบะพะฝั‚ะตะนะฝะตั€ะฐ, ะบะพั‚ะพั€ั‹ะน ะทะฐะฟัƒัั‚ะธั‚ ะฒัะต ะพัั‚ะฐะปัŒะฝะพะต.
CMD [โ€œ/app/init.shโ€]

P: ์ข‹์Šต๋‹ˆ๋‹ค. ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋Œ“๊ธ€์€ ๋Ÿฌ์‹œ์•„์–ด๋กœ ๋˜์–ด ์žˆ์–ด ํŽธ๋ฆฌํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šฐ๋ฏ€๋กœ ๋ชจ๋‘๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ž‘์—…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹ค ๊ฐ€๋ฅด์ณ์คฌ์œผ๋‹ˆ ๋‚˜๋จธ์ง€๋Š” ์Šค์Šค๋กœ ํ•˜์…”๋„ ๋ผ์š”. ์ปคํ”ผ ๋งˆ์‹œ๋Ÿฌ ๊ฐ€์ž...

๊ธ€์Ž„, ์ด์ œ ์šฐ๋ฆฌ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๋”์ฐํ•œ Dockerfile์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด Dockerfile์„ ๋ณด๋ฉด Igor Ivanovich๊ฐ€ ๊ทธ๋งŒ๋‘๊ณ  ์‹ถ์–ด์ง€๊ณ  ๊ทธ์˜ ๋ˆˆ์ด ์ผ์ฃผ์ผ ๋™์•ˆ ์•„ํ”Œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  Dockerfile์€ ๋” ๋‚˜์  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•จ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฒ˜์Œ์—๋Š” ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ €๋Š” Grigory Oster์˜ ์ธ์šฉ๋ฌธ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค๋ฉด
์šฐ๋ฆฌ๋Š” ์ธ์ƒ์˜ ๊ธธ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์ด์œ ๋ฅผ ๋ชฐ๋ผ์š”
๋…ธ๋™ ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜์„ธ์š”.
๋ณต๋„์˜ ์ „๊ตฌ๋ฅผ ๊นจ์‹ญ์‹œ์˜ค -
์‚ฌ๋žŒ๋“ค์€ ๋‹น์‹ ์—๊ฒŒ "๊ณ ๋ง™์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹น์‹ ์€ ์‚ฌ๋žŒ๋“ค์„ ๋„์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค
์ „๊ธฐ๋ฅผ ์•„๊ปด ๋ผ.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€