Keyn Asked:2020-06-17 17:24:39 +0800 CST2020-06-17 17:24:39 +0800 CST 2020-06-17 17:24:39 +0800 CST Docker 构建顺序 772 Dockerfiles 通常先复制依赖文件(gemfile/package.json 等),然后安装依赖项。然后复制整个应用程序。 为什么不建议只复制整个文件夹并安装依赖项? ruby-on-rails 1 个回答 Voted Best Answer Nik 2020-06-18T14:04:21+08:002020-06-18T14:04:21+08:00 再会。 我必须定期将 Rails 应用程序“打包”到 docker 映像中,并为自己记录一些要点。 回答问题: 为什么不建议只复制整个文件夹并安装依赖项? 我想是因为图像组装不会尽可能快。 假设用你的应用构建了一个 docker 镜像后,你需要继续细化这个应用,并在镜像中检查它的运行情况。 如果您的 Dockerfile 包含以下内容: ... COPY . /app/folder RUN bundle install 然后每次更新任何文件时,docker 都会复制文件并再次安装依赖项。这需要很多时间。 如果你这样写: COPY Gemfile* /app/folder RUN bundle install ... COPY . /app/folder 那么依赖项将有条件地“安装”并且图像的组装将更快。 您还可以通过“打包”rails 应用程序依赖项来加速映像构建 bundle package gem 将被放置在/vendor/cache目录和 Dockerfile 中,然后你可以这样写: COPY Gemfile* /app/folder COPY vendor/cache ./vendor/cache RUN bundle install --local ... COPY . /app/folder 在我看来,随着项目的频繁改进,这样的配置可以显着减少构建图像的时间。
再会。
我必须定期将 Rails 应用程序“打包”到 docker 映像中,并为自己记录一些要点。
回答问题:
我想是因为图像组装不会尽可能快。
假设用你的应用构建了一个 docker 镜像后,你需要继续细化这个应用,并在镜像中检查它的运行情况。
如果您的 Dockerfile 包含以下内容:
然后每次更新任何文件时,docker 都会复制文件并再次安装依赖项。这需要很多时间。
如果你这样写:
那么依赖项将有条件地“安装”并且图像的组装将更快。
您还可以通过“打包”rails 应用程序依赖项来加速映像构建
gem 将被放置在/vendor/cache目录和 Dockerfile 中,然后你可以这样写:
在我看来,随着项目的频繁改进,这样的配置可以显着减少构建图像的时间。