docker-build命令解析

78 阅读3分钟

docker build 命令用于从一个 Dockerfile 构建一个 Docker 镜像。以下是 docker build 命令的语法及其常用选项:

基本语法

docker build [OPTIONS] PATH | URL | -
  • PATH: Dockerfile 所在的路径或包含 Dockerfile 的上下文目录。
  • URL: 指向 Dockerfile 或包含 Dockerfile 的上下文目录的 URL。
  • -: 读取标准输入中的 Dockerfile。

常用选项

  • -f, --file string:指定 Dockerfile 文件路径(默认是 PATH/Dockerfile)。
  • -t, --tag list:为镜像指定一个名称和可选标签(例如 myimage:latest)。
  • --build-arg list:设置构建时的变量值(即 ARG 指令)。
  • --no-cache:不使用缓存构建镜像。
  • --pull:始终尝试拉取更新的基础镜像。
  • --rm:构建成功后删除中间容器(默认开启)。
  • -q, --quiet:仅显示镜像 ID。

示例

  1. 从当前目录构建镜像
docker build -t myimage:latest .
  1. 指定 Dockerfile 路径
docker build -f /path/to/Dockerfile -t myimage:latest .
  1. 设置构建参数
docker build --build-arg VERSION=1.0 -t myimage:latest .
  1. 不使用缓存构建镜像
docker build --no-cache -t myimage:latest .
  1. 从 URL 构建镜像
docker build -t myimage:latest https://github.com/user/repo.git#branch:subdir
  1. 读取标准输入中的 Dockerfile
docker build -t myimage:latest - < Dockerfile

Dockerfile 示例

以下是一个简单的 Dockerfile 示例:

# 使用官方 Ubuntu 作为基础镜像
FROM ubuntu:20.04

# 设置环境变量
ENV APP_HOME /usr/src/app
WORKDIR $APP_HOME

# 复制当前目录内容到工作目录
COPY . .

# 安装依赖
RUN apt-get update && apt-get install -y \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 暴露端口
EXPOSE 8080

# 运行命令
CMD ["echo", "Hello, World!"]

构建镜像

从上述 Dockerfile 构建镜像的命令如下:

docker build -t myimage:latest .

总结

  • docker build 命令用于从 Dockerfile 构建镜像。
  • 支持多种选项,如指定 Dockerfile 路径、设置构建参数、不使用缓存等。
  • 使用适当的选项和路径,可以灵活地构建所需的 Docker 镜像。

---

docker build -t myimage:latest . 中的.是代表什么

docker build -t myimage:latest . 命令中,最后的 . 表示当前目录(即命令运行时所在的工作目录)。具体来说,它指定了构建上下文的路径,也就是 Docker 引擎在构建镜像时可以访问的文件和目录的范围。

构建上下文

构建上下文是 Docker 在构建镜像时可以访问的文件和目录的集合。当你执行 docker build 命令时,Docker 将会递归地读取构建上下文目录中的所有文件,并将这些文件发送到 Docker 守护进程。Dockerfile 也应该位于这个上下文目录中,或者通过 -f 选项指定 Dockerfile 的路径。

示例解释

假设当前目录的结构如下:

.
├── Dockerfile
├── app.py
└── requirements.txt
  1. 命令
docker build -t myimage:latest .
  1. 含义
    • -t myimage:latest:为构建的镜像指定名称和标签(myimage:latest)。
    • .:指定当前目录为构建上下文,Docker 引擎会读取当前目录及其子目录中的所有文件。
  1. Dockerfile 示例
FROM python:3.8-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

在这个示例中:

  • WORKDIR /app:设置工作目录为容器中的 /app 目录。
  • COPY requirements.txt requirements.txt:将构建上下文中的 requirements.txt 文件复制到容器的 /app 目录。
  • RUN pip install -r requirements.txt:在容器中安装依赖。
  • COPY . .:将构建上下文中的所有文件复制到容器的工作目录 /app 中。
  • CMD ["python", "app.py"]:在容器启动时运行 python app.py

总结

  • . 表示当前目录,用作构建上下文的路径。
  • 构建上下文包含了 Docker 引擎在构建镜像时可以访问的所有文件和目录。
  • Dockerfile 和其他需要的文件应该位于构建上下文中,或通过相对路径或绝对路径指定。