簡體   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