Dockerfile FROM 与 Docker-compose IMAGE

Dockerfile FROM vs Docker-compose IMAGE

我目前正在学习中Docker。阅读文档和几篇文章后,我的问题显然多于答案。目前对我来说最有趣的是:

之间有什么区别?
FROM some:docker-image

在Docker文件中和

image: digitalocean.com/php 

在docker-compose.yml

我明白他们应该抓取图像并从中创建一个容器。我不明白的是如果我们同时指定两者会发生什么,例如:

version: '3'
services:
  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: digitalocean.com/php

docker-compose.yml 和 Docker 文件都指定了图像。 当这些图像不同时会发生什么? docker-compose.yml 总是会赢吗?它会只使用这张 'top' 图像吗? 它们会以某种方式重叠吗? 又或许我都弄错了?

我确实看到了 ,但我仍然不确定我是否理解发生了什么。

区别是 build运行

将图像视为应用程序,将容器视为 运行 应用程序的进程。 运行一个应用不改变应用。 运行容器同样不会改变图像。图像是使用 docker buildDockerfiles 构建的,并且是持久的。容器是根据需要由 docker rundocker-compose、kubernetes 或类似的工具从图像中创建的,并且是临时的。

Dockerfiledocker build 命令用来建立一个新的图像。 在Dockerfile中,第一行通常用FROM指定基本图像,即FROM nginxDockerfile 中的后续 RUN 行提供了 docker build 将在 FROM 图像的上下文中在 shell 中执行的额外步骤,以创建新的图片。请注意,Dockerfile 没有指定新图像的名称。相反,新图像在 -t some/name 选项中命名为 docker build

docker-compose.yml 文件指定了一组要下载的图像,并且 运行 一起作为组合服务的一部分。例如,博客的 docker-compose.yml 可以包含网络服务器图像、应用程序图像和数据库图像,并且不仅会指定图像,还可能指定它们的通信方式。

由于 docker 构建和 docker 组合是独立的操作,因此不存在冲突或差异检测。 docker-compose.yml 控制要下载的内容和 运行,您也可以构建任何您喜欢的内容。

此外,正如@David Maze 在评论中提到的那样:

If you use both options then Docker Compose will build the image as specified and then tag it using the image: name; this can be confusing if you're putting a "standard" image name there.

我的猜测是,如果您这样做,您最终可能会得到一个与 Dockerhub 图像不匹配的图像,例如您自己机器上的 nginx。不要那样做。相反,为您构建的任何图像使用唯一的名称。

what happens if we will specify both (image and Dockerfile) at the same time:

如果图像不存在,docker-compose 会尝试拉取它,除非您还指定了构建,在这种情况下,它会使用指定的选项构建它并使用指定的标签对其进行标记。 https://docs.docker.com/compose/compose-file/compose-file-v3/#image