Docker: Π²Ρ€Π΅Π΄Π½ΠΈ ΡΡŠΠ²Π΅Ρ‚ΠΈ

Docker: Π²Ρ€Π΅Π΄Π½ΠΈ ΡΡŠΠ²Π΅Ρ‚ΠΈ

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ… Π΄Π° ΡˆΠΎΡ„ΠΈΡ€Π°ΠΌ, Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ ΡƒΡ€ΠΎΠΊ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡŠΡ‚ извСднъТ Ρ‚Ρ€ΡŠΠ³Π½Π° Π½Π°Π·Π°Π΄ Π½Π° ΠΊΡ€ΡŠΡΡ‚ΠΎΠ²ΠΈΡ‰Π΅Ρ‚ΠΎ, Π° послС ΠΊΠ°Π·Π°, Ρ‡Π΅ Ρ‚Π°ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ β€” Π½ΠΈΠΊΠΎΠ³Π°. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π³ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ… Π²Π΅Π΄Π½Π°Π³Π° ΠΈ Π·Π° цял ΠΆΠΈΠ²ΠΎΡ‚.

Π§Π΅Ρ‚Π΅Ρˆ Π½Π° Π΄Π΅Ρ†Π°Ρ‚Π° "Π’Ρ€Π΅Π΄Π½ΠΈ ΡΡŠΠ²Π΅Ρ‚ΠΈ" Π½Π° Π“Ρ€ΠΈΠ³ΠΎΡ€ΠΈΠΉ ΠžΡΡ‚Π΅Ρ€ ΠΈ виТдаш ΠΊΠΎΠ»ΠΊΠΎ лСсно ΠΈ нСусСтно Π·Π° тях става ясно, Ρ‡Π΅ Ρ‚Π°ΠΊΠ° Π½Π΅ трябва Π΄Π° сС ΠΏΡ€Π°Π²ΠΈ.

Π—Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° пишСш 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster