文章目录
- **一、基本语法**
- **二、核心参数详解**
- **1. 基础参数**
- **2. 资源限制参数**
- **3. 缓存与清理参数**
- **4. 网络与隔离参数**
- **5. 高级功能参数**
- **三、构建上下文(Context)**
- **四、使用示例**
- 1. **基础构建**
- 2. **指定 Dockerfile 路径**
- 3. **传递构建参数**
- 4. **多阶段构建**
- 5. **禁用缓存**
- 6. **资源限制**
- **五、注意事项**
- 1. **构建缓存**
- 2. **敏感信息**
- 3. **多阶段构建优化**
- **六、扩展工具链集成**
- - **CI/CD 场景**:结合 `--iidfile` 获取镜像 ID,用于后续推送或部署。
- - **自动化脚本**:通过 `.dockerignore` 和 `--no-cache` 控制构建上下文和缓存策略。
docker build
是 Docker 中用于根据
Dockerfile 构建镜像的核心命令。以下是其详细语法、参数及使用示例的总结:
一、基本语法
docker build [OPTIONS] PATH | URL | -
- PATH:本地目录路径(包含 Dockerfile 的上下文)。
- URL:远程 Git 仓库地址(如
github.com/xxx/xxx
)。 - -:从标准输入读取 Dockerfile 内容(较少使用)。
二、核心参数详解
1. 基础参数
参数 | 作用 | 示例 |
---|
-t , --tag | 为镜像指定名称和标签(格式:name:tag ) | docker build -t myapp:v1 . |
-f , --file | 指定 Dockerfile 路径(默认为当前目录下的 Dockerfile ) | docker build -f ./Dockerfile.dev . |
--build-arg | 传递构建参数(需在 Dockerfile 中通过 ARG 定义) | docker build --build-arg HTTP_PROXY=http://proxy.example.com . |
--no-cache | 禁用缓存,强制重新构建所有层 | docker build --no-cache . |
--pull | 拉取基础镜像的最新版本 | docker build --pull . |
--target | 多阶段构建时指定目标阶段 | docker build --target builder . |
2. 资源限制参数
参数 | 作用 | 示例 |
---|
-m , --memory | 限制构建过程的内存使用 | docker build -m 2g . |
--cpuset-cpus | 指定可用的 CPU 核心 | docker build --cpuset-cpus "0,1" . |
--shm-size | 设置 /dev/shm 共享内存大小(默认 64MB) | docker build --shm-size=1g . |
3. 缓存与清理参数
参数 | 作用 | 示例 |
---|
--rm | 构建成功后删除中间容器(默认启用) | docker build --rm . |
--force-rm | 无论构建是否成功,强制删除中间容器 | docker build --force-rm . |
--cache-from | 指定缓存源镜像(用于优化多阶段构建) | docker build --cache-from myapp-cache . |
4. 网络与隔离参数
参数 | 作用 | 示例 |
---|
--network | 设置构建期间的网络模式(默认 default ) | docker build --network host . |
--isolation | 指定容器隔离技术(如 process 或 hyperv ) | docker build --isolation=hyperv . |
5. 高级功能参数
参数 | 作用 | 示例 |
---|
--squash | 将所有构建层压缩为单一层(实验性功能) | docker build --squash . |
--iidfile | 将生成的镜像 ID 写入文件(用于自动化脚本) | docker build --iidfile=image.id . |
三、构建上下文(Context)
- 定义:构建过程中 Docker 客户端会将当前目录(或指定路径)下的所有文件作为 构建上下文 发送给 Docker 守护进程。
- 注意事项:
- 避免使用根目录
/
作为上下文路径,否则会上传整个系统文件。 - 使用
.dockerignore
文件排除不必要的文件(如 node_modules/
、.git/
),减少传输时间。
四、使用示例
1. 基础构建
docker build -t myapp:v1 .
- 当前目录(
.
)作为上下文,生成标签为 myapp:v1
的镜像。
2. 指定 Dockerfile 路径
docker build -f ./Dockerfile.dev -t myapp:dev .
3. 传递构建参数
docker build --build-arg VERSION=2.0 -t myapp:v2 .
4. 多阶段构建
docker build --target builder -t myapp-builder .
5. 禁用缓存
docker build --no-cache -t myapp:v1 .
6. 资源限制
docker build --memory=2g --cpuset-cpus="0,1" -t myapp:v1 .
五、注意事项
1. 构建缓存
- Docker 会缓存每一步构建结果,若 Dockerfile 修改后未改变某一步的指令,会直接复用缓存。
- 使用
--no-cache
强制跳过缓存。
2. 敏感信息
- 避免通过
--build-arg
传递敏感信息(如密码),可改用 ARG
+ --build-arg
结合 ARG
的 --secret
(Docker 20.10+ 支持)。
3. 多阶段构建优化
- 使用
--target
指定中间阶段,避免一次性构建所有阶段。
六、扩展工具链集成
- CI/CD 场景:结合 --iidfile
获取镜像 ID,用于后续推送或部署。
- 自动化脚本:通过 .dockerignore
和 --no-cache
控制构建上下文和缓存策略。
通过合理使用这些参数,可以高效地构建、调试和优化 Docker 镜像。