【发布时间】:2016-03-22 19:50:48
【问题描述】:
请帮助我了解 docker compose 中“image”和“build”之间的区别
【问题讨论】:
标签: docker dockerfile docker-compose docker-registry
请帮助我了解 docker compose 中“image”和“build”之间的区别
【问题讨论】:
标签: docker dockerfile docker-compose docker-registry
image 表示 docker compose 将运行基于该镜像的容器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
dockerfile: 语句可选地不存在,那么 docker-compose 将在启动 docker-compose 的目录中查找名为 Dockerfile 的文件(即同一个文件夹,其中docker-compose.yml 文件驻留)。如果在build: 语句之后直接指定了一个(相对)路径(这也意味着没有子语句),那么 docker-compose 将在那里查找 Dockerfile。指定目录的另一种方法是使用带有路径的context: 子语句(如您的示例所示)。
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”镜像并在下载的镜像上运行容器。
【讨论】: