docker组合中'image'和'build'之间的区别

mea*_*our 28 docker dockerfile docker-registry docker-compose

请帮助我理解docker compose中'image'和'build'之间的区别

Von*_*onC 25

  • image意味着docker compose将基于该图像运行容器
  • build means docker compose将首先根据与build相关的路径中找到的Dockerfile构建一个映像(然后根据该映像运行一个容器).

PR 2458实际上建议允许两者(并且image在构建时用作图像名称,如果存在),但是现在服务必须具有图像或构建路径.

therobyouknow在评论中提到:

dockerfile:作为下面的子语句build:可用于指定Dockerfile的文件名/路径.

version: '3'
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1
Run Code Online (Sandbox Code Playgroud)

  • `dockerfile:` 作为 `build:` 下的子语句可用于指定 Dockerfile 的文件名/路径 - https://docs.docker.com/compose/compose-file/#build (3认同)
  • 如果我们同时使用镜像和构建会发生什么?它们之间是否有优先级,或者总是使用第二个? (3认同)

Sha*_*ain 8

build:需要 dockerfile 路径作为参数,它将首先构建图像,然后使用该图像创建容器。

image:需要现有的镜像名称作为参数,它将使用该镜像启动容器。

示例:docker-compose.yaml

version: '3'
services:
  service1:
    build: .
    ports:
      - "5000:5000"
  service2:
    image: "redis:alpine"
Run Code Online (Sandbox Code Playgroud)

service1首先会根据当前路径的Dockerfile构建一个镜像,并基于该镜像运行容器。

service2 将从 docker hub 下载“redis:alpine”镜像,并在下载的镜像上运行容器。


小智 5

深入探讨build和之间差异的官方文档image可能会有所帮助。https://docs.docker.com/compose/compose-file/build/ \n长话短说,build需要可用于构建映像的 Dockerfile 的路径,但image要转到存储库以获取现有映像。两者都可以包含在服务中,但是

\n
\n

当服务定义同时包含镜像属性和构建部分时,Compose 实现无法保证拉取的镜像严格等同于从源构建相同的镜像。如果没有任何明确的用户指令,具有构建支持的 Compose 实现必须首先尝试拉取映像,然后如果在注册表中找不到映像,则从源代码构建。Compose 实现可以提供根据用户请求自定义此行为的选项。

\n
\n