๋ด๊ฐ ์๋์ฐจ ์ด์ ์ ๋ฐฐ์ธ ๋ ์ฒซ ์์ ์์ ๊ฐ์ฌ๊ฐ ๊ต์ฐจ๋ก์ ์ญ์ผ๋ก ์ฐจ๋ฅผ ๋ชฐ๊ณ ๋ค์ด๊ฐ ๋ค์ ์ ๋ ๊ทธ๋ ๊ฒํด์๋ ์๋๋ค๊ณ ๋งํ์ต๋๋ค. ๋๋ ์ด ๊ท์น์ ์ฆ์ ๊ทธ๋ฆฌ๊ณ ํ์ ๋์ ๊ธฐ์ตํ์ต๋๋ค.
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