我目前正在学习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会永远赢吗?它会仅使用此“顶部”图像吗?
它们会以某种方式重叠吗?
还是我弄错了?
我确实看到了this,但仍然不确定我是否了解发生了什么。
最佳答案
区别是构建与运行
将图像视为应用程序,将容器视为运行应用程序的进程。运行应用程序不会更改应用程序。同样运行容器不会更改镜像。图像是使用Dockerfiles
从docker build
构建的,并且是永久性的。容器是由docker run
,docker-compose
,kubernetes或类似工具根据需要从镜像创建的,旨在用作临时容器。Dockerfile
命令使用docker build
来构建新图像。
在Dockerfile
中,第一行通常使用FROM
即FROM nginx
指定基本图片。 RUN
中的后续Dockerfile
行提供了docker build
将在FROM
图像的上下文中在 shell 中执行的其他步骤,以创建新图像。请注意,Dockerfile
没有指定新图像的名称。相反,新图像在-t some/name
的docker build
选项中命名docker-compose.yml
文件指定一组图像,这些图像将作为组合服务的一部分下载并一起运行。例如,博客的docker-compose.yml
可以由Web服务器图像,应用程序图像和数据库图像组成,不仅可以指定图像,还可以指定它们如何通信。
由于docker构建和docker compose是单独的操作,因此不会发生冲突或检测到差异。 docker-compose.yml
控制将要下载和运行的内容,并且您还可以构建自己喜欢的任何东西。
另外,正如@David Maze在评论中提到的:
我的猜测是,如果这样做,最终可能会得到一个图像,在您自己的计算机上说出与Dockerhub图像不匹配的nginx
。不要那样做而是对您生成的任何图像使用唯一的名称。
关于php - Dockerfile FROM与Docker-compose IMAGE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56997793/