GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Docker File vs Docker Compose:qual è la differenza?

Ho visto molte persone confondersi tra un Dockerfile e un file Compose. Ciò è principalmente dovuto al fatto che entrambi vengono utilizzati per modificare un'immagine Docker in un certo modo, sebbene non sia tecnicamente corretto.

È facile confondere i due termini, ma è anche necessario capire la differenza quando si parla con un collega o con il proprio (potenziale) datore di lavoro.

Dockerfile è ciò che viene utilizzato per creare un'immagine contenitore e un file Compose è ciò che viene utilizzato per distribuire un'istanza di tale immagine come contenitore.

Consentitemi di entrare un po' nel dettaglio in modo da comprendere correttamente la differenza tra Docker Compose e Dockerfile.

Cos'è un Dockerfile?

Mi piace chiamare Dockerfile il predecessore di un'immagine contenitore. Costruisci un'immagine da un Dockerfile. Un tipico Dockerfile contiene istruzioni di compilazione speciali, comandi come RUN , ADD , COPY , ENTRYPOINT , ecc.

Prendi l'esempio seguente:

FROM alpine:latest

RUN apk add --no-cache fortune

ENTRYPOINT ["fortune"]

Ogni riga inizia con un'istruzione per il componente build. Queste istruzioni non devono necessariamente essere scritte in maiuscolo. Quanto segue è valido quanto il precedente.

from alpine:latest

run apk add --no-cache fortune

entrypoint ["fortune"]

Da questo Dockerfile, ora puoi creare un'immagine contenitore (o un'immagine Docker). Un'immagine è semplicemente un modello per i contenitori in esecuzione, costituito da più livelli di sola lettura. Dal momento che questo non è un articolo sulle immagini dei contenitori, mi asterrò dallo spiegare questo argomento.

Per creare un'immagine da questo Dockerfile, utilizzando la CLI della finestra mobile, esegui il seguente comando

docker build -t fortune:alpine .

Questo creerà un'immagine taggata fortune:alpine . Non creerò ancora un contenitore da questa immagine, è per la prossima sezione.

Cos'è un file Compose?

I file Compose vengono utilizzati in due tipi di distribuzioni:nella distribuzione non cluster con docker-compose e una distribuzione del cluster con docker swarm .

Per distinguere i due tipi, affronterò il file di composizione responsabile della distribuzione del cluster come file di stack. Tra poco parlerò dei file stack.

I file Compose fanno parte di uno strumento chiamato docker-compose . È un'applicazione client per il server daemon della finestra mobile, un po' come la docker client CLI, ma invece di digitare l'intero run comandi ogni volta, con docker-compose puoi riutilizzare lo stesso file YAML più e più volte e distribuire lo stesso container con la stessa configurazione della prima volta.

È più leggibile, più manutenibile, più intuitivo. Un singolo file di composizione può contenere più configurazioni di distribuzione del contenitore.

Il supporto per la composizione dei file farà parte del client Docker predefinito che è scritto in Go, come argomento della riga di comando, "docker compose". Nota il trattino mancante lì. È ancora sperimentale, quindi in produzione si consiglia di utilizzare la versione Python, ad es. docker-compose.

Prendiamo l'immagine precedente e distribuiamone un'istanza utilizzando un file di composizione.

version: "3.3"

services:
    fortune:
        image: "fortune:alpine"

Salva il file come docker-compose.yml . Ora esegui nella stessa directory il seguente comando

docker-compose up

Non devi salva il file come docker-compose.yml , puoi salvarlo come preferisci, ma se non è docker-compose.yml o docker-compose.yaml , assicurati di utilizzare il -f [FILENAME] opzione.

docker-compose -f docker-compose.yml up

Aspetta e guarda cosa succede.

Per sapere quale fortune cioè, leggi questo articolo sui comandi Linux divertenti.

12 divertenti comandi Linux per ravvivare il tuo terminale Ecco alcuni comandi Linux divertenti e innocui per divertire i tuoi colleghi e amici. Possono sembrare inutili ma sono comunque divertenti. È FOSSCommunity

Cos'è un file stack?

I file stack sono identici per comporre file con sintassi simile e la maggior parte delle opzioni interne, con alcune eccezioni. I file di stack vengono utilizzati per distribuire stack di servizi in un cluster swarm.

Puoi riutilizzare il file di composizione precedente direttamente come file di stack.

Innanzitutto, inizializza il cluster.

docker swarm init

Quindi esegui un comando simile al seguente

docker stack deploy -c docker-compose.yml fortune

Se distribuito in questo modo, è necessario controllare l'output visualizzando i registri del servizio utilizzando docker service logs ... .

Conclusione

I file Docker e Compose hanno uno scopo diverso. Se potessi costruire una sequenza temporale, sarebbe simile a questa

Dockerfile -> Docker Image -> Compose File -> Running Containers

C'è un altro motivo per cui i principianti si confondono con questi due file. È possibile puntare a un Dockerfile tramite il file Compose, quindi è possibile utilizzare docker-compose per costruire l'immagine.

Ad esempio, puoi riscrivere il file di composizione precedente così

version: "3.3"

services:
    fortune:
        build:
            context: '.'
            dockerfile: "./Dockerfile"
        image: "fortune:alpine"

Ora puoi eseguire docker-compose build per costruire l'immagine. Oppure puoi anche eseguire docker-compose up --build per creare ed eseguire il container contemporaneamente.

Qui il Dockerfile viene passato attraverso il file di composizione e, dal primo sguardo, può sembrare che sia il file di composizione responsabile della creazione dell'immagine, ma non lo è.

Docker Run vs Start vs Create:Differenza spiegata Per un principiante di Docker, termini come Docker Start, Docker Run e Docker Create potrebbero creare confusione. Questo articolo spiega la differenza con esempi. Manuale LinuxAbhishek Prakash

Spero che questo articolo abbia chiarito qual è la differenza tra un Dockerfile e un file Compose. Se hai domande, fammi sapere nella sezione commenti in basso.


Docker
  1. Linux vs. Unix:qual è la differenza?

  2. Ubuntu Server vs Desktop:qual è la differenza?

  3. Cosa c'è di nuovo in Docker Compose v2?

  4. Qual è la differenza nel reindirizzare un output usando >, &>, >&e 2&>?

  5. Qual è la differenza tra sezione e segmento nel formato di file ELF

NVMe vs M.2:qual è la differenza?

Sapori di Ubuntu:qual è la differenza?

Che cos'è Docker Compose e come lo usi?

iptables vs nftables:qual è la differenza?

SIGTERM vs SIGKILL:qual è la differenza?

DevOps vs Software Engineer:qual è la differenza?