Viděl jsem mnoho lidí, kteří byli zmateni mezi souborem Dockerfile a souborem Compose. Je to především proto, že oba se používají k určité úpravě obrazu Dockeru, i když to není technicky správné.
Je snadné tyto dva pojmy zaměnit, ale je také nutné pochopit rozdíl při konverzaci s kolegou nebo vaším (potenciálním) zaměstnavatelem.
Dockerfile je to, co se používá k vytvoření obrazu kontejneru, a soubor Compose je to, co se používá k nasazení instance tohoto obrazu jako kontejneru.
Dovolte mi trochu podrobněji, abyste správně pochopili rozdíl mezi Docker Compose a Dockerfile.
Co je to Dockerfile?
Rád nazývám Dockerfile předchůdcem obrazu kontejneru. Vytvoříte obrázek z Dockerfile. Typický soubor Dockerfile obsahuje speciální instrukce pro sestavení, příkazy jako RUN
, ADD
, COPY
, ENTRYPOINT
, atd.
Vezměte si příklad níže:
FROM alpine:latest
RUN apk add --no-cache fortune
ENTRYPOINT ["fortune"]
Každý řádek začíná instrukcí pro komponentu sestavení. Tyto pokyny nemusí být nutně psány velkými písmeny. Následující platí stejně jako předchozí.
from alpine:latest
run apk add --no-cache fortune
entrypoint ["fortune"]
Z tohoto Dockerfile nyní můžete vytvořit image kontejneru (nebo image dockeru). Obrázek je jednoduše šablona pro běžící kontejnery, která se skládá z několika vrstev pouze pro čtení. Protože toto není článek o obrázcích kontejnerů, zdržím se přílišného vysvětlování tohoto tématu.
Chcete-li vytvořit bitovou kopii z tohoto souboru Dockerfile pomocí rozhraní příkazového řádku dockeru, spusťte následující příkaz
docker build -t fortune:alpine .
Tím se vytvoří obrázek s tagem fortune:alpine
. Z tohoto obrázku zatím nevytvořím kontejner, to je pro další sekci.
Co je nový soubor?
Soubory skládání se používají ve dvou typech nasazení:v neklastrovém nasazení s docker-compose
a nasazení clusteru s docker swarm
.
Abych rozlišil tyto dva typy, budu se zabývat souborem skládání odpovědným za nasazení clusteru jako soubory zásobníku. Za chvíli budu mluvit o souborech zásobníku.
Soubory pro vytváření zpráv jsou součástí nástroje zvaného docker-compose
. Je to klientská aplikace pro server démona dockeru, něco jako docker
klienta CLI, ale místo psaní celého run
příkazy pokaždé pomocí docker-compose
můžete znovu a znovu použít stejný soubor YAML a nasadit stejný kontejner se stejnou konfigurací, jako jste to udělali poprvé.
Je čitelnější, udržitelnější, intuitivnější. Jeden nový soubor může obsahovat více konfigurací nasazení kontejneru.
Podpora pro vytváření souborů bude součástí výchozího klienta dockeru, který je napsán v Go jako argument příkazového řádku „docker compose“. Všimněte si tam chybějící pomlčky. Je to stále experimentální, takže při výrobě se stále doporučuje používat verzi Python, tj. docker-compose.Vezměme předchozí obrázek a nasadíme jeho instanci pomocí nového souboru.
version: "3.3"
services:
fortune:
image: "fortune:alpine"
Uložte soubor jako docker-compose.yml
. Nyní spusťte ve stejném adresáři následující příkaz
docker-compose up
Nemusíte uložte soubor jako docker-compose.yml
, můžete jej uložit, jak chcete, ale pokud to není docker-compose.yml
nebo docker-compose.yaml
, ujistěte se, že používáte -f [FILENAME]
možnost.
docker-compose -f docker-compose.yml up
Počkejte a uvidíte, co se stane.
Chcete-li vědět, jaké fortune
je, přečtěte si tento článek o zábavných příkazech Linuxu.
Co je soubor zásobníku?
Zásobníkové soubory jsou až na některé výjimky totožné s komponovanými soubory s podobnou syntaxí a většinou interních možností. Soubory zásobníku se používají k nasazení zásobníků služeb v clusteru swarm.
Předchozí soubor pro vytvoření můžete znovu použít přímo jako zásobník.
Nejprve inicializujte cluster.
docker swarm init
Poté spusťte příkaz podobný následujícímu
docker stack deploy -c docker-compose.yml fortune
Pokud je takto nasazen, musíte zkontrolovat výstup zobrazením protokolů služeb pomocí docker service logs ...
.
Zabalení
Soubory Dockerfiles a Compose slouží k jinému účelu. Kdybych mohl vytvořit časovou osu, vypadala by nějak takto
Dockerfile -> Docker Image -> Compose File -> Running Containers
Existuje další důvod, proč se začátečníci s těmito dvěma soubory zaměňují. Na soubor Dockerfile lze odkazovat prostřednictvím souboru Compose a poté můžete použít docker-compose
budovat image.
Například můžete přepsat předchozí soubor pro psaní tak
version: "3.3"
services:
fortune:
build:
context: '.'
dockerfile: "./Dockerfile"
image: "fortune:alpine"
Nyní můžete spustit docker-compose build
budovat image. Nebo můžete také spustit docker-compose up --build
vytvořit a spustit kontejner najednou.
Zde je soubor Dockerfile předán přes soubor pro vytvoření a na první pohled se může zdát, že je to soubor pro vytvoření nového obrázku, který je zodpovědný za vytvoření obrázku, ale není tomu tak.
Docker Run vs Start vs Create:Rozdíl je vysvětlen Pro začátečníka dockeru mohou být pojmy jako docker start, docker run a docker create matoucí. Tento článek vysvětluje rozdíl na příkladech. Linux HandbookAbhishek PrakashDoufám, že tento článek objasnil, jaký je rozdíl mezi souborem Dockerfile a souborem Compose. Pokud máte nějaké dotazy, dejte mi vědět v sekci komentářů níže.