【问题标题】:Docker volume binding: Base image vs derivative imageDocker 卷绑定:基础镜像与衍生镜像
【发布时间】:2016-09-04 06:11:03
【问题描述】:

看起来您run 时使用的任何卷绑定 (-v) 基本映像都不会保留在您提交的派生映像中,并且卷绑定选项必须是每次通过run派生的图片。

示例:


docker run -it -v /opt/hostappsdir:/apps ubuntu

在容器中进行更改(命名为:john_doe)并提交到新图像(local/test

docker commit john_doe local/test

那么,这里就不列出主机目录/opt/hostappsdir中的文件了

docker run --rm local/test ls /apps

但是这个可以做到

docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps

有什么办法可以避免每次都通过卷绑定选项?

【问题讨论】:

  • 如果对我的问题投反对票的人能解释一下问题所在,那将会很有帮助。
  • 好的。更正了commit 命令中的语法错误。等待答案...
  • 我也不知道为什么这个问题被否决了 - 这是一个合法的争议,因此是一个需要澄清的有效问题

标签: docker


【解决方案1】:

根据定义,卷不是容器层的一部分,因此不会成为您从容器创建图像时提交的层的一部分。

如果你喜欢添加您的特定配置,添加一些扩展,添加一些包,您应该始终从基础映像派生,绝不只是“提交”任意的,而不是正式的更改。

使用

创建一个 Dockerfile
from <baseimage>
COPY yourconfig /etc/somewhere
COPY yourasset /var/www

RUN sed ... \ // change some configuration
  && apt-get update && apt-get install curl // some packages

提示:我自己不喜欢“将容器更改提交到图像”的想法 - 这是有风险的,每次都不会产生相同的结果,并且不会正式确定您实际更改的内容。你会遇到困难的时候。由于基础映像的更新而更新您的映像,因为您不知道在那之前您做了什么 - 即使您已经将其写下来,一次又一次地做这件事需要付出很多努力。

【讨论】:

  • 谢谢。您回复的第一行是我想要的答案。我的意思是添加额外的 apt 包。代码更改只会在绑定到容器的主机目录上进行。
  • 我可能生活在岩石下或其他地方,但我刚刚了解到docker-compose...哇!这正是我所期待的,而 docker-compose 使我编写的所有 bash 脚本变得完全多余!
猜你喜欢
  • 2020-01-20
  • 2017-12-31
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
相关资源
最近更新 更多