GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Docker File vs Docker Compose:Jaký je rozdíl?

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.

12 vtipných linuxových příkazů pro okořenění vašeho termináluZde je několik neškodných zábavných linuxových příkazů, které pobaví vaše kolegy a přátele. Mohou se zdát zbytečné, ale přesto jsou zábavné. Je to FOSSCommunita

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 Prakash

Doufá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.


Docker
  1. Jak aktualizovat/přidat soubor v Docker Image

  2. Jaký je rozdíl v přesměrování výstupu pomocí >, &>, >&a 2&>?

  3. Jaký je rozdíl mezi zápisem do souboru a namapovanou pamětí?

  1. Jaký je rozdíl mezi sekcemi a segmenty ve formátu souboru ELF

  2. Jaký je rozdíl mezi fsync a syncfs?

  3. Jaký je rozdíl mezi přidáním uživatele do sudoers a kořenové skupiny?

  1. Linux vs. Unix:Jaký je rozdíl?

  2. Ubuntu Server a Desktop:Jaký je rozdíl?

  3. Jaký je rozdíl mezi kontejnery LXC, LXD a Docker