Entwicklertools · Docker Run zum Docker Compose-Konverter
Wie Docker-Run-Flags den Compose-Schlüsseln zugeordnet werden: -p, -v, -e, --name und mehr
· Wie es funktioniert
Docker komponieren Entwickler-Workflow
Die meisten Docker-Run-Flags haben ein Eins-zu-eins-Compose-Äquivalent, und einige haben keines. In diesem Beitrag wird die Zuordnung erläutert, sodass eine konvertierte Dienstdefinition wie erwartet aussieht.
Ein Docker-Lauf, der drei Zeilen in der README-Datei umschließt – es funktioniert, niemand kann es überprüfen und das Team möchte ein compose.yaml
Ein mehrzeiliger Docker-Lauf kann einen Dienst heute starten und gleichzeitig seinen Betriebsvertrag in einem Shell-Alias oder einer README-Datei verbergen. Eine Compose-Datei verschiebt dieselben Auswahlmöglichkeiten in eine überprüfbare Dienstdefinition, aber bei der Konvertierung muss jedes Flag berücksichtigt werden, anstatt Sicherheitseinstellungen stillschweigend zu löschen. ToolAcre analysiert den Befehl als Text: Es führt niemals das Image aus, öffnet keinen Docker-Socket und stellt keinen Container bereit. Behandeln Sie die Ausgabe als Entwurfskonfiguration, die noch einen Operator benötigt, der Hostpfade, Anmeldeinformationen und Netzwerkannahmen überprüft.
Die Form eines Dienstes – Bild, dann ein Satz Schlüssel, die die Flags widerspiegeln, unter Dienste: und ein Dienstname
Compose YAML beginnt unter „Dienste:“, gefolgt von einem Dienstnamen und einem Bild:. Im Gegensatz zu einer Befehlszeile gruppieren seine Schlüssel wiederholte Werte wie Ports und Umgebungseinträge in Sequenzen. ToolAcre leitet einen Dienstnamen von --name oder dem Bild ab und erstellt ein Modell, bevor YAML serialisiert wird. Aktuelle Compose-Dateien benötigen keine Top-Level-Version: key; Das Hinzufügen einer solchen Fehlermeldung ergab, dass ein älterer Blog-Beitrag zeigte, dass dadurch eher eine veraltete Warnung erstellt als die Kompatibilität verbessert würde.
Die allgemeinen Flags – -p für Ports, -v für Volumes, -e für die Umgebung, --name für Containername, --restart für Neustart, --network für Netzwerke
Gemeinsame Zuordnungen machen die Datei erkennbar: -p 8080:80 wird zu Ports: Bei einer Zuordnung in Anführungszeichen wird -v host:container zu einem Volume-Eintrag, -e KEY=value geht in die Umgebung, --name wird zu Containername, --restart wird zu restart und --network benötigt Netzwerkkontext. Das Zitieren der Portzuordnung ist wichtig, da YAML sie als Zeichenfolge behandeln und Satzzeichen nicht als einen anderen Typ interpretieren sollte. Für ein benanntes Volume ist möglicherweise eine eigene Volume-Deklaration der obersten Ebene erforderlich. Ein Host-Bind-Mount sollte mit dem Computer verglichen werden, auf dem Compose ausgeführt wird.
Die weniger gebräuchlichen Flags – --hostname, --user, --workdir, --entrypoint, --cap-add, --device, --label, --add-host und ihre Schlüssel
Flags wie --hostname, --user, --workdir, --entrypoint, --cap-add, --device, --label und --add-host verfügen über entsprechende Dienstkonzepte, ihre Semantik kann jedoch von der Laufzeit und dem Host abhängen. Ein nicht unterstützter --security-opt darf nicht als plausibel aussehender Schlüssel erfunden oder unsichtbar verworfen werden. ToolAcre listet Warnungen auf, in denen nicht unterstützte Optionen genannt werden, sodass ein Prüfer die Zuordnung manuell abschließen oder entscheiden kann, dass Compose nicht der richtige Ersatz ist. Das Vorhandensein eines YAML-Schlüssels beweist nicht, dass der Dienst mit denselben Berechtigungen startet.
Positionsargumente – das Bild wird zu image: und alles danach wird zu command:
Der Bildname ist ein Positionsargument nach run und seinen Optionen. Argumente nach dem Image werden zum Dienstbefehl und nicht zu weiteren Docker-Ausführungsflags. Das Verschieben eines Tokens über diese Grenze hinweg ändert, welches Programm es empfängt. Shell-Anführungszeichen und Backslashes sind auch wichtig, wenn ein README-Beispiel in Token aufgeteilt wird. Der Parser von ToolAcre ist kein Shell-Interpreter, daher sollte eine Variable wie $HOME im Kontext überprüft werden, anstatt davon auszugehen, dass sie sich wie in der ursprünglichen interaktiven Shell erweitert.
Arbeitsbeispiel: Konvertieren eines Postgres-Docker-Laufs – der vollständige Befehl, die resultierende Dienstdefinition und ein zeilenweiser Vergleich
Betrachten Sie den veranschaulichenden Befehl docker run -d --name demo-db -p 5432:5432 -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=demo-only --restart Until-Stopped Postgres:16. ToolAcre gibt services.demo-db mit Image postgres:16, Containername demo-db, einem in Anführungszeichen gesetzten 5432:5432-Port, einem pgdata-Volume, einem Umgebungslisteneintrag, restart: sofern nicht gestoppt, und einer pgdata-Volume-Deklaration der obersten Ebene aus. Es warnt davor, dass -d eine Befehlszeilenauswahl ist; Docker Compose Up -d kümmert sich darum. „Demo-only“ ist ein bewusst unsicherer Lehrplatzhalter – übertragen Sie niemals ein echtes Datenbankkennwort in dieses generierte YAML.
Was dies nicht abdeckt – Flags ohne Dienstäquivalent (-d, --rm) und Dinge, die überhaupt nicht im Befehl enthalten sind, wie z. B. Build-Kontexte
Nicht jedes Run-Flag verfügt über ein dauerhaftes Gegenstück zur Diensteigenschaft. -d wird vom Compose-Befehl verarbeitet, den Sie aufrufen; --rm gehört zu einem einmaligen Compose-Lauf und nicht zu einem lang laufenden Dienst. Ein Build-Kontext, ein geheimer Speicher, eine Integritätsstrategie oder eine Multi-Service-Abhängigkeit, die im ursprünglichen Befehl fehlen, können nicht abgeleitet werden. Das Tool meldet nicht unterstützte Flags, anstatt so zu tun, als wäre die Ausgabe ein vollständiger Bereitstellungsplan. Lesen Sie die Referenz zum Docker Compose-Dienst, bevor Sie einen privilegierten oder netzwerksensiblen Container bereitstellen.
Fazit: Compose ist die gleiche Konfiguration, strukturiert – und der Konverter erstellt die Dienstdefinition aus dem von Ihnen eingefügten Befehl
Compose ist die gleiche Konfiguration, strukturiert für Überprüfung und Wiederholbarkeit. Der Docker-Konverter „Run to Docker Compose“ gibt Ihnen eine Kandidatendienstdefinition in Ihrem Browser und behält den eingefügten Befehl lokal bei. Docker wird nicht ausgeführt. Vergleichen Sie jedes Quell-Flag mit seinem YAML-Schlüssel, beheben Sie Warnungen und entfernen Sie Geheimnisse aus einfachen Umgebungsblöcken, bevor Sie das Ergebnis auf einen echten Host anwenden.