Docker: เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบšเปเปˆเบ”เบต

Docker: เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบšเปเปˆเบ”เบต

เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบฎเบฝเบ™เบ‚เบฑเบšเบฅเบปเบ”, เปƒเบ™เบšเบปเบ”เบฎเบฝเบ™เบ—เปเบฒเบญเบดเบ”, เบœเบนเป‰เบชเบญเบ™เป„เบ”เป‰เบ‚เบฑเบšเบฅเบปเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบตเปˆเปเบเบเปƒเบ™เบ—เบฒเบ‡เบเบฑเบšเบเบฑเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเบญเบเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบ„เบงเบ™เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™ - เบšเปเปˆเป€เบ„เบตเบเป€เบฎเบฑเบ”เป€เบฅเบตเบ. เบ‚เป‰เบญเบเบˆเบทเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบ—เบฑเบ™เบ—เบตเปเบฅเบฐเบ•เบฐเบซเบผเบญเบ”เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ.

เบ—เปˆเบฒเบ™เป„เบ”เป‰เบญเปˆเบฒเบ™ "เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบšเปเปˆเบ”เบต" เป‚เบ”เบ Grigory Oster เบ•เปเปˆเบเบฑเบšเป€เบ”เบฑเบเบ™เป‰เบญเบ, เปเบฅเบฐเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบ‡เปˆเบฒเบเปเบฅเบฐเป€เบ›เบฑเบ™เบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบ—เบตเปˆเบกเบฑเบ™เบฎเบธเปˆเบ‡เบ‚เบถเป‰เบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเบ„เบงเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰.

เบšเบปเบ”เบ„เบงเบฒเบกเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™ Dockerfile เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡. เปเบ•เปˆเบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบžเบปเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™ Dockerfiles เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบ•เบทเปˆเบกเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ™เบตเป‰. เปเบฅเบฐเบšเบฒเบ‡เบ—เบตเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™, เบˆเบฐเบกเบต dockerfiles เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบซเบ™เป‰เบญเบเบฅเบปเบ‡.

เบฅเบฑเบเบชเบฐเบ™เบฐ, เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เปเบฅเบฐ Dockerfile เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฎเบฑเบšเบฎเบนเป‰เบ•เบปเบงเป€เบญเบ‡, เบ‚เปเบญเบฐเป„เบž.

เบเบฒเบ™เบชเป‰เบฒเบ‡ Dockerfile, ominous เปเบฅเบฐเบ‚เบตเป‰เบฎเป‰เบฒเบ

Peter (เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบญเบฒเบงเบธเป‚เบช java/rubby/php): เป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™ Vasily, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบญเบฑเบšเป‚เบซเบฅเบ”เป‚เบกเบ”เบนเบ™เปƒเบซเบกเปˆเปƒเบชเปˆ Docker เปเบฅเป‰เบงเบšเป?
Vasily (junior): เบšเปเปˆ, เบ‚เป‰เบญเบเบšเปเปˆเบกเบตเป€เบงเบฅเบฒ, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป„เบ”เป‰เบเบฑเบš Docker เบ™เบตเป‰. เบกเบตเบซเบผเบฒเบเบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™, เบกเบฑเบ™ dizzying.

เป€เบ›เป‚เบ•: เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰. เปƒเบซเป‰เบ‚เป‰เบญเบเบŠเปˆเบงเบเป€เบˆเบปเป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ„เบดเบ”เบกเบฑเบ™เบญเบญเบเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบšเบญเบเบ‚เป‰เบญเบเบงเปˆเบฒเบญเบฑเบ™เปƒเบ”เปƒเบŠเป‰เบšเปเปˆเป„เบ”เป‰เบชเบณเบฅเบฑเบšเป€เบˆเบปเป‰เบฒ.

Vasily: เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบฎเบนเบšเบžเบฒเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เบซเบ™เป‰เบญเบ, เปเบ•เปˆเบกเบตเบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™.
Peter: เป€เบญเบปเบฒเบฎเบนเบšเบžเบฒเบš ubuntu, เบกเบฑเบ™เบกเบตเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบˆเบฐเบกเบฒเปƒเบ™ handy เบ•เปเปˆเบกเบฒ. เปเบฅเบฐเบขเปˆเบฒเบฅเบทเบกเปƒเบชเปˆเปเบ—เบฑเบเบซเบผเป‰เบฒเบชเบธเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เบชเบฐเป€เปเบต.

เปเบฅเบฐเปเบ–เบงเบ—เปเบฒเบญเบดเบ”เบˆเบฐเบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™ Dockerfile:

FROM ubuntu:latest

