Wie führe ich eine Docker-Instanz aus einer Docker-Datei aus?


92

Endlich habe ich herausgefunden, wie ich Docker zum Laufen bringen kann.

docker run --name my-forum-nodebb --link my-forum-redis:redis -p 80:80 -p 443:443 -p 4567:4567 -P -t -i nodebb/docker:ubuntu

Ich habe es mit einer Redis-Instanz verknüpft, cool.

Dies ist von Grund auf neu und ich gehe davon aus, dass ich die Redis-Instanz erstellt habe

docker run --name my-forum-redis -d -p 6379:6379 nodebb/docker:ubuntu-redis

es zieht das Bild von einem Remote-Repo?

NodeBB bietet eine Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile an. Ich bin mir nicht ganz sicher, wie ich sie verwenden soll. Ich gehe davon aus, dass ich durch Aufrufen dieser Docker-Datei auf meiner Fernbedienung irgendwie eine lokale Umgebung erstellen kann.

Ist das richtig? Wenn ja, wie kann ich die lokale Instanz erstellen, die auf die Fernbedienung verweist?


Sie können das Docker-Image in Ihrer lokalen Umgebung erstellen und lokal abrufen
BMW

$ cat Dockerfile | Docker Build -t <Bildname> - #
Beachten Sie

Antworten:


94

Laden Sie die Datei herunter und führen Sie sie aus demselben Verzeichnis aus docker build -t nodebb .

Dadurch erhalten Sie auf Ihrem lokalen Computer ein Image mit dem Namen nodebb, von dem aus Sie einen Container starten können docker run -d nodebb(Sie können nodebb in Ihren eigenen Namen ändern ).


1
Wie funktioniert das? Wenn ich nur die Docker-Datei habe, woher weiß sie von meinem Projekt? Gibt es einen Link in der Docker-Datei? Dann gehe ich davon aus, dass Docker-Handles ein neues Image verpacken, das ich dann auf meinen Server migrieren kann. In dieser Verpackung absorbiert es alle Vermögenswerte meines Projekts? Tut mir leid, wenn ich unwissend klinge, Docker ist für mich ein neues Konzept, aber ich lerne gerne.
Michael Joseph Aubry

2
Danke übrigens und was bedeutet das <> in Ihrem Beispiel, warum haben Sie <nodebb> gewählt?
Michael Joseph Aubry

Kein Docker-Container kennt "Ihr" Projekt, sie sind sehr allgemein gehalten.
Andreas Wederbrand

3
Der von Ihnen angegebene Befehl hat nicht funktioniert, also habe ich "Docker Build" versucht und es hat funktioniert, aber da er nicht benannt ist, kann ich ihn nicht ausführen. docker build -t <nodebb> .gibt mir file exists: .. Ich habe ein vorhandenes Projekt, das mit einem Dockerfilegeliefert wurde, also habe ich es einfach in diesem Verzeichnis ausgeführt.
Michael Joseph Aubry

2
Dies beantwortet viele meiner Fragen, obwohl docs.docker.com/engine/reference/builder
Michael Joseph Aubry

44

Sie können einen Container nicht von einer Docker-Datei aus starten.

Der Prozess läuft folgendermaßen ab:

Dockerfile = [ docker build] => Docker image = [ docker run] => Docker-Container

Um einen Container zu starten (oder auszuführen), benötigen Sie ein Image. Um ein Image zu erstellen, müssen Sie die Docker-Datei [1] erstellen.

[1]: Sie können auch docker importein Bild von einem Tarball oder wieder docker load.


26

Obwohl die obigen Antworten brauchbar waren, hat mir das wirklich geholfen, also setze ich es auch hier ein.

Aus der Dokumentation :

Anstatt einen Kontext anzugeben, können Sie eine einzelne Docker-Datei in der URL übergeben oder die Datei über STDIN weiterleiten. So leiten Sie eine Docker-Datei von STDIN weiter:

$ docker build - < Dockerfile

Mit Powershell unter Windows können Sie Folgendes ausführen:

Get-Content Dockerfile | docker build -

Wenn der Build abgeschlossen ist, führen Sie den folgenden Befehl aus:

docker image ls

Sie werden so etwas sehen:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
<none>                     <none>              123456789        39 seconds ago      422MB

Kopieren Sie Ihre tatsächliche BILD-ID und führen Sie sie aus

docker run 123456789

Wobei die Nummer am Ende die tatsächliche Bild-ID aus dem vorherigen Schritt ist

Wenn Sie sich die Bild-ID nicht merken möchten, können Sie Ihr Bild mit markieren

docker tag 123456789 pavel/pavel-build

Welches markiert Ihr Bild als pavel/pavel-build


Erstaunlich, dass es 2020 so lange gedauert hat, diesen ersten Ausschnitt zu finden.
fullStackChris

Dies ist nur die akzeptierte Antwort mit mehr Zeremonie.
Michail

18

Einfache und einfache Lösung ist:

docker build .
=> ....
=> Successfully built a3e628814c67
docker run -p 3000:3000 a3e628814c67

3000 - kann jeder Port sein

a3e628814c68 - Hash-Ergebnis, das durch den Befehl zum Erstellen eines Erfolgs angegeben wird

HINWEIS : Sie sollten sich in einem Verzeichnis befinden, das Dockerfile enthält .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.