Зачем вам копировать ваш Gemfile.lock в Docker, а затем сразу же перезаписывать его? - PullRequest
0 голосов
/ 29 апреля 2018

Зачем вам копировать Gemfile.lock, запускать bundle install для создания нового Gemfile.lock, а затем сразу же копировать текущий каталог, содержащий исходный Gemfile.lock, и перезаписывать Gemfile.lock, который был только что создан Bundler в Докер контейнер?

Кроме того, почему вы можете не иметь EXPOSE 3000?

https://docs.docker.com/compose/rails/#define-the-project

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

Это не единственное место, где это происходит. Это также сделано здесь, что кажется довольно официальным. Может быть, я упускаю фундаментальный аспект Docker?

https://hub.docker.com/_/ruby/

COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .

1 Ответ

0 голосов
/ 29 апреля 2018

Больше предположение, чем ответ, но иногда вы упорядочиваете шаги в Dockerfile s немного по-другому, чтобы улучшить механизм кэширования. Когда вы изменяете вещи в своем приложении, менее вероятно, что это повлияет на Gemfile s, поэтому вам не нужно делать bundle install после всего, что вы изменили. Порядок действий таким образом избавляет от необходимости выполнять bundle install для изменений в вашем приложении, которые не влияют на Gemfile s.

Документация по кешированию сборки: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#build-cache

...