【发布时间】:2016-12-01 11:30:09
【问题描述】:
我使用 Dockerfile 构建了一个 docker 镜像。构建映像后,我对 Dockerfile 进行了一些基本更改。是否可以仅通过其他更改重建相同的图像。由于创建图像需要很长时间,我不想完全构建它。提前致谢。
【问题讨论】:
标签: docker docker-image docker-build
我使用 Dockerfile 构建了一个 docker 镜像。构建映像后,我对 Dockerfile 进行了一些基本更改。是否可以仅通过其他更改重建相同的图像。由于创建图像需要很长时间,我不想完全构建它。提前致谢。
【问题讨论】:
标签: docker docker-image docker-build
所有 docker build 都以您描述的方式工作。
唯一需要考虑的是层依赖关系。
考虑 Dockerfile
FROM something
RUN cmd1
RUN cmd2
RUN cmd3
RUN cmd4
如果您更改cmd1,则所有层都将重新构建,因为它们可能与cmd1不同
如果您更改cmd4,则只会重建此命令,因为它不会影响任何其他层。
想想哪些命令需要以什么顺序运行——也许你可以通过重新排序语句来改进它。
【讨论】:
是的,如果您标记您的 docker 镜像 myimage,只需启动您的其他 Dockerfile
FROM myimage
并在此之后添加您的其他更改
【讨论】:
您无法通过更改重新构建它,您需要将持久数据存储在卷上。
但是,要保存您的更改,您可以使用commit:
https://docs.docker.com/engine/reference/commandline/commit/
根据容器的更改创建新图像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
将容器的文件更改或设置提交到 一个新图像。 这允许您通过运行 交互式外壳,或将工作数据集导出到另一台服务器。 一般来说,最好使用 Dockerfiles 来管理你的镜像 记录和维护的方式。 Read more about valid image names and tags.
提交操作不会包含卷中包含的任何数据 安装在容器内。
默认情况下,正在提交的容器及其进程将 提交图像时暂停。这降低了发生的可能性 在创建过程中遇到数据损坏 提交。
【讨论】: