仅使用Dockerfile中的其他更改重建同一docker映像

仅使用Dockerfile中的其他更改重建同一docker映像,docker,docker-image,docker-build,Docker,Docker Image,Docker Build,我使用Dockerfile构建docker映像。在构建图像后,我对Dockerfile进行了一些基本更改。是否可以仅通过附加更改重建同一图像。因为创建图像需要很长时间,所以我不想完全创建它。提前感谢。您无法使用更改重建它,您需要将持久数据存储在卷上 但是,要保存更改,可以使用commit: 根据容器的更改创建新图像 docker提交[OPTIONS]容器[REPOSITORY[:TAG]] 将容器的文件更改或设置提交到 新映像。这允许您通过运行 交互式shell,或将工作数据集导出到另一台服务

我使用Dockerfile构建docker映像。在构建图像后,我对Dockerfile进行了一些基本更改。是否可以仅通过附加更改重建同一图像。因为创建图像需要很长时间,所以我不想完全创建它。提前感谢。

您无法使用更改重建它,您需要将持久数据存储在卷上

但是,要保存更改,可以使用
commit

根据容器的更改创建新图像

docker提交[OPTIONS]容器[REPOSITORY[:TAG]]

将容器的文件更改或设置提交到 新映像。这允许您通过运行 交互式shell,或将工作数据集导出到另一台服务器。 一般来说,最好使用DockerFile在一个文档中管理您的图像 文件化和可维护的方式

提交操作将不包括卷中包含的任何数据 安装在容器内

默认情况下,将提交正在提交的容器及其进程 提交映像时已暂停。这降低了发生意外的可能性 在创建过程中遇到数据损坏 承诺


您不能用更改来重建它,您需要将持久数据存储在卷上

但是,要保存更改,可以使用
commit

根据容器的更改创建新图像

docker提交[OPTIONS]容器[REPOSITORY[:TAG]]

将容器的文件更改或设置提交到 新映像。这允许您通过运行 交互式shell,或将工作数据集导出到另一台服务器。 一般来说,最好使用DockerFile在一个文档中管理您的图像 文件化和可维护的方式

提交操作将不包括卷中包含的任何数据 安装在容器内

默认情况下,将提交正在提交的容器及其进程 提交映像时已暂停。这降低了发生意外的可能性 在创建过程中遇到数据损坏 承诺


是的,如果您将docker图像标记为myimage,则只需使用

来自myimage


并在这之后添加其他更改

是的,如果您将docker图像标记为myimage,只需使用

来自myimage


然后,按照您描述的方式对docker build进行额外更改

唯一需要考虑的是层依赖关系

以Dockerfile为例

FROM something
RUN  cmd1
RUN  cmd2
RUN  cmd3
RUN  cmd4
如果更改
cmd1
,则将重建所有层,因为它们可能与
cmd1

如果更改
cmd4
,则只会重新生成此命令,因为它不会影响任何其他层


考虑哪些命令需要以什么顺序运行-也许您可以通过重新排序语句来改进它。

所有docker构建都按照您描述的方式工作

唯一需要考虑的是层依赖关系

以Dockerfile为例

FROM something
RUN  cmd1
RUN  cmd2
RUN  cmd3
RUN  cmd4
如果更改
cmd1
,则将重建所有层,因为它们可能与
cmd1

如果更改
cmd4
,则只会重新生成此命令,因为它不会影响任何其他层


想想哪些命令需要以什么顺序运行——也许你可以通过对语句重新排序来改进它。

注意,虽然你可以这样做,但这对Docker来说有点反模式。理想情况下,您希望将任何最终更新合并到docker文件(或卷,如果需要)。是的,但docker commit只会反映在容器上,而不是映像本身。请注意,虽然您可以这样做,但这对docker来说有点反模式。理想情况下,您希望将任何最终更新合并到Dockerfile(或卷,如果需要)。是的,但docker commit将只反映在容器上,而不是映像本身。请注意,这假设编辑/标记的映像将来可用,例如保存在可访问的repo中。虽然它可以工作,但这是一个非常脆弱的解决方案,因为它无法通过DockerFile或代码repo重新创建。请注意,这假设编辑/标记的图像将来可用,例如保存在可访问的repo中。虽然它可以工作,但它是一个非常脆弱的解决方案,因为它无法通过DockerFile或代码repo重新创建。