Wie benenne ich Dockerfiles?

140

Ich bin mir nicht sicher, wie ich Dockerfiles benennen soll. Viele auf GitHub verwenden Dockerfileohne Dateierweiterung. Gebe ich ihnen einen Namen und eine Erweiterung? wenn ja, was? Oder rufe ich sie einfach an Dockerfile?

Lloyd R. Prentice
quelle

Antworten:

165

Ändern Sie den Namen der Docker-Datei nicht, wenn Sie den Autobuilder unter hub.docker.com verwenden möchten. Verwenden Sie keine Erweiterung für Docker-Dateien, lassen Sie sie null. Der Dateiname sollte nur sein: (überhaupt keine Erweiterung)

Dockerfile

Sie können jedoch auch wie unten tun ...

dev.Dockerfile, uat.Dockerfile, prod.DockerfileUsw.

Auf VS Code können Sie verwenden <purpose>.Dockerfileund es funktioniert entsprechend.

tk_
quelle
83
Was ist, wenn Sie mehrere Docker-Dateien im selben Verzeichnis haben?
Visgean Skeloru
@ VisgeanSkeloru Obwohl ein bisschen mühsam, könnten Sie sie in verschiedenen Verzeichnissen ablegen, wenn nötig, egal wo ich gesucht habe, es scheint bereits etablierte Konvention zu sein
orustammanapov
2
@VisgeanSkeloru Nicht mehrere Docker-Dateien im selben Verzeichnis. Das enthaltende Verzeichnis wird zum Kontext für den docker buildBefehl. Dies bedeutet, dass jedes Image unnötig neu erstellt wird, wenn die Docker-Datei eines anderen Images geändert wird.
Thomas
6
@Thomas Manchmal müssen Sie mehrere Docker-Dateien im selben Verzeichnis ablegen, um gemeinsame Dateien für separate Container freizugeben, da der Docker-Kontext keinen Zugriff auf "../some-common-stuff"
Devis L.
Muss das "D" groß geschrieben werden oder spielt es keine Rolle?
NoName
51

dev.Dockerfile, test.Dockerfile, build.DockerfileUsw.

Auf VS Code verwende ich <purpose>.Dockerfileund es wird korrekt erkannt.

Sahil Ahuja
quelle
27

Ich denke, Sie sollten ein Verzeichnis pro Container mit einer Docker-Datei (keine Erweiterung) haben. Beispielsweise:

  /db/Dockerfile
  /web/Dockerfile
  /api/Dockerfile

Wenn Sie nur den Verzeichnisnamen verwenden, findet Docker die Docker-Datei. z.B:

docker build -f ./db .
garryp
quelle
Wird es 3 Container aus Ihrem Beispiel bauen?
Alvas
@ Alvas Ja, es wird
Garryp
4
In vielen Fällen ist es nicht gut genug. Docker kann keine Dateien sehen. Zum Beispiel Ziel, Build usw.
Cyva
Können wir diese 3-Docker-Datei dann gleichzeitig mit dem Befehl docker-compose ausführen?
Yogi Ghorecha
16

Wenn Sie den Autobuilder unter hub.docker.com verwenden möchten, muss dies der Fall sein Dockerfile . Also da :)

Dirk Eddelbuettel
quelle
3
Ich glaube, der Kontext der Frage war breiter. Vielleicht könnten Sie zusätzliche Informationen für Personen hinzufügen , die Autobuilder nicht verwenden , um diese Antwort vollständiger zu machen.
Josh Habdas
16

Es scheint, dass dies wahr ist, aber persönlich scheint es mir schlechtes Design zu sein. Sicher, haben Sie einen Standardnamen (mit Erweiterung), lassen Sie jedoch andere Namen zu und geben Sie den Namen der Docker-Datei für Befehle an.

Eine Erweiterung zu haben ist auch schön, weil man damit Anwendungen diesem Erweiterungstyp zuordnen kann. Wenn ich in MacOSX auf eine Docker-Datei klicke, wird diese als ausführbare Unix-Datei behandelt und versucht, sie auszuführen.

Wenn Docker-Dateien eine Erweiterung hätten, könnte ich das Betriebssystem anweisen, sie mit einer bestimmten Anwendung zu starten, z. B. meiner Texteditor-Anwendung. Ich bin nicht sicher, aber das aktuelle Verhalten kann auch mit den Dateiberechtigungen zusammenhängen.

Ashley Aitken
quelle
15

Ich habe zwei Docker-Dateien im selben Verzeichnis erstellt.

# vi one.Dockerfile
# vi two.Dockerfile

um beide Dockerfiles zu erstellen, verwenden Sie,

# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile

Hinweis: Sie sollten sich im aktuellen Arbeitsverzeichnis befinden.

Shivaraj Navalgund
quelle
10

Gebe ich ihnen einen Namen und eine Erweiterung? wenn ja, was?

Sie können Ihre Docker-Dateien beliebig benennen. Der Standarddateiname lautet Dockerfile(ohne Erweiterung). Die Verwendung des Standarddateinamens kann verschiedene Aufgaben beim Arbeiten mit Containern erleichtern.

Abhängig von Ihren spezifischen Anforderungen möchten Sie möglicherweise den Dateinamen ändern. Wenn Sie beispielsweise für mehrere Architekturen erstellen , möchten Sie möglicherweise eine Erweiterung hinzufügen, die die Architektur angibt, wie das Team von resin.io für den HAProxy -Container das ARM-Beispiel für mehrere Container erstellt hat :

Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi

In dem bereitgestellten Beispiel erstellt jede Docker-Datei aus einem anderen, architekturspezifischen Upstream-Image. Die spezifische Docker-Datei, die für den Build verwendet werden soll, kann mithilfe der --file, -fOption angegeben werden, wenn Sie Ihren Container über die Befehlszeile erstellen .

Josh Habdas
quelle
1
Ich benutze gerne eine Erweiterung, um Architektur (oder was auch immer) anzuzeigen. Im Gegensatz zu einigen anderen Antworten sind alle Docker-Dateien kinderleicht in einem großen, überfüllten Verzeichnis zu finden. sie sortieren natürlich zusammen.
Mike Sherrill 'Cat Recall'
3

Dockerfileist gut, wenn Sie nur eine Docker-Datei (pro Verzeichnis) haben. Sie können jeden gewünschten Standard verwenden, wenn Sie mehrere Docker-Dateien im selben Verzeichnis benötigen - wenn Sie einen guten Grund haben. In einem kürzlich durchgeführten Projekt gab es AWS-Docker-Dateien und lokale Entwicklungsumgebungsdateien, da sich die Umgebungen ausreichend unterschieden:

Dockerfile Dockerfile.aws

ktamlyn
quelle
Ich habe gesehen, dass diese Methode auch zum Spezifizieren von Architekturen verwendet wird. Platzieren Sie beispielsweise ein Dockerfile.armv7hfneben einem Dockerfile.i386.
Josh Habdas
1

Docker-Datei (benutzerdefinierter Name und Ordner):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Bauen:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Abel
quelle