เป€เบ›เป‚เบ•: เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบซเบเบฑเบ‡เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ?
Vasily: เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ ruby, เบกเบตเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ•เปŒเปเบฅเบฐ daemons เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ„เบนเปˆเบ„เบงเบ™เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง.
เป€เบ›เป‚เบ•: เปเบกเปˆเบ™เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบเบฑเบ‡: ruby, bundler, nodejs, imagemagick เปเบฅเบฐเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เปƒเบ” ... เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เป€เบฎเบฑเบ”เบเบฒเบ™เบเบปเบเบฅเบฐเบ”เบฑเบšเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เปเบžเบฑเบเป€เบเบ”เปƒเบซเบกเปˆ.
Vasily: เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบชเป‰เบฒเบ‡เบœเบนเป‰เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบฎเบฒเบเบšเป?
เป€เบ›เป‚เบ•: Fuck เบกเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡ fool เบ›เบฐเบกเบฒเบ™เบ—เบตเปˆเบกเบตเบชเบดเบ”เบ—เบด.
Vasily: เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบฅเบฒ, เบ›เบฐเบกเบฒเบ™ 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/*

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, Igor Ivanovich, DevOps (เปเบ•เปˆ Ops เบซเบผเบฒเบเบเปˆเบงเบฒ Dev), เบฅเบฐเป€เบšเบตเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเบฎเป‰เบญเบ‡เบงเปˆเบฒ:

AI: Petya, เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ—เปเบฒเบฅเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบฒเบซเบฒเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ™เบตเป‰เบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ” ...

เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เบฐเบ—เบฐเบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ, Igor Ivanovich เป€เบขเบฑเบ™เบฅเบปเบ‡เปเบฅเบฐเป€เบฅเบตเปˆเบกเบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบ‚เบญเบ‡เบฅเบฒเบงเป€เบฎเบฑเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

AI: เป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบขเบนเปˆ?
Vasily: Peter เบเปเบฒเบฅเบฑเบ‡เบŠเปˆเบงเบเบ‚เป‰เบญเบเบชเป‰เบฒเบ‡ Dockerfile เบชเปเบฒเบฅเบฑเบšเป‚เบกเบ”เบนเบ™เปƒเบซเบกเปˆ.
AI: เปƒเบซเป‰เบ‚เป‰เบญเบเป€เบšเบดเปˆเบ‡ ... เป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เบซเบเบฑเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เบ™เบตเป‰เปเบกเปˆเบ™เบŠเบฑเป‰เบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ... เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡ dependencies เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบ„เบฑเบ”เบฅเบญเบ Gemfile! เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบ”เบต.
เป€เบ›เป‚เบ•: เบเบฐเบฅเบธเบ™เบฒเป„เบ›เบเปˆเบฝเบงเบเบฑเบšเบ—เบธเบฅเบฐเบเบดเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ„เบดเบ”เปเบ™เบงเปƒเบ”.

Igor Ivanovich เบ–เบญเบ™เบซเบฒเบเปƒเบˆเบขเปˆเบฒเบ‡เป‚เบชเบเป€เบชเบปเป‰เบฒเปเบฅเบฐเบญเบญเบเป„เบ›เบŠเบญเบเบซเบฒเบœเบนเป‰เบ—เบตเปˆเบ—เปเบฒเบฅเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เป€เบ›เป‚เบ•: เปเบกเปˆเบ™เปเบฅเป‰เบง, เปเบ•เปˆเบฅเบฒเบงเป€เบงเบปเป‰เบฒเบ–เบทเบเบ•เป‰เบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบซเบฑเบ”, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเบนเป‰เบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฎเบนเบšเบžเบฒเบš. เปเบฅเบฐเปƒเบซเป‰เบ•เบดเบ”เบ•เบฑเป‰เบ‡ ssh เปเบฅเบฐเบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เปƒเบ™เบ—เบฑเบ™เบ—เบต, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ daemon.

Vasily: เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเบ„เบฑเบ”เบฅเบญเบ Gemfile เปเบฅเบฐ Gemfile.lock, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบธเบเบขเปˆเบฒเบ‡, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเบ„เบฑเบ”เบฅเบญเบเป‚เบ„เบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”. เบ–เป‰เบฒ Gemfile เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡, เบŠเบฑเป‰เบ™เบˆเบฐเบ–เบทเบเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบ cache.
เป€เบ›เป‚เบ•: เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบˆเบปเป‰เบฒเบˆเบถเปˆเบ‡เบกเบตเบŠเบฑเป‰เบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ„เบฑเบ”เบฅเบญเบเบ—เบธเบเบขเปˆเบฒเบ‡เปƒเบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบง. เบชเบณเป€เบ™เบปเบฒเบ—เบฑเบ™เบ—เบต. เป€เบชเบฑเป‰เบ™เบ—เปเบฒเบญเบดเบ”เบซเบผเบฒเบ.

เบ”เบฝเบงเบ™เบตเป‰ 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/* 

เป€เบ›เป‚เบ•: เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบซเบเบฑเบ‡? เบ—เปˆเบฒเบ™เบกเบต config เบชเปเบฒเบฅเบฑเบš supervisor เบšเป?
Vasily: เบšเปเปˆ, เบšเปเปˆ. เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™เป„เบง.
เป€เบ›เป‚เบ•: เปเบฅเป‰เบงเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™. เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เปเบ•เป‰เบกเบ•เบปเบงเปœเบฑเบ‡เบชเบท init เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบ—เบธเบเบขเปˆเบฒเบ‡. เบ•เบปเบเบฅเบปเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ ssh, เบ”เป‰เบงเบ nohup, เป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš container เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบœเบดเบ”เบžเบฒเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบœเบนเป‰เบ„เบธเบกเบ‡เบฒเบ™เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™. เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเปเบฅเปˆเบ™เบœเบนเป‰เป‚เบ”เบเบชเบฒเบ™.
เบ–เบฒเบก: เปเบ•เปˆเบ‚เป‰เบญเบเบญเปˆเบฒเบ™เบงเปˆเบฒเบ„เบงเบ™เบกเบตเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบ™เบถเปˆเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ Docker เบˆเบฐเบฎเบนเป‰เบงเปˆเบฒเบกเบตเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”เปเบฅเบฐเบชเบฒเบกเบฒเบ” restart container เป„เบ”เป‰.
เบ›: เบขเปˆเบฒเบฅเบปเบšเบเบงเบ™เบซเบปเบงเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบ”เป‰เบงเบเป€เบฅเบทเปˆเบญเบ‡เป„เบฎเป‰เบชเบฒเบฅเบฐ. เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เปเบ™เบงเปƒเบ”? เบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปเบ™เบงเปƒเบ”เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฝเบง? เปƒเบซเป‰ Igor Ivanovich เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡, เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบฅเบฒเบงเป„เบ”เป‰เบฎเบฑเบšเป€เบ‡เบดเบ™เป€เบ”เบทเบญเบ™. เบงเบฝเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”. เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เปƒเบซเป‰เบฅเบฒเบงเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ‚เบญเบšเปƒเบˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™ Dockefile เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบง.

10 เบ™เบฒเบ—เบตเปเบฅเบฐเบชเบญเบ‡เบงเบดเบ”เบตเป‚เบญเบเปˆเบฝเบงเบเบฑเบšเปเบกเบงเบ•เปเปˆเบกเบฒ.

เบ–เบฒเบก: เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เปเบฅเป‰เบง. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ„เปเบฒเป€เบซเบฑเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.
P: เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™!

เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡ 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 เบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™, เบชเบฒเบเบ•เบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰ Igor Ivanovich เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบŠเบปเบฒเปเบฅเบฐเบ•เบฒเบ‚เบญเบ‡เบฅเบฒเบงเบˆเบฐเป€เบˆเบฑเบšเบ›เบงเบ”เบญเบตเบเบญเบฒเบ—เบดเบ”เบซเบ™เบถเปˆเบ‡. Dockerfile, เปเบ™เปˆเบ™เบญเบ™, เบญเบฒเบ”เบˆเบฐเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ, เบšเปเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบˆเปเบฒเบเบฑเบ”เบ•เปเปˆเบ„เบงเบฒเบกเบชเบปเบกเบšเบนเบ™เปเบšเบš. เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบ„เปเบฒเป€เบงเบปเป‰เบฒเบˆเบฒเบ Grigory Oster:

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเป€เบ—เบทเปˆเบญ
เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบ™เบŠเบตเบงเบดเบ”,
เปเบฅเบฐเบ—เปˆเบฒเบ™เบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡
เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เป€เบ”เบตเบ™เบ—เบฒเบ‡เปเบฎเบ‡เบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™,
เบซเบฑเบเป‚เบ„เบกเป„เบŸเปƒเบ™เบซเป‰เบญเบ‡เป‚เบ–เบ‡ -
เบ›เบฐเบŠเบฒเบŠเบปเบ™เบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ "เบ‚เปเบ‚เบญเบšเปƒเบˆ" เบเบฑเบšเบ—เปˆเบฒเบ™.
เป€เบˆเบปเป‰เบฒเบˆเบฐเบŠเปˆเบงเบเบ›เบฐเบŠเบฒเบŠเบปเบ™
เบ›เบฐเบขเบฑเบ”เป„เบŸเบŸเป‰เบฒ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™