GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Docker File vs. Docker Compose:Was ist der Unterschied?

Ich habe viele Leute gesehen, die zwischen einer Dockerfile und einer Compose-Datei verwechselt wurden. Dies liegt hauptsächlich daran, dass beide verwendet werden, um ein Docker-Image auf eine Weise zu modifizieren, obwohl dies technisch nicht korrekt ist.

Es ist leicht, die beiden Begriffe zu verwechseln, aber es ist auch notwendig, den Unterschied zu verstehen, wenn Sie ein Gespräch mit einem Kollegen oder Ihrem (potenziellen) Arbeitgeber führen.

Dockerfile wird verwendet, um ein Container-Image zu erstellen, und eine Compose-Datei wird verwendet, um eine Instanz dieses Images als Container bereitzustellen.

Lassen Sie mich ein wenig ins Detail gehen, damit Sie den Unterschied zwischen Docker Compose und Dockerfile richtig verstehen.

Was ist ein Dockerfile?

Ich nenne Dockerfile gerne den Vorgänger eines Container-Images. Sie erstellen ein Image aus einem Dockerfile. Ein typisches Dockerfile enthält spezielle Build-Anweisungen, Befehle wie RUN , ADD , COPY , ENTRYPOINT usw.

Nehmen Sie das folgende Beispiel:

FROM alpine:latest

RUN apk add --no-cache fortune

ENTRYPOINT ["fortune"]

Jede Zeile beginnt mit einer Anweisung für die Build-Komponente. Diese Anweisungen müssen nicht unbedingt in Großbuchstaben geschrieben werden. Das Folgende ist genauso gültig wie das vorherige.

from alpine:latest

run apk add --no-cache fortune

entrypoint ["fortune"]

Aus diesem Dockerfile können Sie nun ein Container-Image (bzw. ein Docker-Image) bauen. Ein Image ist einfach eine Vorlage für die laufenden Container, die aus mehreren schreibgeschützten Schichten besteht. Da dies kein Artikel über Container-Images ist, werde ich davon absehen, dieses Thema zu sehr zu erklären.

Führen Sie den folgenden Befehl aus, um mithilfe der Docker-CLI ein Image aus dieser Docker-Datei zu erstellen

docker build -t fortune:alpine .

Dadurch wird ein Image mit dem Tag fortune:alpine erstellt . Ich werde noch keinen Container aus diesem Image erstellen, das ist für den nächsten Abschnitt.

Was ist eine Compose-Datei?

Compose-Dateien werden in zwei Arten von Bereitstellungen verwendet:in der Nicht-Cluster-Bereitstellung mit docker-compose und eine Clusterbereitstellung mit docker swarm .

Um die beiden Typen zu unterscheiden, werde ich die Compose-Datei, die für die Cluster-Bereitstellung verantwortlich ist, als Stack-Dateien ansprechen. Ich werde gleich über Stack-Dateien sprechen.

Compose-Dateien sind Teil eines Tools namens docker-compose . Es ist eine Client-Anwendung für den Docker-Daemon-Server, ähnlich wie docker CLI-Client, aber anstatt den ganzen run einzugeben Befehle jedes Mal mit docker-compose Sie können dieselbe YAML-Datei immer wieder verwenden und denselben Container mit derselben Konfiguration wie beim ersten Mal bereitstellen.

Es ist besser lesbar, wartbarer und intuitiver. Eine einzelne Compose-Datei kann mehrere Container-Bereitstellungskonfigurationen enthalten.

Die Unterstützung von Compose-Dateien wird Teil des Standard-Docker-Clients sein, der in Go als Befehlszeilenargument „docker compose“ geschrieben ist. Beachten Sie den fehlenden Bindestrich dort. Es ist noch experimentell, daher wird in der Produktion die Verwendung der Python-Version, dh docker-compose, immer noch empfohlen.

Nehmen wir das vorherige Image und stellen eine Instanz davon mithilfe einer Compose-Datei bereit.

version: "3.3"

