文章目录
docker build打镜像用法示例权威详解
构建一个Docker镜像的命令
用法
docker build [OPTIONS] PATH | URL | -
描述
docker build
命令根据Dockerfile和“上下文”来构建Docker镜像。构建的上下文是指在指定的PATH或URL中的文件集合。构建过程可以引用上下文中的任何文件。例如,构建过程可以使用COPY指令来引用上下文中的文件。
URL参数可以引用三种类型的资源:Git存储库、预打包的tarball上下文和纯文本文件。
1.Git存储库:
当URL参数指向Git存储库的位置时,该存储库充当构建上下文。系统会递归获取存储库及其子模块。提交历史记录不会被保留。存储库首先被拉到本地主机的临时目录中。成功后,该目录作为上下文发送给Docker守护程序。本地副本使您能够使用本地用户凭据、VPN等访问私有存储库。
2.Tarball上下文:
如果将URL传递给远程tarball,则URL本身将被发送到守护程序。下载操作将在运行Docker守护程序的主机上执行,这不一定是发出构建命令的主机。Docker守护程序将获取context.tar.gz并将其用作构建上下文。Tarball上下文必须是符合标准tar UNIX格式的tar存档,并且可以使用’xz’、‘bzip2’、‘gzip’或’identity’(无压缩)格式进行压缩。
3.文本文件:
您可以在URL中指定一个Dockerfile,而不是指定上下文,或者通过STDIN将文件传递给管道。要从STDIN管道传递Dockerfile,请使用以下命令:
docker build - < Dockerfile
在Windows的PowerShell中,您可以运行以下命令:
Get-Content Dockerfile | docker build -
如果使用STDIN或指定指向纯文本文件的URL,则系统将内容放入名为Dockerfile的文件中,并忽略任何-f、–file选项。在这种情况下,没有上下文。
默认情况下,docker build
命令将在构建上下文的根目录查找Dockerfile。选项-f
或--file
允许您指定替代文件的路径。这在多个构建中使用相同的文件集合时非常有用。路径必须是构建上下文内的文件。如果指定了相对路径,则解释为相对于上下文的根目录。
大多数情况下,最好将每个Dockerfile放置在一个空目录中。然后,只向该目录添加构建Dockerfile所需的文件。为了提高构建性能,可以通过添加.dockerignore文件来排除文件和目录。有关创建此文件的信息,请参阅.dockerignore文件的文档。
如果Docker客户端与守护程序失去连接,构建将被取消。这种情况发生在您使用CTRL-c中断Docker客户端或由于任何原因杀死Docker客户端时。如果构建在取消构建时仍在运行的拉取过程,则拉取也将被取消。
选项
选项 | 简写 | 默认值 | 描述 |
---|---|---|---|
–add-host | 添加自定义主机到IP映射(host:ip) | ||
–build-arg | 设置构建时变量 | ||
–cache-from | 要作为缓存源考虑的镜像 | ||
–cgroup-parent | 容器的可选父cgroup | ||
–compress | 使用gzip压缩构建上下文 | ||
–cpu-period | 限制CPU CFS(完全公平调度器)周期 | ||
–cpu-quota | 限制CPU CFS(完全公平调度器)配额 | ||
–cpu-shares | -c | CPU份额(相对权重) | |
–cpuset-cpus | 允许执行的CPU(0-3, 0,1) | ||
–cpuset-mems | 允许执行的内存(0-3, 0,1) | ||
–disable-content-trust | true | 跳过镜像验证 | |
–file | -f | PATH/Dockerfile | Dockerfile的名称(默认为PATH/Dockerfile) |
–force-rm | 构建成功后始终删除中间容器 | ||
–iidfile | 将镜像ID写入文件 | ||
–isolation | 容器隔离技术 | ||
–label | 为镜像设置元数据 | ||
–memory | -m | 内存限制 | |
–memory-swap | 交换限制等于内存加交换:-1表示无限制交换 | ||
–network | 设置构建期间RUN指令的网络模式 | ||
–no-cache | 在构建镜像时不使用缓存 | ||
–platform | 如果服务器支持多平台,则设置平台 | ||
–pull | 总是尝试拉取新版本的镜像 | ||
–quiet | -q | 抑制构建输出,并在成功时打印镜像ID | |
–rm | true | 成功构建后删除中间容器 | |
–security-opt | 安全选项 | ||
–shm-size | /dev/shm的大小 | ||
–squash | 实验性功能(守护程序):将新构建的层压缩为单个新层 | ||
–tag | -t | 名称和可选的标签(name:tag格式) | |
–target | 设置要构建的目标构建阶段 | ||
–ulimit | ulimit选项 |
示例
1.使用PATH构建:
docker build .
上述示例指定路径为.
,因此本地目录中的所有文件将被打包并发送到Docker守护程序。PATH
指定了在Docker守护程序上查找“上下文”文件的位置。请记住,守护进程可能在远程机器上运行,并且没有在客户端(您运行docker build的位置)进行Dockerfile解析。这意味着会发送PATH中的所有文件,而不仅仅是Dockerfile中列出的文件。
当构建完成后,如果希望保留中间容器,则必须使用--rm=false
。这不会影响构建缓存。
2.使用URL构建:
docker build github.com/creack/docker-firefox
这将克隆GitHub存储库并使用克隆的存储库作为上下文。存储库根目录中的Dockerfile将用作构建镜像的Dockerfile。您可以使用git://或git@方案指定任意Git存储库。
docker build -f ctx/Dockerfile http://server/ctx.tar.gz
上述命令将URL http://server/ctx.tar.gz
发送到Docker守护程序,后者会下载并提取引用的tarball。-f ctx/Dockerfile
参数指定了ctx.tar.gz中的路径,该路径是用于构建镜像的Dockerfile中的操作的相对路径。在上面的示例中,tarball包含一个名为ctx/的目录,因此ADD ctx/container.cfg /操作按预期工作。
3.使用STDIN或URL中的纯文本文件构建:
docker build - < Dockerfile
该命令从STDIN读取Dockerfile,并且没有上下文。由于没有上下文,只有当Dockerfile引用远程URL时,Dockerfile中的ADD才有效。
4.使用.dockerignore文件:
docker build .
上述示例展示了如何使用.dockerignore文件来排除上下文中的.git目录。可以通过上传的上下文的更改大小来看到其效果。构建引用包含详细信息的.builder参考文档以创建.dockerignore文件。
5.标记镜像:
docker build -t vieux/apache:2.0 .
这将构建与前面示例相同的镜像,但会对结果镜像进行标记。存储库名称将是vieux/apache,标签将是2.0。
您可以对镜像应用多个标签。例如,您可以为新构建的镜像应用latest标签,并添加另一个引用特定版本的标签。例如,要同时将一个镜像标记为whenry/fedora-jboss:latest和whenry/fedora-jboss:v2.1,请使用以下命令:
docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .
以上是关于docker build
命令的说明和示例。该命令用于根据Dockerfile和上下文构建Docker镜像。
uild -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .
以上是关于`docker build`命令的说明和示例。该命令用于根据Dockerfile和上下文构建Docker镜像。
# [参考链接](https://docs.docker.com/engine/reference/commandline/build/)