ααααααα»ααααααΎαα‘αΆα αα αααααααααΌα ααααΌααΎαα‘αΆαα αΌαααααΌαααααααααααα αααΆα α αΎααααααΆαααααα·ααΆαααΆα’ααααα·ααα½αααααΎαααααααα - αα·ααααααΆαααααααα αααα»αααΉαααΎαα αααΆαααααααααΆαα αα·αααααα½αααΈαα·ααααααααα»αα
α’αααααΆαα’αΆα "ααααΌααααΆααα·αααα’" ααα Grigory Oster ααααα»ααΆα α αΎαα’αααααΎαααΈαααααααααΆααααα½α αα·ααααααααααΆαα· ααΆααααΊα‘αΎαααΎαα½αααααααα½ααααα·ααα½αααααΎααααααα
α’αααααααΆα αααΎαααααΌαααΆααααααα’αααΈααααααααα Dockerfile α±ααααΆαααααΉαααααΌαα ααα»αααααααα»ααα·αααΆαααααααΆααααΆαααααΆαα’αααΈααααααααα Dockerfiles αα·αααααΉαααααΌαααα αααα»ααααα»ααααααα ααααααααα α αΎααααα ααααΆαα αααα»αααααααααααααα»αααα½αααΆαααΆαααΆαααα ααΉαααΆαα―αααΆα dockerfiles αααααααα·α ααΆααα»αα
αα½α’ααα ααααΆαααΆα αα·α Dockerfile ααΆααα’ααααΊααααα·αα ααΎααααΆαααααα½αα―α αα»ααααα
ααΆααααααΎα Dockerfile, α’αΆααααα αα·ααα½αα±αααααααααΆα
Peter (Senior java/rubby/php developer): αα αααα·α Vasily ααΎα’αααααΆαα’αΆααα‘αΌααααΌαα»αααααΈαα
Docker αα½α
α αΎαα¬αα
?
Vasily (junior)α αα αααα»ααα·αααΆαααααα αααα»ααα·αα’αΆα
αααααααΆαααΆαα½α Docker αααααΆαααα ααΆαβα’αααααβααΆβα
αααΎαβαα
βααΎβααΆ ααΆβαα·αβαα»αα
αααααα»αα ααΎαβααΆαβααΆαβαααααβααΆαβααΈβαα½αβααααΆαβαα»αα α’αα»ααααΆαα±αααααα»ααα½αα’ααα ααΎαααΉααααααααΆαααΆαα αααα»αααααΎαααΆααααα ααααΆαααααα»αααΈα’αααΈααααα·αααααΎαααΆααααααΆααα’αααα
Vasilyα αααα»αβαα·αβα’αΆα
βααααΎαβααΎαβααΌαααΆαβααΌαααααΆαβααΎααααΈβα±ααβααΆβααΆαβαα·α
αα½α
βαααα»αβ ααα»ααααβααΆαβα’αααΈβαααααβαααΆαβαααβα’αααβααααΌαβααΆαα
αααααα»αα ααααΌαααΆαα’ααΌααα»αααΌ ααΆααΆαα’αααΈααααααααΆααααα’αααααααΌαααΆαα α αΎαβα’αααΈβαααβαα·αβα
αΆαβααΆα
αβα
αααΎαβααΉαβααβααΆβααααααααβαα
βαααβαααααα α αΎααα»αααααα
ααΆααααααΆαα
α»ααααααααΎααααΈα±ααααααα
α»αααααααααα»αααΆαα·α
αα
α
α αΎααααααΆααααΈαα½αααα α‘αΎααααα»α Dockerfile:
FROM ubuntu:latest
αααααα»αα ααΎααΆαα’αααΈαααααΆαα ααΎααΎαααααΎα’αααΈααΎααααΈααααααααΌαα»αααααααΎα?
Vasily: ααΌα
αααα ruby ββααΆα web server α αΎααααα·αααααΆααααααΈαααΈαα½αααααααΌαααΆαααΎαααααΎαααΆαα
αααααα»αα ααΆα ααΎβααΎαβααααΌαβααΆαβα’αααΈα ruby, bundler, nodejs, imagemagick αα·αβα’αααΈβαααααβααα... α αΎαβαααα»αβαααβααΆαα½αβααααΆβααα ααααΎβααΆαβα’αΆαααααβααΎααααΈβααα½αβααΆαβαααα
ααβααααΈα
Vasilyα α αΎαβααΎαβααΉαβαα·αβαααααΎαβα’αααβααααΎβααΎααααΈβαα»αβα²ααβααΎαβαααα·αβαα
βαααααβα«α?
αααααα»αα αααααΆ α’ααα
αΉαα’ααααα
ααααααΌααααααααααααααα·αααα·α
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 αααααΆααα α»αα αΎαα αΆααααααΎααααααααα’αααΈααααα·ααααα½αααΆαααΆαααααααΆαααααα»αααααΎαα ααΈαααα
α’αΆα : ααΎα’ααααααα»αααααΎα’αααΈ?
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/*
αααααα»αα ααΌα
αααα ααΎβα’αααΈβαα
βααα? ααΎα’αααααΆαααΆαααααααα
ααΆαααααααααααααΆααα’αααααααααααααα?
Vasily: αα ααα ααα»αααααααα»αααΉαααααΎααΆα±ααααΏαα
αααααα»αα αααααΆααααα’αααααΉαααααΎααΆα α₯α‘αΌαβααα α
αΌαβααΎαβααΌαβα
ααβααΌαβααααααΈα init αααβααΉαβααΎαβααααΎαααΆαβαααααβαααΆαα αα·αα’αΈαα ααΌα
ααααα’αααα
αΆααααααΎα ssh ααΆαα½α nohup ααΌα
ααααααΎαα’αΆα
ααααΆαααα
αα»αααΊααα α αΎαααΎαααΆααΆαα’αααΈαα»αα αααααΆααααααααΎαααΆαα’ααααααααααααααΆαααααααΌα
ααααΆα α’ααα
αΉαα’αααααααΆαααααααα’αααααααΎαα
αααα½αα ααα»αααααααα»αααΆαα’αΆαααΆαα½αααααΆαααααΎαααΆααα½α ααΌα
αααα Docker ααΉαααΉαααΆααΆαα’αααΈαα½ααα»αααααααααΈ α αΎαα’αΆα
α
αΆααααααΎααα»αααΊαααα‘αΎααα·αααΆαα
P: αα»αααααΆαααααΆαααααα’ααααααααα ααα»ααααα α αΎαααΆααΌαα
αααΆααααα
ααα? ααΎα’αααααααΎαααΆαααΆααα’ααααααααααααααΆαααα»αααααΎαααΆααααα½α? α’αα»ααααΆαα±αα Igor Ivanovich αα·αα’αααΈαααααααΆαααΆαα·αααααααααΆααααααΆαα’αααΈαααααΆααααα½αααΆαααααΆαααααααααα ααΆαααΆαααααααΎαααΊαααααααΌαα α αΎαααΆααΌαα
ααΌαα±ααααΆαααα·ααΆαααΆα’ααα»ααααααΎαααΆαααααα Dockefile α±ααααΆααα
10 ααΆααΈ αα·αααΈααα’αΌααΈαα’αααΈααααΆαα ααααααααα
αααα½αα αααα»αβααΆαβααααΎβαααααβαααΆαα αααα»αααΆαααααααααα·αααααααααααα
ααΈα αααα αΆααααα»α!
ααααα α»αααααααα 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