Docker卷绑定:基础映像与派生映像
它看起来像是Docker卷绑定:基础映像与派生映像,docker,Docker,它看起来像是运行时使用的任何卷绑定(-v),提交的派生映像中不会保留基本映像,并且每次运行派生映像时都必须传递卷绑定选项 示例: 在容器(名为:john_doe)中进行更改并提交到新映像(本地/测试) 然后,这不会列出主机目录中的文件/opt/hostappsdir docker run --rm local/test ls /apps 但这个就行了 docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps 有什么方法可以
运行时使用的任何卷绑定(-v
),提交的派生映像中不会保留基本映像,并且每次运行派生映像时都必须传递卷绑定选项
示例:
在容器(名为:john_doe)中进行更改并提交到新映像(本地/测试)
然后,这不会列出主机目录中的文件/opt/hostappsdir
docker run --rm local/test ls /apps
但这个就行了
docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps
有什么方法可以避免每次都传递卷绑定选项吗?根据定义,卷不是容器层的一部分,因此在从容器创建图像时不会是您提交的层的一部分
如果您喜欢添加特定配置、添加一些扩展、添加一些包,那么您应该始终从基本映像派生,而不只是“提交”任意更改,而不是形式化更改
使用创建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
来自
将您的配置/etc/复制到某个地方
复制您的资产/var/www
运行sed…\//更改一些配置
&&apt-get-update&&apt-get-install-curl//一些软件包
提示:我自己不喜欢“提交将容器更改为图像”的想法——这是有风险的,不会每次都产生相同的结果,也不会将实际更改的内容正式化。你会有困难的时候。由于基础图像的更新而更新您的图像,因为您不知道之前您做了什么-即使您已将其记录下来,也需要付出大量的努力才能一次又一次地完成 如果否决我的问题的人能解释问题所在,那会很有帮助。更正了commit
命令中的语法错误。等待回答……我也不知道为什么这个问题被否决了——这是一个合法的争议,因此是一个需要澄清的有效问题。你回答的第一行是我想要的答案。我的意思是增加额外的apt包。代码更改将只在绑定到容器的主机目录上进行。我可能住在岩石或其他地方,但我刚刚了解了docker compose
。。。哇!这正是我所期待的,docker compose使我编写的所有bash脚本完全多余!
docker run --rm -v /opt/hostappsdir:/apps local/test ls /apps
from <baseimage>
COPY yourconfig /etc/somewhere
COPY yourasset /var/www
RUN sed ... \ // change some configuration
&& apt-get update && apt-get install curl // some packages