如何解决Docker构建时正好需要一个参数的问题
简介
Docker build是一个容器镜像生成器命令。该命令帮助你创建具有一些额外可调整功能的容器镜像。在使用 “docker build “命令构建镜像时,初学者会面临一个非常常见和简单的争论问题。在这篇文章中,我们讨论了遇到该错误的各种方式以及如何解决该错误。文章中还提到了执行构建的不同方法。
创建Docker文件
首先,我们将创建一个dockerfile。这个dockerfile将帮助我们创建一个 “apache-web-server “的docker容器镜像。索引页被存储为默认位置/usr/local/apache2/htdocs/。
制作一个目录 “TUTORIALSPOINT”。
进入 “TUTORIALSPOINT “目录,创建一个名为 “Dockerfile “的文件,然后用任何一个代码编辑器打开该文件。这里,我们使用Visual Studio代码。
粘贴下面的Dockerfile代码。
不同的构建错误
让我们看看在使用docker build命令创建容器镜像时可能遇到的不同构建错误。
示例 1
如果命令在有Dockerfile的 “TUTORIALSPOINT “目录下执行。
输出
现在看到的是构建错误。
输出
示例 2
如果命令在 “TUTORIALSPOINT “目录外执行,其中没有Docker文件。
输出
现在看到这个错误。
输出
示例 3
如果命令在 “TUTORIALSPOINT “目录外执行,其中没有Docker文件。
输出
现在看到这个错误。
输出
示例 4
如果命令在 “TUTORIALSPOINT “目录下执行,但 “Dockerfile “被重命名为任何其他文件,如 “Dockerfile_2″。
输出
现在看到这个错误。
输出
理解Build命令
到目前为止,我们看到了不同的构建错误。现在最好理解“docker build”命令。下面我们对该命令的所有部分进行了分解。
该命令的通用语法为 −
下面列出了一些重要的选项
File
dockerfile的默认文件名是” dockerfile “,但你可以使用” -f “参数来更改它。这个标志需要dockerfile文件的相对路径和你保存它的文件名。
Tag
当我们想要重命名docker构建创建的镜像时,需要使用“-t”标志。也可以写成“–tag”。
如果你没有定义镜像的版本号,那么docker本身会提供一个“最新”版本。
路径或上下文目录
这个路径是一个本地相对路径,dockerfile在执行COPY和ADD等命令时将使用它作为参考。这个路径也被称为“上下文目录”。Docker daemon首先获取上下文目录,然后在构建时找到需要在映像中复制的文件。
URL
如果要复制的文件在本地系统中不存在,只需提到远程目录的“URL”,而不是本地路径。例如,你可以使用GitHub仓库的URL。
实现案例
构建docker镜像有多种情况。下面将提到一些情况。
案例1:“docker构建”的最简单实现
第1步 − 创建一个目录“TUTORIALSPOINT”
第2步 − 创建一个名为dockerfile的dockerfile文件。
将下面的代码保存在其中。
打开这个文件并保存下面的代码。
第3步 − 构建docker镜像
简单的实现。
输出
图像名称将是none,它将获得一个ID。要给图像命名,使用下面的命令。
输出
检查创建的映像。
输出
案例2:修改Dockerfile的名称
按照以下步骤使用dockerfile而不是“dockerfile”。
步骤1:创建一个名为“tutorialfile”的文件,并使用与上面相同的dockerfile代码
第2步:现在使用这个dockerfile构建镜像
通用语法:docker build -f complete_path_of_dockerfile -t name:版本号。
输出
这将从“tutorialfile”中创建一个docker镜像。签到创建的图像。
输出
案例3:修改上下文目录
在上面的例子中,我们使用“点”将上下文目录作为“当前工作目录”。
第1步:创建一个名为newdockerfile的dockerfile文件
将下面的代码添加到dockerfile中。
第2步:退出TUTORIALSPOINT目录。
首先复制当前工作目录的路径。
离开目录。
第3步:现在执行docker build命令
输出
第4步:现在运行容器并检查上下文目录是否设置为“home/hemant/TUTORIALSPOINT”
第5步:检查apache服务器上的Context目录是否已拷贝。访问http://localhost:8080/
因此,context目录被复制并设置好了。
总结
在本文中,我们学习了“docker build”命令的使用。本章涵盖了在各种情况下实现该命令的所有关键特性。最重要的是,“上下文”设置是初学者社区中众所周知的疑问。