services:
    fortune:
        image: "fortune:alpine"

Speichern Sie die Datei als docker-compose.yml . Führen Sie nun im selben Verzeichnis den folgenden Befehl

aus
docker-compose up

Sie müssen nicht müssen Speichern Sie die Datei als docker-compose.yml , Sie können es speichern, wie Sie möchten, aber wenn es nicht docker-compose.yml ist oder docker-compose.yaml , stellen Sie sicher, dass Sie -f [FILENAME] verwenden Option.

docker-compose -f docker-compose.yml up

Abwarten was passiert.

Zu wissen, welches fortune Lesen Sie diesen Artikel über lustige Linux-Befehle.

12 lustige Linux-Befehle, um Ihr Terminal aufzupeppenHier sind einige harmlose, lustige Linux-Befehle, um Ihre Kollegen und Freunde zu amüsieren. Sie mögen nutzlos erscheinen, aber sie machen trotzdem Spaß. Es ist FOSSCommunity

Was ist eine Stack-Datei?

Stack-Dateien sind mit einigen Ausnahmen identisch mit Compose-Dateien mit ähnlicher Syntax und den meisten internen Optionen. Stapeldateien werden verwendet, um Stapel von Diensten in einem Schwarmcluster bereitzustellen.

Sie können die vorherige Compose-Datei direkt als Stack-Datei wiederverwenden.

Initialisieren Sie zuerst den Cluster.

docker swarm init

Führen Sie dann einen Befehl ähnlich dem folgenden aus

docker stack deploy -c docker-compose.yml fortune

Wenn Sie auf diese Weise bereitgestellt werden, müssen Sie die Ausgabe überprüfen, indem Sie die Dienstprotokolle mithilfe von docker service logs ... anzeigen .

Abschluss

Dockerfiles und Compose-Dateien dienen einem anderen Zweck. Wenn ich eine Zeitleiste erstellen könnte, würde sie in etwa so aussehen

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

Es gibt noch einen weiteren Grund, warum Anfänger mit diesen beiden Dateien verwirrt werden. Auf eine Dockerfile kann über die Compose-Datei verwiesen werden, und dann können Sie docker-compose verwenden um das Bild aufzubauen.

Beispielsweise können Sie die vorherige Compose-Datei so umschreiben

version: "3.3"

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

Jetzt können Sie docker-compose build ausführen um das Bild aufzubauen. Oder Sie können auch docker-compose up --build ausführen um den Container gleichzeitig zu erstellen und auszuführen.

Hier wird das Dockerfile durch die Compose-Datei geleitet, und auf den ersten Blick kann es so aussehen, als wäre die Compose-Datei für die Erstellung des Images verantwortlich, aber das ist es nicht.

Docker Run vs. Start vs. Create:Unterschied erklärtFür einen Docker-Anfänger könnten Begriffe wie Docker-Start, Docker-Run und Docker-Erstellung verwirrend sein. Dieser Artikel erklärt den Unterschied anhand von Beispielen. Linux-HandbuchAbhishek Prakash

Ich hoffe, dieser Artikel hat den Unterschied zwischen einer Docker-Datei und einer Compose-Datei geklärt. Wenn Sie Fragen haben, lassen Sie es mich im Kommentarbereich unten wissen.


Docker
  1. Linux vs. Unix:Was ist der Unterschied?

  2. Ubuntu Server vs. Desktop:Was ist der Unterschied?

  3. Was ist neu in Docker Compose v2?

  4. Was ist der Zweck der .bashrc-Datei in Linux

  5. Was ist der Unterschied zwischen Abschnitt und Segment im ELF-Dateiformat

NVMe vs. M.2:Was ist der Unterschied?

Ubuntu-Varianten:Was ist der Unterschied?

Was ist Docker Compose und wie wird es verwendet?

iptables vs. nftables:Was ist der Unterschied?

SIGTERM vs. SIGKILL:Was ist der Unterschied?

DevOps vs. Software Engineer:Was ist der Unterschied?