我目前正在学习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 https://stackoverflow.com/questions/45786256/docker-compose-specifying-image-vs-dockerfile但我仍然不确定我是否明白发生了什么事。
区别在于build vs. run
将图像视为应用程序,将容器视为运行应用程序的进程。运行应用程序不会更改应用程序。同样,运行容器不会更改图像。图像是从构建的Dockerfiles
using docker build
并且是坚持不懈的。容器是根据需要创建的docker run
, docker-compose
、kubernetes 或来自镜像的类似工具都是临时的。
The Dockerfile
被使用的是docker build
命令来构建新图像。
在里面Dockerfile
第一行通常指定基本图像FROM
, i.e. FROM nginx
。随后的RUN
行中的Dockerfile
提供额外的步骤docker build
将在 shell 的上下文中执行FROM
图像,创建新图像。请注意,Dockerfile
不指定新图像的名称。相反,新图像的名称为-t some/name
选项docker build
The docker-compose.yml
文件指定一组要下载并作为组合服务的一部分一起运行的图像。例如,docker-compose.yml
博客可以由 Web 服务器映像、应用程序映像和数据库映像组成,并且不仅可以指定图像,还可以指定它们的通信方式。
由于 docker build 和 docker compose 是单独的操作,因此不会发生冲突或检测到差异。这docker-compose.yml
控制要下载和运行的内容,您也可以构建您喜欢的任何内容。
另外,正如@David Maze 在评论中提到的:
如果您使用这两个选项,则 Docker Compose 将按照指定构建映像,然后使用 image: name; 对其进行标记。如果您在那里放置“标准”图像名称,这可能会令人困惑。
我的猜测是,如果你这样做,你最终可能会得到一个图像,比如说nginx
在您自己的计算机上,与 Dockerhub 映像不匹配。不要那样做。相反,请为您构建的任何映像使用唯一的名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)