问题描述
Dockerfile
通过指定我们要在docker映像上执行的所有步骤来用于工作自动化。
Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装映像的所有命令。使用docker build的用户可以创建自动执行的构建,该构建可以连续执行几个命令行指令。
是的,我们可以创建Docker映像,但是每当我们要进行任何更改时,您都必须手动更改并测试和推送它。
或者,如果您将Dockerfile与dockerhub一起使用,则它将自动重建并在每次修改时进行更改,如果出现问题,则重建将失败。
- Dockerfile是Docker映像的自动化脚本
- 当您想在不同操作系统版本上测试相同的设置时,手动映像创建将变得复杂,然后您必须为所有版本创建映像,但是通过在dockerfile中进行少量更改,您可以创建不同版本的映像
- 它具有简单的图像语法,并且会自动进行许多更改,而手动进行操作会花费更多时间。
- Dockerfile具有系统的步骤,其他人可以轻松理解,并且很容易知道基本映像中发生了什么确切配置。
- Docker Hub提供Dockerfile的私有存储库。
- Dockerfile可以在团队和组织之间共享。
- 自动图像构建
- 附加到存储库的Webhook,允许您在将映像或更新的映像推送到存储库时触发事件
- 我们可以将Dockerfile放在
Github
或Bitbucket
:它将容器的文件更改或设置提交到新图像中。
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
-a, --author= Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
-c, --change=[] Apply Dockerfile instruction to the created image
--help=false Print usage
-m, --message= Commit message
-p, --pause=true Pause container during commit
调试容器并将导出的设置导出到另一个映像是个不错的选择。但是docker建议使用dockerfile参见此处,或者我们可以说commit是docker的版本控制或映像的备份。
提交操作将不包含容器内安装的卷中包含的任何数据。
默认情况下,在提交映像时,将暂停提交的容器及其进程。这减少了在创建提交过程中遇到数据损坏的可能性。如果不希望出现这种情况,请将“ p”选项设置为false。
它总是使用基础图像来创建新图像。让我们假设,如果您对dockerfile进行了任何更改,那么它将在新映像上应用所有dockerfile步骤并创建新映像。但提交使用相同的图像。
以我的观点,我们必须使用具有在映像上具有所有步骤的dockerfile,但是如果我们从commit创建映像,则必须记录所有我们要创建新映像可能需要的更改,我们可以说dockerfile是图像的文档。
解决方法
我们可以创建Docker映像并将所有映像都推送到没有Dockerfile的Hub中。拥有Dockerfile为何有用?它有什么优势?Dockerfile的创建是一个耗费大量时间的过程,只能由人来创建。我想知道基于基础映像,提交的映像和基于Dockerfile的映像之间的主要区别是什么。