๋„์ปค: ๋‚˜์˜์ง€ ์•Š์€ ์กฐ์–ธ

๋‚ด ๊ธ€ ๋Œ“๊ธ€์— ๋„์ปค: ๋‚˜์œ ์กฐ์–ธ ๊ฑฐ๊ธฐ์— ์„ค๋ช…๋œ Dockerfile์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ํ˜•ํŽธ์—†๋Š”์ง€ ์„ค๋ช…ํ•ด ๋‹ฌ๋ผ๋Š” ์š”์ฒญ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

์ด์ „ ์‹œ๋ฆฌ์ฆˆ ์š”์•ฝ: ๋‘ ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด‰๋ฐ•ํ•œ ๋งˆ๊ฐ ๊ธฐํ•œ ๋‚ด์— Dockerfile์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ Igor Ivanovich ์ž‘์ „์ด ๊ทธ๋“ค์—๊ฒŒ ๋‹ค๊ฐ€์˜ต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ Dockerfile์ด ๋„ˆ๋ฌด ๋‚˜๋น ์„œ AI๊ฐ€ ์‹ฌ์žฅ๋งˆ๋น„ ์ง์ „์— ์ด๋ฅด๋ €์Šต๋‹ˆ๋‹ค.

๋„์ปค: ๋‚˜์˜์ง€ ์•Š์€ ์กฐ์–ธ

์ด์ œ ์ด Dockerfile์— ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์ผ์ฃผ์ผ์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.

Dev Petya๋Š” ์ปคํ”ผ ํ•œ ์ž”์„ ๋งˆ์‹œ๋ฉฐ ์‹๋‹น์—์„œ Ops Igor Ivanovich๋ฅผ ๋งŒ๋‚ฉ๋‹ˆ๋‹ค.

๊ต์ˆ˜: Igor Ivanovich, ๋งŽ์ด ๋ฐ”๋น ์š”? ์šฐ๋ฆฌ๊ฐ€ ์–ด๋””์„œ ์‹ค์ˆ˜๋ฅผ ํ–ˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

AI: ์ข‹์Šต๋‹ˆ๋‹ค. ํ™œ์šฉ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์ž์ฃผ ๋งŒ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋จผ์ € ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋™์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. Docker ์ด๋ฐ์˜ฌ๋กœ๊ธฐ: ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ - ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค.
  2. ์šฉ๊ธฐ๋Š” ์ž‘์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.
  3. ์บ์‹œ์—์„œ ๋” ๋งŽ์ด ๊ฐ€์ ธ๊ฐˆ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.

P: ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

AI: Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ pid 1๋กœ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—์„œ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰ ์ค‘์ด๊ฑฐ๋‚˜ ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด pid 1๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด Docker๋Š” ์ด์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋ฉด Dockerfile์„ ๋ณด์—ฌ์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  Petya๋Š” ๋‹ค์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

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/* 
RUN rake assets:precompile
# ะ—ะฐะฟัƒัะบะฐะตะผ ัะบั€ะธะฟั‚, ะฟั€ะธ ัั‚ะฐั€ั‚ะต ะบะพะฝั‚ะตะนะฝะตั€ะฐ, ะบะพั‚ะพั€ั‹ะน ะทะฐะฟัƒัั‚ะธั‚ ะฒัะต ะพัั‚ะฐะปัŒะฝะพะต.
CMD ["/app/init.sh"]

AI: ์•„, ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

FROM ubuntu:latest

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

๋ถˆํ•„์š”ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋งŽ์ด ํฌํ•จ๋œ ๋ณธ๊ฒฉ์ ์ธ OS๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ดฌ์˜ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ์ด ๋ถ€ํ’€๋ ค์ง‘๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋งŽ์„์ˆ˜๋ก ํ—ˆ์ ๊ณผ ์ทจ์•ฝ์ ๋„ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์ด๋ฏธ์ง€๊ฐ€ ํด์ˆ˜๋ก ํ˜ธ์ŠคํŠธ์™€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋” ๋งŽ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์ด๋ฏธ์ง€๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜์‹œ๋‚˜์š”?)

P: ๋„ค, ๋ฌผ๋ก ์ด์ฃ . ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ์žˆ์œผ๋‹ˆ ์ง์ ‘ ์„ค์ •ํ•˜์„ธ์š”.

AI: ๊ทธ๋Ÿผ ์ œ๊ฐ€ ๋ฌด์Šจ ๋ง์„ ํ•˜๋Š” ๊ฑธ๊นŒ์š”?.. ์•„ ๊ทธ๋ ‡๊ตฐ์š”. ๋ณผ๋ฅจ์ด... ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜๋„ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ์ด๋Š” ๋ˆˆ์— ๋„์ง€ ์•Š์ง€๋งŒ ์ง€์†์ ์ธ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ๊ฐ€ ์žˆ์œผ๋ฉด ๋ˆˆ์— ๋•๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  AWS์— God's ๋ชจ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์šฐ์ฃผ ์š”๊ธˆ๋„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ •ํ™•ํ•œ ๋ฒ„์ „๊ณผ ์ตœ์†Œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. FROM ruby:2.5.5-stretch

๊ต์ˆ˜: ์•„, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ด๋ฏธ์ง€๋ฅผ ์–ด๋””์„œ ์–ด๋–ป๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‚˜์š”? ๋‚˜์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‚˜์š”?

AI: ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ์ง€๋Š” ๋‹ค์Œ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋„์ปคํ—ˆ๋ธŒ, Pornhub์™€ ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค :). ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฏธ์ง€์—๋Š” ์—ฌ๋Ÿฌ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์•Œํ”„์Šค ์‚ฐ๋งฅ์˜: ์ด๋ฏธ์ง€๋Š” ์ตœ์†Œ 5MB์˜ Linux ์ด๋ฏธ์ง€๋กœ ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ : ์ž์ฒด libc ๊ตฌํ˜„์œผ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ํ‘œ์ค€ ํŒจํ‚ค์ง€๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์•„ ์„ค์น˜ํ•˜๋Š” ๋ฐ๋Š” ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
์ง€์šฐ๊ณ : ๊ธฐ๋ณธ ์ด๋ฏธ์ง€, ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค€๋น„๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. GO ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.
Ubuntu ๋˜๋Š” Debian๊ณผ ๊ฐ™์€ ๋ชจ๋“  OS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€์Ž„์š”, ์„ค๋ช…ํ•  ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์•„์š”.

AI: ์ด์ œ ๋ชจ๋“  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์บ์‹œ๋ฅผ ์ง€์›๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ์–ด์š” apt-get ์—…๊ทธ๋ ˆ์ด๋“œ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์˜ ๊ณ ์ • ํƒœ๊ทธ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ ๋นŒ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์˜ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ๋Š” ๊ด€๋ฆฌ์ž์˜ ์ž‘์—…์ด๋ฉฐ ํƒœ๊ทธ ๋ณ€๊ฒฝ์ด ์ˆ˜๋ฐ˜๋ฉ๋‹ˆ๋‹ค.

P: ๋„ค, ์‹œ๋„ํ•ด ๋ดค๋Š”๋ฐ ๊ฒฐ๊ณผ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

WORKDIR /app
COPY ./ /app

RUN curl -sL https://deb.nodesource.com/setup_9.x | bash - 
    && apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle

RUN rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

AI: ๋‚˜์˜์ง€๋Š” ์•Š์ง€๋งŒ, ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ถ€๋ถ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์„ธ์š”, ์—ฌ๊ธฐ ์ด ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค:

RUN rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*  

... ์ตœ์ข… ์ด๋ฏธ์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ , ์ด ๋ฐ์ดํ„ฐ ์—†์ด ์ถ”๊ฐ€ ๋ ˆ์ด์–ด๋งŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

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

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ ๋ญ ๊ฐ–๊ณ  ์žˆ์–ด, ๋ฃจ๋น„? ๊ทธ๋Ÿฌ๋ฉด ์ฒ˜์Œ์— ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Gemfile๊ณผ Gemfile.lock์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ์†Œ์Šค ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ๋ฒˆ๋“ค ์„ค์น˜๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  Gemfile ๋˜๋Š” Gemfile.lock์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

npm, pip, Composer ๋ฐ ์ข…์†์„ฑ ๋ชฉ๋ก์ด ์žˆ๋Š” ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ธฐํƒ€ ์ข…์†์„ฑ ๊ด€๋ฆฌ์ž๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋„ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜์ค‘์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

P: ์•Œ ๊ฒƒ ๊ฐ™์•„์š”. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ๋ณด์„ธ์š”:

FROM ruby:2.5.5-stretch

WORKDIR /app
COPY Gemfile* /app

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

COPY . /app
RUN rake assets:precompile

CMD ["bundleโ€, โ€œexecโ€, โ€œpassengerโ€, โ€œstart"]

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋ฐ๋ชฌ ์‹œ์ž‘์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

AI: ๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ CMD์™€ ENTRYPOINT๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ˆ™์ œ์ž…๋‹ˆ๋‹ค. Habrรฉ์—๋Š” ์ด ์ฃผ์ œ์— ๊ด€ํ•œ ์ข‹์€ ๊ธ€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ.

๊ทธ๋Ÿผ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ํฌํ•จ๋œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค. ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

RUN curl -sL https://deb.nodesource.com/setup_9.x > setup_9.x 
    && echo "958c9a95c4974c918dca773edf6d18b1d1a41434  setup_9.x" | sha1sum -c - 
    &&  bash  setup_9.x 
    && rm -rf setup_9.x 
    && apt-get -y install libpq-dev imagemagick gsfonts nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle   
    && rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

์ฒดํฌ์„ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

P: ํ•˜์ง€๋งŒ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

AI: ๋„ค, ๊ทธ๋ฆฌ๊ณ  ์ด์ƒํ•˜๊ฒŒ๋„ ์ด๊ฒƒ๋„ ์žฅ์ ์ด์—์š”. ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฑฐ๊ธฐ์—์„œ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ฐฑ๋„์–ด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ต์ˆ˜: ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… Dockerfile์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

FROM ruby:2.5.5-stretch

WORKDIR /app
COPY Gemfile* /app

RUN curl -sL https://deb.nodesource.com/setup_9.x > setup_9.x 
    && echo "958c9a95c4974c918dca773edf6d18b1d1a41434  setup_9.x" | sha1sum -c - 
    &&  bash  setup_9.x 
    && rm -rf setup_9.x 
    && apt-get -y install libpq-dev imagemagick gsfonts nodejs 
    && gem install bundler 
    && bundle install --without development test --path vendor/bundle   
    && rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

COPY . /app
RUN rake assets:precompile

CMD ["bundleโ€, โ€œexecโ€, โ€œpassengerโ€, โ€œstart"]

๊ต์ˆ˜: Igor Ivanovich๋‹˜, ๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‹ฌ๋ ค์•ผ ํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ 10๊ฐœ์˜ ์ปค๋ฐ‹์„ ๋” ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๊ธ‰ํ•œ ๋™๋ฃŒ๋ฅผ ์‹œ์„ ์œผ๋กœ ๋ฉˆ์ถ”๊ฒŒ ํ•œ ์ด๊ณ ๋ฅด ์ด๋ฐ”๋…ธ๋น„์น˜๋Š” ์ง„ํ•œ ์ปคํ”ผ๋ฅผ ํ•œ ๋ชจ๊ธˆ ๋งˆ์‹ ๋‹ค. 99.9% SLA์™€ ๋ฒ„๊ทธ ์—†๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋ช‡ ์ดˆ ๋™์•ˆ ์ƒ๊ฐํ•œ ํ›„ ๊ทธ๋Š” ์งˆ๋ฌธ์„ ํ•ฉ๋‹ˆ๋‹ค.

AI: ๋กœ๊ทธ๋Š” ์–ด๋””์— ์ €์žฅํ•˜๋‚˜์š”?

P: ๋ฌผ๋ก , Production.log์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ SSH ์—†์ด ์–ด๋–ป๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

AI: ํŒŒ์ผ์— ๋‚จ๊ฒจ๋‘๋ฉด ์ด๋ฏธ ์†”๋ฃจ์…˜์ด ๊ฐœ๋ฐœ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. docker exec ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์— ๋Œ€ํ•ด cat์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ด์‡ ๋ฅผ ์ด์šฉํ•ด์„œ -๊ทธ๊ฒƒ bash(์ปจํ…Œ์ด๋„ˆ์— ์„ค์น˜๋œ ๊ฒฝ์šฐ)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ๋Œ€ํ™”ํ˜• ์•ก์„ธ์Šค๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ํ†ต์ œํ•  ์ˆ˜ ์—†๋Š” ์ฆ๊ฐ€๋กœ ์ด์–ด์ง€๋ฉฐ ์•„๋ฌด๋„ ๋กœ๊ทธ๋ฅผ ํšŒ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋กœ๊ทธ๋Š” stdout์œผ๋กœ ์ „์†ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋„์ปค ๋กœ๊ทธ.

P: Igor Ivanovich, ๋กœ๊ทธ๋ฅผ ๋งˆ์šดํŠธ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ, ๋ฌผ๋ฆฌ์  ๋…ธ๋“œ์— ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?

AI: ๋…ธ๋“œ์˜ ๋””์Šคํฌ์— ๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ์•Š์€ ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ˆœํ™˜์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.
๊ทธ๊ฒŒ ๋‹ค์•ผ, ๋‹น์‹ ์€ ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ต์ˆ˜: Igor Ivanovich, ๋ฌด์—‡์„ ์ฝ์–ด์•ผ ํ• ์ง€ ์กฐ์–ธํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

AI: ๋จผ์ € ์ฝ์–ด ๋ณด์„ธ์š”. Docker ๊ฐœ๋ฐœ์ž์˜ ๊ถŒ์žฅ ์‚ฌํ•ญ, ๊ทธ๋“ค๋ณด๋‹ค Docker๋ฅผ ๋” ์ž˜ ์•„๋Š” ์‚ฌ๋žŒ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ธํ„ด์‹ญ์„ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์œผ๋กœ ๊ฐ€์„ธ์š”. ๊ฐ•ํ•œ. ๊ฒฐ๊ตญ, ์‹ค์ฒœ์ด ์—†๋Š” ์ด๋ก ์€ ์ฃฝ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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