Was ist Docker-Compose?

Einführung

Ich denke, dass es viele Leute gibt, die mit Docker vertraut sind und sich auf der Ebene von "Ist es an der Zeit, mit dem Docker-Bildcontainer die Anzahl der Vielfachen zu entwickeln?" Befinden.

Ich bin einer von ihnen, aber selbst wenn ich versuchte, es beim Lesen der Referenz zu verwenden, konnte es nicht gut gehandhabt werden und die Entwicklung wurde verzögert.

Dieses Mal habe ich einen Kommentar zu "Docker-Compose Up" geschrieben, der der grundlegendste von allen ist, und ich bin ziemlich süchtig danach, wenn ich ihn nicht verstehe.

Ich bin auch ein Anfänger, daher würde ich mich freuen, wenn Sie auf Fehler hinweisen könnten.

Annahme

Nehmen wir dieses Mal zur Erläuterung des Befehls ein einfaches Projekt an, das einen Container startet.

Verzeichnisaufbau

.
├── Dockerfile
├── docker-compose.yml
├── file.txt
└── file2.txt

Inhalt von Dockerfile und docker-compose.yml

FROM ubuntu:18.04

WORKDIR work

ADD ./file.txt /work/file.txt

CMD ["ls"]

docker-compose.yml


version: '3.7'
services:
  test:
    build: .
    image: my-alpine-image
    container_name: my-apline

Lassen Sie uns vorerst "aufstehen"

Mal sehen, was passiert, wenn wir versuchen, Docker-Compose mit der obigen Konfiguration zu erstellen.

$ docker-compose up
Building test
//Schritt wird weggelassen

Successfully built ff8e7d96a995
Successfully tagged my-alpine-image:latest
WARNING: Image for service test was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating my-apline ... done
Attaching to my-apline
my-apline | file.txt
my-apline exited with code 0

Die folgenden zwei Punkte sind hier wichtig.

Mit anderen Worten, es ist dasselbe wie "Docker Run". Lassen Sie uns das Bild und den Container überprüfen.

$ docker ps -a     
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
6d14fde119f0        my-alpine-image     "/bin/bash"              10 minutes ago      Exited (0) 10 minutes ago                       my-apline
$ REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
my-alpine-image            latest              ff8e7d96a995        10 minutes ago        64.2MB

Sie können auch sehen, dass die Konsole file.txt enthält, da sie "my-apline | file.txt" druckt.

Dieses Verhalten ändert sich auch dann nicht, wenn es sich um mehrere Container handelt. Daher ** Hier "Ich verstehe, ich verstehe Docker Compose", was danach zu einem Missverständnis führt. ** ** **

Ändern Sie die Docker-Datei und versuchen Sie erneut, sie hochzuladen

Als nächstes ändern wir die Docker-Datei so, dass test2.txt auch im Container enthalten ist.

FROM ubuntu:18.04

WORKDIR work

ADD ./file.txt /work/file.txt
ADD ./file2.txt /work/file2.txt

CMD ["ls"]

Versuchen Sie nun, "Docker-Compose Up" auszuführen. Dann war das Ergebnis wie folgt.

$ docker-compose up
Starting my-apline ... done
Attaching to my-apline
my-apline | file.txt
my-apline exited with code 0

Wie Sie der Ausgabe entnehmen können, enthält der Container (my-apline) keine test2.txt.

Weil diesmal "Docker-Compose Up" ** ist, weil ich gerade den Container gestartet habe, den ich zuvor erstellt habe **.

Als Beweis können wir sehen, dass es keinen Unterschied gibt, wenn der Container und das Bild überprüft werden.

$ docker ps -a     
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
6d14fde119f0        my-alpine-image     "/bin/bash"              10 minutes ago      Exited (0) 10 minutes ago                       my-apline
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
my-alpine-image            latest              ff8e7d96a995        10 minutes ago        64.2MB

Wie erhält man einen Container mit dem neuesten Image, einschließlich test2.txt? ** ** **

Die richtige Antwort ist die Verwendung der Option "--build", die ausdrücklich angibt, dass Sie "erneut erstellen" möchten.

$ docker-compose up --build
Building test
//Schritt wird weggelassen

Successfully built 7218cdd4f17a
Successfully tagged my-alpine-image:latest
Recreating my-apline ... done
Attaching to my-apline
my-apline | file.txt
my-apline | file2.txt
my-apline exited with code 0

Sie können sehen, dass sowohl das Bild als auch der Container neu sind.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
28c26826bf20        my-alpine-image     "/bin/bash"              2 minutes ago       Exited (0) 2 minutes ago                       my-apline
$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
my-alpine-image            latest              7218cdd4f17a        About a minute ago   64.2MB

Zusammenfassung

Zusammenfassend lautet der Befehl docker-compose up

Ich habe herausgefunden, dass.

Übrigens, wenn Sie Docker-Compose ohne Image erstellen, sehen Sie die Konsole.

Image for service test was built because it did not already exist. To rebuild this image you must use docker-compose build or docker-compose up --build. (Es wurde erstellt, weil das Image für Servicetests nicht vorhanden war. Sie müssen "Docker-Compose Build" oder "Docker-Compose Up - Build" verwenden, um dieses Image neu zu erstellen.)

Ich bemerkte, dass es aus war. Wenn Sie Englisch richtig lesen, müssen Sie sich nicht so sehr verlaufen.

Ich hoffe, es ist hilfreich für Leute, die an ähnlichen Orten gestolpert sind!

Recommended Posts

Was ist Docker-Compose?
Laradocks Docker-Komposition besteht aus Moos
Was ist Docker-Compose (persönliches Memorandum)
Was ist Cubby?
Was ist null? ]]
Was ist java
Was ist Schlüsselumhang?
Was ist Maven?
Was ist Jackson?
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Java <>?
Was ist Gradle?
Was ist POJO?
Was ist java
Was ist centOS?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Was ist Byte?
Was ist Tomcat?
Was ist Maven Assembly?
Was ist ein Konstruktor?
Was ist vue cli
Was ist eine Schnittstelle?
Was ist Rubys Selbst?
Was ist harte Codierung?
Was ist ein Stream?
Was ist Rubys attr_accessor?
Was ist Java-Kapselung?
Was ist die Erlaubnis verweigert?
Was ist Instanzsteuerung?
Was ist ein Initialisierer?
Was ist Spring Tools 4?
Was ist ein Operator?
Was ist Objektorientierung?
Was ist Guavas @VisibleForTesting?
Was ist ein MVC-Modell?
Was ist eine Anmerkung?
Was ist Java-Technologie?
Was ist Java API-Java?
Was ist @ (Instanzvariable)?
Was ist Gradles Artefakt?
Was ist JPA-Prüfung?
[Java] Was ist flatMap?
Was ist ein Servlet?
Was ist Webentwicklung?
[Java] Was ist ArrayList?
Was ist HttpSession session = request.getSession ();