docker build 命令用于通过 Dockerfile 构建 Docker 镜像。它是 Docker 镜像构建过程的核心工具,允许用户自动化地构建并定制镜像。
docker build 命令基本格式:
bash
代码解读
复制代码
docker build [OPTIONS] PATH | URL | -
PATH:指定 Docker 构建上下文的路径,可以是一个本地目录、URL 或-。URL:指定一个远程 URL 作为构建上下文。-:表示从标准输入读取 Dockerfile。
常用选项及详细说明:
-
-t或--tag:- 为构建的镜像指定标签(名称:标签)。标签是镜像的唯一标识,通常采用
name:tag的格式。 - 如果没有提供
tag,默认会使用latest标签。 - 示例:
bash
代码解读
复制代码
docker build -t myapp:latest .这会创建一个名为myapp,标签为latest的镜像。
- 为构建的镜像指定标签(名称:标签)。标签是镜像的唯一标识,通常采用
-
-f或--file:- 指定一个
Dockerfile文件。如果没有指定,默认会在当前目录查找Dockerfile。 - 这可以让你指定不同的
Dockerfile,例如在多环境构建中使用不同的文件。 - 示例:
bash
代码解读
复制代码
docker build -f ./Dockerfile.prod -t myapp:prod .这会使用Dockerfile.prod文件来构建镜像。
- 指定一个
-
--build-arg:- 用于在构建过程中传递参数。可以在
Dockerfile中使用这些构建参数。 - 示例:
bash
代码解读
复制代码
docker build --build-arg VERSION=1.0 -t myapp:v1 .在Dockerfile中可以使用ARG VERSION来访问该参数。Dockerfile
代码解读
复制代码
ARG VERSION RUN echo $VERSION
- 用于在构建过程中传递参数。可以在
-
--no-cache:- 禁止使用缓存的中间层,这意味着每次构建时都会重新执行每个构建步骤。
- 这对确保镜像是完全最新的很有帮助,特别是在需要更新依赖时。
- 示例:
bash
代码解读
复制代码
docker build --no-cache -t myapp:latest .
-
--pull:- 强制每次构建时都从 Docker Hub 拉取最新的基础镜像,而不是使用本地缓存的镜像。
- 示例:
bash
代码解读
复制代码
docker build --pull -t myapp:latest .
-
--quiet或-q:- 让
docker build在构建时只输出镜像的 ID,而不会显示详细的构建日志。 - 示例:
bash
代码解读
复制代码
docker build -q -t myapp:latest .
- 让
-
--target:- 用于指定多阶段构建中的构建目标阶段(Stage)。这在使用多阶段构建时非常有用。
- 示例:
bash
代码解读
复制代码
docker build --target build_stage -t myapp:build .
-
--rm:- 默认情况下,Docker 在构建完成后会删除中间容器。如果不想删除中间容器,可以通过
--rm=false来保持它们。 - 示例:
bash
代码解读
复制代码
docker build --rm=false -t myapp:latest .
- 默认情况下,Docker 在构建完成后会删除中间容器。如果不想删除中间容器,可以通过
-
--squash:- 这个选项在 Docker 1.13 后提供,允许合并镜像的多个层(Layer)为一个单一的层,以减少最终镜像的大小。
- 示例:
bash
代码解读
复制代码
docker build --squash -t myapp:latest .
-
--no-cache:- 不使用缓存来构建镜像。每个步骤都会被强制执行,即使之前已成功完成。
- 示例:
bash
代码解读
复制代码
docker build --no-cache -t myapp:latest .
-
-o:- 用于设置构建的输出位置,输出格式可以是
type=docker或type=tar。例如,可以将构建的内容保存为 tar 文件。 - 示例:
bash
代码解读
复制代码
docker build -o type=tar,dest=output.tar .
- 用于设置构建的输出位置,输出格式可以是
-
-c:- 用于设定构建的并行程度。通常用于通过并行处理来加速构建过程。
- 示例:
bash
代码解读
复制代码
docker build -c 4 -t myapp:latest .
构建上下文:
构建上下文是构建过程中的目录或路径,Docker 会从中获取文件以及构建时所需的资源(包括 Dockerfile)。常见的构建上下文有:
- 当前目录 (
.):指定当前目录作为构建上下文。 - 路径:指定本地路径,作为构建上下文。
- URL:也可以使用 Git 仓库的 URL 作为构建上下文。例如:
bash
代码解读
复制代码
docker build https://github.com/myrepo/myapp.git
构建过程示例:
假设我们有如下简单的 Dockerfile:
Dockerfile
代码解读
复制代码
# 基础镜像 FROM node:14 # 工作目录 WORKDIR /app # 复制 package.json 和 package-lock.json 文件 COPY package*.json ./ # 安装依赖 RUN npm install # 复制应用代码 COPY . . # 暴露端口 EXPOSE 3000 # 启动应用 CMD ["npm", "start"]
我们可以使用以下命令构建镜像:
bash
代码解读
复制代码
docker build -t myapp:latest .
构建多阶段镜像:
多阶段构建允许你在一个 Dockerfile 中使用多个阶段,这样可以优化镜像大小。通过 --target 选择指定阶段。
示例 Dockerfile:
Dockerfile
代码解读
复制代码
# 第一阶段:构建应用 FROM node:14 AS build WORKDIR /app COPY . . RUN npm install RUN npm run build # 第二阶段:运行应用 FROM node:14 WORKDIR /app COPY --from=build /app/dist /app EXPOSE 3000 CMD ["npm", "start"]
构建命令:
bash
代码解读
复制代码
docker build -t myapp:multi-stage .
总结:
docker build 是构建 Docker 镜像的关键命令,灵活地配合不同选项,可以实现从简单构建到复杂的多阶段构建。在实际使用中,可以通过优化构建步骤、使用缓存和并行构建等手段提高构建效率并减少最终镜像的体积。
2377

被折叠的 条评论
为什么被折叠?



