所以我正在试验 Docker,并设置了一个与 postgres 对话的 Rails 应用程序。一切正常,我可以访问应用程序、迁移数据库等。
Dockerfile
FROM ruby:2.2.1
RUN apt-get update -qq && apt-get install -y build-essential
RUN apt-get install -y libxml2-dev libxslt1-dev
RUN apt-get install -y libqt4-webkit libqt4-dev xvfb
RUN apt-get install -y nodejs
ENV APP_HOME /code
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
RUN bundle install
docker-compose.yml
web:
build: .
command: bin/rails server --port 3000 --binding 0.0.0.0
ports:
- "3000:3000"
volumes:
- .:/code
links:
- db
db:
image: postgres
ports:
- "5432:5432"
在制作了几个模型和一个控制器后,我决定为项目使用 Slim 模板并将其添加到我的 Gemfile
gem 'slim'
我本来希望能够通过在其上运行 bundle install 来更新对 Web 容器的依赖:
docker-compose run web bundle install
起初似乎可行,它安装了 gem 及其依赖项。然而,这些只是构建容器的一次性副本。下次我运行 docker-compose up 时,IT 不会留下来。
永久获得 gem 的唯一方法是再次从头开始构建 web,这可能需要 3-4 分钟才能再次从头安装所有 gem,这主要是由于 nokigiri。
这是“更新”基本映像的唯一方法吗?我希望我只需要在修改 Dockerfile 本身时进行重建,而从头开始重建是有意义的。