首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker:当我需要添加软件时,是否需要从头开始重新构建容器?

Docker:当我需要添加软件时,是否需要从头开始重新构建容器?
EN

Stack Overflow用户
提问于 2015-04-15 10:08:23
回答 1查看 1.3K关注 0票数 3

因此,我正在试验Docker,我设置了一个Rails应用程序与postgres对话。一切正常,我可以访问应用程序,迁移数据库等。

代码语言:javascript
复制
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中

代码语言:javascript
复制
gem 'slim'

我希望能够通过在web容器上运行bundle install来更新这个依赖关系:

代码语言:javascript
复制
docker-compose run web bundle install

它会安装gem和它的依赖项。然而,这些只是构建的容器的一次性副本。当我下一次运行docker-compose up时,它不会停留。

永久获取gem的唯一方法是从头开始重新构建web,这可能需要3-4分钟从头开始安装所有的gem,这主要是由于nokigiri。

这是“更新”基础图像的唯一方法吗?我希望我只有在修改Dockerfile本身时才需要重新构建,而从头开始重新构建是有意义的。

EN

回答 1

Stack Overflow用户

发布于 2015-04-15 10:39:44

如果需要,您还可以通过“提交”您对容器所做的更改来更新现有映像。语法为docker commit <container ID> <image>

或者,您也可以利用构建缓存,方法是将包安装命令分离到单独的gem安装中。然后你可以将你的新gem添加到最后,当你重建图像时,它将重用所有以前的层。考虑到可能存在重叠的依赖关系,这可能并不理想。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29640425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档