gpt4 book ai didi

ruby - Docker:每当我需要添加软件时,是否需要从头开始重建容器?

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:37 32 4
gpt4 key购买 nike

所以我正在试验 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"

在制作了几个模型和一个 Controller 之后,我决定为项目使用 Slim 模板并将其添加到我的 Gemfile

gem 'slim'

我希望能够通过在其上运行 bundle install 来更新对 Web 容器的依赖:

docker-compose run web bundle install

起初似乎有效,它安装了 gem 及其依赖项。然而,这些只是构建容器的一次性副本。当我下次运行 docker-compose up 时,它不会留下来。

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

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

最佳答案

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

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

关于ruby - Docker:每当我需要添加软件时,是否需要从头开始重建容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29640425/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com