ruby-on-rails - 添加除 Dockerfile 之外的项目文件夹

标签 ruby-on-rails docker

我正在尝试在 docker 容器中运行一个小型 Rails 应用程序。我已经接近了,但是我正在努力处理我的 Dockerfile。

我已将以下命令添加到我的 Dockerfile 以递归地添加我的项目文件夹中的所有文件。

ADD .

在这之后,我运行

RUN bundle install --deployment

但是,因为我的 ADD 命令也添加了 Dockerfile,这意味着每次我编辑 Dockerfile 时我的图像缓存都会中断,迫使我重新捆绑。

根据https://docs.docker.com/reference/builder/#the-dockerignore-file ,我可以使用 .dockerignore 文件来忽略 Dockerfile,但这会导致 docker build 命令失败并显示

2014/09/17 22:12:46 Dockerfile was excluded by .dockerignore pattern 'Dockerfile'

我怎样才能轻松地将我的项目添加到我的镜像中,但排除 Dockerfile,这样我就不会破坏 docker 镜像缓存?

最佳答案

您在对@Kuhess 答案的评论中澄清说,实际问题是“docker 图像缓存失效导致捆绑安装再次运行”,这有助于为您提供答案。

我一直在为我的 rails 4.1.* 应用程序使用如下所示的 Dockerfile。通过首先添加 Gemfile*,然后运行捆绑安装,然后才添加应用程序的其余部分,捆绑安装步骤将被缓存,除非其中一个 Gemfile* 文件发生更改。

FROM ruby:2.1.3

RUN adduser --disabled-password --home=/rails --gecos "" rails

RUN gem install bundler --no-ri --no-rdoc
RUN gem install -f rake --no-ri --no-rdoc

RUN mkdir /myapp
WORKDIR /myapp

ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install

ADD . /myapp

RUN chown -R rails:rails /myapp

USER rails
EXPOSE 3000
ENV RAILS_ENV production
CMD bundle exec rails server -p 3000

我的 Dockerfile 位于应用程序的根目录中,但对其(或应用程序的任何其他部分)的更改不会导致用于捆绑安装的图像缓存中断,因为它们是在 RUN 之后添加的。唯一破坏它的是对 Gemfile* 的更改,这是正确的。

仅供引用,我的 .dockerignore 文件如下所示:

.git
log
vendor/bundle

关于ruby-on-rails - 添加除 Dockerfile 之外的项目文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25899541/

相关文章:

ruby-on-rails - 如何从字符串插值中逃脱#{

ruby-on-rails - 我如何与 Ruby 和 Thor 分开争论?

java - 如何使用 boot2docker 在 mac OS X 中启用 docker Remote api Rest?

docker - minikube - x509 : certificate signed by unknown authority

docker - Haproxy 和间歇性 503 问题

ruby-on-rails - Rails控制台和Pow中的环境变量

ruby-on-rails - Ruby on Rails 上的验证码建议

ruby-on-rails - 如何将救援 block 移动到方法

windows - 对 Docker-On-Windows 尝试运行 hello-world 进行故障排除

amazon-web-services - AWS SageMaker无权执行: ecr:CreateRepository on resource: *