在 Docker 中,build
是一个核心命令,用于根据指定的 Dockerfile 构建一个新的容器镜像。以下是详细解释:
docker build
的作用Dockerfile
中的指令(如 FROM
, COPY
, RUN
等),自动构建一个包含应用代码、依赖和配置的镜像。docker build -t <镜像名称:标签> <上下文路径>
-t
:指定镜像名称和标签(如 myapp:v1
)。<上下文路径>
:通常是包含 Dockerfile
的目录(.
表示当前目录)。Docker 会将此目录下的文件发送给守护进程(Daemon)进行构建。Dockerfile:一个文本文件,定义了镜像的构建步骤。例如:
FROM ubuntu:20.04 # 基础镜像
COPY . /app # 复制文件到镜像
RUN apt-get update && \ # 安装依赖
apt-get install -y python3
CMD ["python3", "/app/main.py"] # 启动命令
构建上下文(Build Context):docker build
会将指定目录(上下文路径)下的所有文件发送给 Docker 守护进程。若目录过大,可通过 .dockerignore
文件排除无关文件。
缓存机制:Docker 会缓存每一层的构建结果,若 Dockerfile
未更改,则直接使用缓存加速构建。可通过 --no-cache
禁用缓存:
docker build --no-cache -t myapp:v1 .
选项 | 说明 |
---|---|
-f |
指定非默认的 Dockerfile 路径(如 -f path/to/Dockerfile ) |
--target |
多阶段构建时,指定目标阶段(Stage) |
--build-arg |
传递构建时的变量(需在 Dockerfile 中用 ARG 声明) |
--pull |
强制拉取最新的基础镜像(避免使用本地旧缓存) |
通过多个 FROM
指令分阶段构建,最终镜像仅保留必要文件,减小体积:
# 阶段1:编译代码
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# 阶段2:仅保留二进制文件
FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
构建时使用 --target
指定阶段:
docker build --target builder -t myapp:builder .
假设项目结构如下:
myapp/
├── Dockerfile
├── main.py
└── requirements.txt
构建命令:
# 构建镜像并打标签
docker build -t myapp:latest .
# 查看构建结果
docker images | grep myapp
RUN chmod
)。COPY
)放在文件下方,利用缓存。alpine
)。通过 docker build
,你可以将应用及其环境标准化为轻量级的镜像,实现“一次构建,随处运行”。