Docker Pull 命令与 Docker Build 命令有何不同

sri*_*igu 7 pull image build docker

Docker 的官方文档说:

Docker 构建 - “从 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
Run Code Online (Sandbox Code Playgroud)

似乎构建命令将首先从 Docker 集线器下载映像,然后执行 docker 文件中提到的其他操作。而 Docker pull 只会从存储库下载图像。在某种程度上,“拉”是“构建”的一部分。我是 Docker 的新手,我需要确认我的理解,或者如果还有更多内容,请告诉我。

Dav*_*aze 8

如果您有一个镜像的 Dockerfile,并且该镜像也已经在某个存储库中,docker pull则将从存储库中提取该镜像的二进制副本,同时docker build从 Dockerfile 中重建它。

一些案例也会自动docker pull为您提供。如果您docker run没有镜像,它将被拉取;如果基础镜像不存在, DockerfileFROM行也会拉取它。

在您的例子中,Dockerfile 描述了如何从php:7.1.8-apache镜像开始构建新镜像。您需要该基础映像来构建自定义映像,如果您还没有它,系统会为您拉取它。但是您得到的是与 PHP 基础映像不同的映像,除非您docker push在某个地方编辑了该映像,否则您将无法直接获得docker pull结果。


小智 6

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

  1. 如果你从scratch没有图像将被拉出。更多信息在这里
  2. 如果图像已经在您的计算机上(来自之前的拉取、构建)