Come nominare Dockerfiles


140

Non sono sicuro di come nominare Dockerfiles. Molti su GitHub usano Dockerfilesenza un'estensione di file. Dò loro un nome e un'estensione? e allora? O li chiamo e basta Dockerfile?

Risposte:


165

Non modificare il nome del file docker se si desidera utilizzare l'autobuilder su hub.docker.com. Non utilizzare un'estensione per i file docker, lasciala nulla. Il nome file dovrebbe essere solo: (nessuna estensione)

Dockerfile

tuttavia, puoi fare anche come di seguito ...

dev.Dockerfile, uat.Dockerfile, prod.DockerfileEtc.

Su VS Code puoi usare <purpose>.Dockerfilee funziona di conseguenza.


83
E quando hai più Dockerfile nella stessa directory?
Visgean Skeloru,

@VisgeanSkeloru anche se un po 'fuori dai guai potresti metterli in diverse directory, se necessario, non importa dove ho guardato, sembra che sia già stata stabilita una convenzione
orustammanapov

2
@VisgeanSkeloru Non hai più Dockerfile nella stessa directory. La directory contenente diventa il contesto per il docker buildcomando, il che significa che ogni immagine verrà inutilmente ricostruita se il file docker di un'altra immagine viene modificato.
Thomas,

6
@Thomas a volte è necessario posizionare più Dockerfile nella stessa directory per condividere file comuni su contenitori separati, perché il contesto docker non consente di accedere a "../some-common-stuff"
Devis L.,

La "D" deve essere maiuscola o non ha importanza?
NoName,

51

dev.Dockerfile, test.Dockerfile, build.DockerfileEtc.

Con VS Code lo uso <purpose>.Dockerfilee viene riconosciuto correttamente.


27

Penso che dovresti avere una directory per container con un Dockerfile (senza estensione) al suo interno. Per esempio:

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

Quando costruisci basta usare il nome della directory, Docker troverà il Dockerfile. per esempio:

docker build -f ./db .

Costruirà 3 container dal tuo esempio?
alvas,

@alvas Sì, lo farà
Garryp

4
Non è abbastanza buono molti casi. Docker non riesce a visualizzare i file. Ad esempio bersaglio, build, ecc.
Cyva,

Possiamo quindi eseguire questo file docker 3 contemporaneamente usando il comando docker-compose?
Yogi Ghorecha,

16

Se si desidera utilizzare l'autobuilder su hub.docker.com, deve esserlo Dockerfile . Quindi lì :)


3
Credo che il contesto della domanda fosse più ampio. Forse potresti includere ulteriori informazioni per le persone che non usano l' autobuilder per rendere questa risposta più completa.
Josh Habdas,

16

Sembra che sia vero ma, personalmente, mi sembra un design scadente. Certo, avere un nome predefinito (con estensione) ma consentire altri nomi e avere un modo per specificare il nome del file docker per i comandi.

Avere un'estensione è anche bello perché consente di associare le applicazioni a quel tipo di estensione. Quando faccio clic su un file Docker in MacOSX, lo tratta come un eseguibile Unix e tenta di eseguirlo.

Se i file Docker avessero un'estensione, potrei dire al sistema operativo di avviarli con una particolare applicazione, ad esempio la mia applicazione per l'editor di testo. Non sono sicuro, ma l'attuale comportamento potrebbe anche essere correlato alle autorizzazioni dei file.


15

Ho creato due file Docker nella stessa directory,

# vi one.Dockerfile
# vi two.Dockerfile

per compilare entrambi i Dockerfile,

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

Nota: dovresti essere nella directory di lavoro corrente.


10

Dò loro un nome e un'estensione? e allora?

Puoi nominare i tuoi Dockerfile come preferisci. Il nome file predefinito è Dockerfile(senza estensione) e l'utilizzo del valore predefinito può semplificare varie attività mentre si lavora con i contenitori.

A seconda delle tue esigenze specifiche potresti voler cambiare il nome del file. Se stai costruendo per più architetture, ad esempio, potresti voler aggiungere un'estensione che indica l'architettura come il team resin.io ha fatto per il contenitore HAProxy il loro esempio ARM multi-contenitore :

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

Nell'esempio fornito, ogni Dockerfile viene creato da un'immagine upstream diversa, specifica dell'architettura. Il Dockerfile specifico da utilizzare per la compilazione può essere specificato utilizzando l' --file, -fopzione quando si crea il contenitore utilizzando la riga di comando.


1
Mi piace usare un'estensione per indicare l'architettura (o qualsiasi altra cosa). A differenza di altre risposte, tutti i Dockerfile sono semplicemente semplici da trovare in una grande directory ingombra; ordinano naturalmente insieme.
Mike Sherrill "Cat Recall",

3

Dockerfileva bene se hai solo un file docker (per directory). Puoi utilizzare qualsiasi standard tu desideri se hai bisogno di più file docker nella stessa directory, se hai una buona ragione. In un recente progetto c'erano file docker AWS e file di ambiente di sviluppo locale perché gli ambienti differivano abbastanza:

Dockerfile Dockerfile.aws


Ho visto questo metodo usato anche per specificare architetture. Ad esempio, posizionando un Dockerfile.armv7hfaccanto a Dockerfile.i386.
Josh Habdas,

1

Dockerfile (nome e cartella personalizzati):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Costruire:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.