Docker Pull命令和Docker Build命令有何不同?

13

来自Docker的官方文档说:

Docker build - “从Dockerfile构建镜像”

Docker pull - “从仓库拉取镜像或代码库”

以下是一个样例 Dockerfile:

FROM php:7.1.8-apache

MAINTAINER XXXX

COPY . /srv/app
COPY docker/vhosts.conf /etc/apache2/sites-available/000-default.conf

WORKDIR /srv/app

RUN docker-php-ext-install mbstring pdo pdo_mysql \
    && chown -R www-data:www-data /srv/app

看起来构建命令将首先从Docker Hub下载镜像,然后执行Docker文件中提到的其他操作。 而Docker pull只会从存储库下载镜像。从某种意义上说,“pull”是“build”的一部分。我对Docker还很陌生,需要确认我的理解是否正确,或者是否还有其他内容。


有一个快捷方式 docker build --pull 可以同时执行这两个操作。 - frost-nzcr4
2个回答

8

当从另一个镜像构建时,您的理解是正确的,但有一些例外:

  1. 如果您从scratch构建,则不会拉取任何镜像。更多信息请点击这里
  2. 如果镜像已经存在于您的计算机上(来自先前的拉取、构建等)。

8
如果你已经有了一个 Dockerfile 文件,同时这个镜像也已经存在于某个仓库中,docker pull 命令将会从仓库拉取该镜像的二进制副本,而 docker build 命令将会从 Dockerfile 重新构建该镜像。
有几种情况下会自动为你执行 docker pull。如果你使用 docker run 命令运行一个你没有的镜像,它将被拉取;Dockerfile 中的 FROM 行也会在没有基础镜像的情况下拉取一个基础镜像。
在你的情况下,Dockerfile 描述了如何从 php:7.1.8-apache 镜像开始构建一个新的镜像。你需要这个基础镜像来构建你的自定义镜像,如果你还没有它,它将自动为你拉取。但是,最终生成的镜像与 PHP 基础镜像不同,除非你把镜像推送到了某个地方,否则你将无法直接使用 docker pull 命令获取结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接