【问题标题】:Difference between 'image' and 'build' within docker composedocker compose 中“image”和“build”之间的区别
【发布时间】:2016-03-22 19:50:48
【问题描述】:

请帮助我了解 docker compose 中“image”和“build”之间的区别

【问题讨论】:

    标签: docker dockerfile docker-compose docker-registry


    【解决方案1】:
    • image 表示 docker compose 将运行基于该镜像的容器
    • build 表示docker compose 将首先基于与构建关联的路径中找到的 Dockerfile 构建一个镜像(然后基于该镜像运行一个容器)。

    PR 2458 最终被合并以允许两者(如果存在,则在构建时使用image 作为图像名称)。

    therobyouknow 提到in the comments

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

    version: '3'
    services:
      webapp:
        build:
          context: ./dir
          dockerfile: Dockerfile-alternate
          args:
            buildno: 1
    

    【讨论】:

    • dockerfile: 作为build: 下的子语句,可用于指定 Dockerfile 的文件名/路径 - docs.docker.com/compose/compose-file/#build
    • @therobyouknow 谢谢。我已将您的评论包含在答案中以提高知名度。
    • +1 感谢@VonC。我还应该说,我相信如果 dockerfile: 语句可选地不存在,那么 docker-compose 将在启动 docker-compose 的目录中查找名为 Dockerfile 的文件(即同一个文件夹,其中docker-compose.yml 文件驻留)。如果在build: 语句之后直接指定了一个(相对)路径(这也意味着没有子语句),那么 docker-compose 将在那里查找 Dockerfile。指定目录的另一种方法是使用带有路径的context: 子语句(如您的示例所示)。
    • 这些用于指定 Dockerfile 的选项在文档中进行了说明,此处为:docs.docker.com/compose/compose-file/#build(感谢您阅读我的 cmets 并提供反馈。)+1 支持您的答案和原始问题。
    • 如果我们同时使用镜像和构建会发生什么?它们之间有优先级还是总是使用第二个?
    【解决方案2】:

    build:需要 dockerfile 路径作为参数,它会先构建一个镜像,然后使用该镜像创建一个容器。

    image: 期望现有图像名称作为参数,它将使用此图像启动容器。

    示例:docker-compose.yaml

    version: '3'
    services:
      service1:
        build: .
        ports:
          - "5000:5000"
      service2:
        image: "redis:alpine"
    

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

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

    【讨论】:

      猜你喜欢
      • 2022-07-04
      • 2018-10-18
      • 2020-11-12
      • 1970-01-01
      • 2017-05-08
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多