docker命令

docker build 是用于从 Dockerfile 构建 Docker 镜像的核心命令,通过读取 Dockerfile 中的指令,逐步构建出可运行的镜像。以下是其详细用法、参数说明及示例:

一、基本语法

bash 复制代码
docker build [OPTIONS] PATH | URL | -
  • PATH:Dockerfile 所在的本地目录路径(最常用);
  • URL :远程 Git 仓库地址(如 https://github.com/example/project.git);
  • - :从标准输入(stdin)读取 Dockerfile 内容(较少用)。

二、常用参数(OPTIONS)

参数 作用说明
-t, --tag 为镜像指定名称和标签(格式:名称:标签,标签默认 latest
-f, --file 指定非默认名称的 Dockerfile(默认找当前目录的 Dockerfile 文件)
--build-arg 传递构建时变量(配合 Dockerfile 中的 ARG 指令使用)
--no-cache 构建时不使用缓存(强制重新执行所有步骤,解决缓存导致的依赖更新问题)
--pull 总是尝试拉取基础镜像的最新版本(避免使用本地旧版本基础镜像)
-q, --quiet 静默模式,只输出最终的镜像 ID,不显示构建过程

三、示例场景

1. 基础用法:从当前目录构建镜像

假设当前目录有 Dockerfile,构建并命名为 myapp:v1

bash 复制代码
# 格式:docker build -t 镜像名:标签 目录路径(. 表示当前目录)
docker build -t myapp:v1 .
2. 指定非默认名称的 Dockerfile

若 Dockerfile 名为 Dockerfile.prod(非默认 Dockerfile):

bash 复制代码
# -f 指定 Dockerfile 路径
docker build -t myapp:prod -f Dockerfile.prod .
3. 传递构建时变量(--build-arg)

配合 Dockerfile 中的 ARG 指令使用,动态传入参数(如版本号):

Dockerfile 中定义 ARG

dockerfile 复制代码
ARG APP_VERSION=1.0  # 定义变量,默认值 1.0
FROM openjdk:8-jdk-alpine
COPY app-${APP_VERSION}.jar app.jar  # 使用变量

构建时传递变量

bash 复制代码
# --build-arg 覆盖默认的 APP_VERSION
docker build -t myapp:v2 --build-arg APP_VERSION=2.0 .
4. 强制不使用缓存(--no-cache)

当 Dockerfile 或依赖文件更新后,缓存可能导致构建结果不符合预期,需强制重新构建:

bash 复制代码
docker build -t myapp:v3 --no-cache .
5. 从远程 Git 仓库构建

直接从 GitHub/GitLab 仓库构建(Docker 会自动克隆仓库并找根目录的 Dockerfile):

bash 复制代码
# 从 GitHub 仓库构建
docker build -t github-app:latest https://github.com/example/springboot-demo.git
6. 静默模式构建(-q)

只输出最终的镜像 ID,适合脚本中获取镜像标识:

bash 复制代码
# 构建并获取镜像 ID
IMAGE_ID=$(docker build -q -t myapp:v4 .)
echo "构建完成,镜像 ID:$IMAGE_ID"

四、构建上下文(Context)

docker build 后面的 PATH(如 .)称为构建上下文,表示 Docker 引擎可访问的文件范围:

  • 构建时,Docker 会将上下文目录下的所有文件发送到 Docker 引擎(因此上下文目录不应包含无关文件,避免传输缓慢);

  • 建议:在上下文目录中创建 .dockerignore 文件,排除不需要的文件(如 node_modules.git),示例:

    bash 复制代码
    # .dockerignore 内容
    node_modules/
    .git/
    *.log

五、常见错误及解决

  1. unauthorized: authentication required

    需登录 Docker 仓库(如 Docker Hub):docker login

  2. no such file or directory

    检查 Dockerfile 中的 COPY/ADD 路径是否正确,确保文件在构建上下文内。

  3. 缓存导致依赖未更新

    使用 --no-cache 强制重新构建,或修改 Dockerfile 中对应步骤的指令(如添加注释)使缓存失效。

docker build 是构建镜像的核心命令,常用场景:

  • 基础构建:docker build -t 名称:标签 .
  • 定制 Dockerfile 路径:-f 参数
  • 动态传参:--build-arg
  • 清除缓存:--no-cache
相关推荐
lbb 小魔仙11 分钟前
Ubuntu 22.04 安装 Docker 完整步骤(附镜像加速配置)
linux·ubuntu·docker
Full Stack Developme3 小时前
Linux 多种压缩格式,优缺点和适用场景
linux·运维·服务器
yBmZlQzJ7 小时前
财运到内网穿透域名解析技术机制与中立评估
运维·经验分享·docker·容器·1024程序员节
Shanxun Liao8 小时前
Cenots 7.9 配置多台 SSH 互信登陆免密码
linux·运维·ssh
j_xxx404_8 小时前
Linux:第一个程序--进度条|区分回车与换行|行缓冲区|进度条代码两个版本|代码测试与优化
linux·运维·服务器
一点晖光8 小时前
jenkins优化记录
运维·jenkins
最贪吃的虎9 小时前
Git: rebase vs merge
java·运维·git·后端·mysql
yBmZlQzJ9 小时前
内网穿透工具通过端口转发实现内外网通信
运维·经验分享·docker·容器·1024程序员节
DeepHacking9 小时前
Overleaf 本地Docker部署
运维·docker·容器
llilian_1610 小时前
总线授时卡 CPCI总线授时卡的工作原理及应用场景介绍 CPCI总线校时卡
运维·单片机·其他·自动化