繁体   English   中英

Dockerfile FROM vs Docker-compose IMAGE

[英]Dockerfile FROM vs Docker-compose IMAGE

我目前正在学习 Docker。 阅读文档和几篇文章后,我显然有更多的问题而不是答案。 目前对我来说最有趣的是:两者之间有什么区别?

FROM some:docker-image

在 Dockerfile 和

image: digitalocean.com/php 

在 docker-compose.yml

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

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

docker-compose.yml 和 Dockerfile 都指定了图像。 当这些图像不同时会发生什么? docker-compose.yml 会永远赢吗? 它会只使用这个“顶部”图像吗? 它们会以某种方式重叠吗? 或者,也许我都弄错了?

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

区别在于构建运行

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

Dockerfile docker build命令使用Dockerfile来构建新映像。 Dockerfile ,第一行通常用FROM指定基础镜像,即FROM nginx Dockerfile中的后续RUN行提供了Dockerfile docker build将在FROM镜像的上下文中的 shell 中执行以创建新镜像的附加步骤。 请注意, Dockerfile未指定新映像的名称。 相反,新图像在docker build-t some/name选项中命名

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

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

另外,正如@David Maze 在评论中提到的:

如果您同时使用这两个选项,则 Docker Compose 将按照指定构建镜像,然后使用镜像:名称; 如果您在那里放置“标准”图像名称,这可能会令人困惑。

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

如果我们同时指定(图像和 Dockerfile)会发生什么:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM