![](/img/trans.png)
[英]Docker - docker-compose: php-fpm works from image, but don't work from build in Dockerfile
[英]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 build
從Dockerfiles
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.