
ΠΠΎΠ³Π°ΡΠΎ Π·Π°ΠΏΠΎΡΠ²Π°Ρ Π΄Π° ΡΠΎΡΠΈΡΠ°ΠΌ, Π½Π° ΠΏΡΡΠ²ΠΈΡ ΡΡΠΎΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΎΡΡΡ ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ ΡΡΡΠ³Π½Π° Π½Π°Π·Π°Π΄ Π½Π° ΠΊΡΡΡΡΠΎΠ²ΠΈΡΠ΅ΡΠΎ, Π° ΠΏΠΎΡΠ»Π΅ ΠΊΠ°Π·Π°, ΡΠ΅ ΡΠ°ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ β Π½ΠΈΠΊΠΎΠ³Π°. Π’ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π³ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ Π²Π΅Π΄Π½Π°Π³Π° ΠΈ Π·Π° ΡΡΠ» ΠΆΠΈΠ²ΠΎΡ.
Π§Π΅ΡΠ΅Ρ Π½Π° Π΄Π΅ΡΠ°ΡΠ° "ΠΡΠ΅Π΄Π½ΠΈ ΡΡΠ²Π΅ΡΠΈ" Π½Π° ΠΡΠΈΠ³ΠΎΡΠΈΠΉ ΠΡΡΠ΅Ρ ΠΈ Π²ΠΈΠΆΠ΄Π°Ρ ΠΊΠΎΠ»ΠΊΠΎ Π»Π΅ΡΠ½ΠΎ ΠΈ Π½Π΅ΡΡΠ΅ΡΠ½ΠΎ Π·Π° ΡΡΡ ΡΡΠ°Π²Π° ΡΡΠ½ΠΎ, ΡΠ΅ ΡΠ°ΠΊΠ° Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ.
ΠΠ° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡΠ΅Ρ Dockerfile ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΊΡΠΏ ΡΡΠ°ΡΠΈΠΈ. ΠΠΎ Π½ΠΈΠΊΡΠ΄Π΅ Π½Π΅ ΡΡΠΌ ΠΏΠΎΠΏΠ°Π΄Π°Π» Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΏΠΈΡΠ°Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ Dockerfile. ΠΠ°ΠΏΡΠ»Π²Π°ΠΌ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠΏΡΡΠΊ. Π, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°, ΡΠ°ΠΊΠΈΠ²Π° Π΄ΠΎΠΊΠ΅ΡΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ ΡΡΠ°Π½Π°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ.
ΠΡΠΈΡΠΊΠΈ Π³Π΅ΡΠΎΠΈ, ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΈ Dockerfile ΡΠ° ΠΈΠ·ΠΌΠΈΡΠ»Π΅Π½ΠΈ. ΠΠΊΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅, ΡΡΠΆΠ°Π»ΡΠ²Π°ΠΌ.
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Dockerfile, Π·Π»ΠΎΠ²Π΅Ρ ΠΈ ΡΠΆΠ°ΡΠ΅Π½
ΠΠ΅ΡΡΡ (ΡΡΠ°ΡΡΠΈ java/ruby/php ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ): ΠΠΎΠ»Π΅Π³Π° ΠΠ°ΡΠΈΠ»ΠΈΠΉ, ΡΠΈ Π²Π΅ΡΠ΅ Π»ΠΈ ΠΊΠ°ΡΠΈ Π½ΠΎΠ²ΠΈΡ ΠΌΠΎΠ΄ΡΠ» Π² Docker?
ΠΠ°ΡΠΈΠ»ΠΈΠΉ (ΠΌΠ»Π°Π΄ΡΠΈ): ΠΠ΅, Π½Π΅ ΡΡΠΏΡΡ
, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ° ΡΠΎΠ·ΠΈ Docker. Π’ΠΎΠ»ΠΊΠΎΠ²Π° ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π½Π΅Π³ΠΎ, ΠΎΡΠΈΡΠ΅ ΠΌΠΈ ΡΠ΅ Π·Π°ΠΌΡΠ³Π»ΡΠ²Π°Ρ.
ΠΠ΅ΡΡΡ: ΠΠ°ΡΠΈΡΡ ΠΊΡΠ°Π΅Π½ ΡΡΠΎΠΊ ΠΈΠ·ΡΠ΅ΡΠ΅ ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π°. Π₯Π°ΠΉΠ΄Π΅, ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π°, Π² ΠΏΡΠΎΡΠ΅ΡΠ° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ. Π Π°Π·ΠΊΠ°Π·Π²Π°ΠΉ, ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ ΡΠΈ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°.
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: ΠΠ΅ ΠΌΠΎΠ³Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ° Π±Π°Π·ΠΎΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π·, ΠΊΠΎΠΉΡΠΎ Π΄Π° Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½, Π½ΠΎ Π΄Π° ΠΈΠΌΠ° Π²ΡΠΈΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠ΅ΡΡΡ: ΠΠ·Π΅ΠΌΠΈ ΠΎΠ±ΡΠ°Π·Π° ubuntu, Π² Π½Π΅Π³ΠΎ ΠΈΠΌΠ° Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠΈ ΡΡΡΠ±Π²Π°. Π Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π»ΠΈΡΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅ ΠΏΠ°ΠΊ ΡΠ΅ ΡΠΈ Π΅ ΠΎΡ ΠΏΠΎΠ»Π·Π°. Π Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉ Π΄Π° ΡΠ»ΠΎΠΆΠΈΡ ΡΠ°Π³ latest, Π·Π° Π΄Π° Π΅ Π²Π΅ΡΡΠΈΡΡΠ° Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°.
Π Π² Dockerfile ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π° ΠΏΡΡΠ²ΠΈΡΡ ΡΠ΅Π΄:
FROM ubuntu:latestΠΠ΅ΡΡΡ: ΠΠ°ΠΊΠ²ΠΎ ΡΠ»Π΅Π΄Π²Π°, Ρ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΠΈΡΠ°Ρ
ΠΌΠ΅ Π½Π°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»?
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: Π, ΡΠ°ΠΊΠ° Π΅ ruby, ΡΠ°ΠΌ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΡΠ΅Π± ΡΡΡΠ²ΡΡ ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ»ΡΠΆΠ΅Π±Π½ΠΈ Π΄Π΅ΠΌΠΎΠ½Π°.
ΠΠ΅ΡΡΡ: Π―ΡΠ½ΠΎ, ΠΊΠ°ΠΊΠ²ΠΎ Π½ΠΈ ΡΡΡΠ±Π²Π°: ruby, bundler, nodejs, imagemagick ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π»ΠΈ ΠΎΡΠ΅ β¦ Π Π·Π°Π΅Π΄Π½ΠΎ, Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ.
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: ΠΡΠΌΠ° Π»ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π·Π° Π΄Π° Π½Π΅ ΡΠ°Π±ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄ root?
ΠΠ΅ΡΡΡ: Π, Π½Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ Ρ ΠΏΡΠ°Π²Π°ΡΠ° ΠΏΠΎΡΠ»Π΅.
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: ΠΡΠΆΠ΄Π°Ρ ΡΠ΅ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅, ΠΌΠΈΠ½ΡΡΠΈ 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 (Π½ΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ Ops, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Dev), ΠΊΡΠ΅ΡΠ΅ΠΉΠΊΠΈ:
Π.Π.: ΠΠ΅ΡΡ, ΡΠ²ΠΎΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΠΏΠ°ΠΊ ΡΡΡΠΏΠΈΡ Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΠ, ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ²ΡΡΡΠΈ ΡΠΎΠ²Π°β¦
Π‘Π»Π΅Π΄ ΠΊΡΠ°ΡΠΊΠ° ΡΠΏΠΎΡΠ°, ΠΠ³ΠΎΡ ΠΠ²Π°Π½ΠΎΠ²ΠΈΡ ΡΠ΅ ΡΡΠΏΠΎΠΊΠΎΡΠ²Π° ΠΈ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ ΠΏΡΠ°Π²ΡΡ ΠΊΠΎΠ»Π΅Π³ΠΈΡΠ΅ ΡΡΠΊ.
ΠΠ: Π‘ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ° Π·Π°Π΅ΡΠΈ?
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: ΠΠ΅ΡΡΡ ΠΌΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΡΡΡΡΠ°Π²Ρ Dockerfile Π·Π° Π½ΠΎΠ²ΠΈΡ ΠΌΠΎΠ΄ΡΠ».
ΠΠ: ΠΠ°ΠΉΡΠ΅ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π°β¦ ΠΠ°ΠΊΠ²ΠΎ ΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ, Π²ΠΈΠ΅ ΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Ρ ΠΎΡΠ΄Π΅Π»Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΡΠ»ΠΎΠΉβ¦ ΠΠ°ΠΊ ΡΠ°ΠΊΠ° ΠΏΠΎΡΡΠ°Π²ΡΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π°ΠΊΠΎ Π½Π΅ ΡΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°Π»ΠΈ Gemfile! Π ΠΈΠ·ΠΎΠ±ΡΠΎ, ΡΠΎΠ²Π° Π½Π΅ Π²ΡΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°.
ΠΠ΅ΡΡΡ: ΠΠΎΠ»Ρ, ΠΈΠ΄Π΅ΡΠ΅ ΠΏΠΎ Π²Π°ΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ, Π½ΠΈΠ΅ ΡΠ΅ ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠΊ.
ΠΠ³ΠΎΡ ΠΠ²Π°Π½ΠΎΠ²ΠΈΡ ΡΡΠΆΠ½ΠΎ Π²ΡΠ·Π΄ΡΡ Π²Π° ΠΈ ΠΎΡΠΈΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠΎΠΉ Π΅ ΡΡΡΠΏΠΈΠ» ΠΠ.
ΠΠ΅ΡΡΡ: ΠΠ°, Π½ΠΎ ΠΊΠ°Π·Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π·Π° ΠΊΠΎΠ΄Π°, ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π² ΠΈΠΌΠΈΠ΄ΠΆΠ°. Π Π½Π΅ΠΊΠ° Π²Π΅Π΄Π½Π°Π³Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ssh ΠΈ supervisor, Π·Π°ΡΠΎΡΠΎ ΠΊΠ°ΠΊ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π΄Π΅ΠΌΠΎΠ½ΠΈΡΠ΅.
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: ΠΡΡΠ²ΠΎ ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°ΠΌ 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/* ΠΠ΅ΡΡΡ: Π’Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ»Π΅Π΄Π²Π°. ΠΠΌΠ°Ρ Π»ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° supervisor?
ΠΠ°ΡΠΈΠ»ΠΈΠΉ: ΠΠ΅, Π½ΡΠΌΠ°ΠΌ. ΠΠΎ Π±ΡΡΠ·ΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Ρ.
ΠΠ΅ΡΡΡ: ΠΠΎΡΠ»Π΅ ΡΠ΅ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡ. ΠΠ΅ΠΊΠ° ΡΠ΅Π³Π° Π΄Π° Π½Π°ΡΠ΅ΡΡΠ°Π΅ΠΌ init ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Π²ΡΠΈΡΠΊΠΎ. ΠΠ½Π°ΡΠΈ, ΠΏΡΡΠΊΠ°Ρ ssh Ρ nohup, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΠΌ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄. ΠΠΎΡΠ»Π΅ ΡΠ°ΠΊΠ° ΡΡΡΠΎ ΠΏΡΡΠΊΠ°Ρ supervisor. Π ΠΏΡΠΎΡΡΠΎ ΡΠ΅ ΠΏΡΡΠ½Π΅Ρ passenger.
Π: ΠΠΎ ΡΡΡ
, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ, ΡΠ°ΠΊΠ° Docker ΡΠ΅ Π·Π½Π°Π΅, ΡΠ΅ Π½Π΅ΡΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄ ΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°.
Π: ΠΠ΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΉ Ρ Π³Π»ΡΠΏΠΎΡΡΠΈ. Π ΠΈΠ·ΠΎΠ±ΡΠΎ ΠΊΠ°ΠΊ? ΠΠ°ΠΊ ΡΠ΅ Π·Π°ΠΏΡΡΠ½Π΅Ρ Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π² Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅Ρ? ΠΠ΅ΠΊΠ° ΠΠ³ΠΎΡ ΠΠ²Π°Π½ΠΎΠ²ΠΈΡ ΠΌΠΈΡΠ»ΠΈ Π·Π° ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ°, Π½Π΅ Π½Π°ΠΏΡΠ°Π·Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π·Π°ΠΏΠ»Π°ΡΠ°. ΠΠ°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π΅ Π΄Π° ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄. Π Π΄Π°, Π½Π΅ΠΊΠ° Π΄Π° ΠΌΡ ΠΊΠ°ΠΆΠ΅ΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ, ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Ρ
ΠΌΠ΅ Dockerfile Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ.
Π‘Π»Π΅Π΄ 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"]Π: ΠΡΠ»ΠΈΡΠ½ΠΎ, Ρ Π°ΡΠ΅ΡΠ²Π° ΠΌΠΈ. Π ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ Π½Π° Π±ΡΠ»Π³Π°ΡΡΠΊΠΈ, ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ ΡΠ΅ΡΠ»ΠΈΠ²ΠΎ, Π²ΡΠ΅ΠΊΠΈ Π±ΠΈ ΡΠ°Π±ΠΎΡΠΈΠ» ΡΠ°ΠΊΠ°. ΠΠ°ΡΡΠΈΡ ΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΎ, Π·Π°Π½Π°ΠΏΡΠ΅Π΄ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌ. Π₯Π°ΠΉΠ΄Π΅ Π΄Π° ΠΎΡΠΈΠ΄Π΅ΠΌ Π½Π° ΠΊΠ°ΡΠ΅β¦
Π, Π΅ΡΠΎ Π½ΠΈ Ρ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ ΡΠΆΠ°ΡΠ½ΠΈΡ Dockerfile, ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΠΠ³ΠΎΡ ΠΠ²Π°Π½ΠΎΠ²ΠΈΡ ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π° ΡΠ΅ ΡΠ²ΠΎΠ»Π½ΠΈ, Π° ΠΎΡΠΈΡΠ΅ ΠΌΡ ΡΠ΅ Π±ΠΎΠ»ΡΡ ΠΎΡΠ΅ ΡΠ΅Π΄ΠΌΠΈΡΠ°. Dockerfile, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈ ΠΏΠΎ-Π»ΠΎΡ, Π½ΡΠΌΠ° ΠΏΡΠ΅Π΄Π΅Π» Π½Π° ΡΡΠ²ΡΡΡΠ΅Π½ΡΡΠ²ΠΎΡΠΎ. ΠΠΎ Π·Π° Π½Π°ΡΠ°Π»ΠΎ ΠΈ ΡΠ°ΠΊΠ° Π΅ Π΄ΠΎΠ±ΡΠ΅.
ΠΡΠΊΠ°ΠΌ Π΄Π° Π·Π°Π²ΡΡΡΠ° Ρ ΡΠΈΡΠ°Ρ Π½Π° ΠΡΠΈΠ³ΠΎΡΠΈΠΉ ΠΡΡΡΡ:
ΠΠΊΠΎ Π² ΠΆΠΈΠ²ΠΎΡΠ° Π²ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ
ΠΠΎΡ Π΅ ΠΏΡΡΡΡ Π²ΠΈ,
Π Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΠΎΡ ΠΊΡΠ΄Π΅ Π΄Π°
ΠΠ°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΡΡΠ΄ΠΎΠ²ΠΈΡ ΡΠΈ ΠΏΡΡ,
ΠΡΠΈΠ±ΠΈΠ²Π°ΠΉΡΠ΅ ΠΊΡΡΡΠΊΠΈ Π² ΡΡΡΠ»Π±ΠΈΡΠ°ΡΠ° β
Π₯ΠΎΡΠ°ΡΠ° ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°Ρ "ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ".
Π©Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠΎΠ΄Π°
ΠΠ° ΡΠΏΠ΅ΡΡΡΠ²Π° Π΅Π»Π΅ΠΊΡΡΠΈΡΠ΅ΡΡΠ²ΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
