Jak nazwać pliki Dockerfiles

140

Nie wiem, jak nazwać pliki Dockerfiles. Wiele osób korzysta z GitHub Dockerfilebez rozszerzenia pliku. Czy nadam im nazwę i rozszerzenie; Jeśli tak to co? A może po prostu do nich dzwonię Dockerfile?

Lloyd R. Prentice
źródło

Odpowiedzi:

165

Nie zmieniaj nazwy pliku dockerfile, jeśli chcesz użyć autobuildera na hub.docker.com. Nie używaj rozszerzenia dla plików Dockera, pozostaw je puste. Nazwa pliku powinna wyglądać po prostu: (bez rozszerzenia)

Dockerfile

jednak możesz zrobić to, co poniżej ...

dev.Dockerfile, uat.Dockerfile, prod.DockerfileItd.

Na VS Code możesz użyć <purpose>.Dockerfilei działa odpowiednio.

tk_
źródło
83
A co, gdy masz wiele plików Dockerfiles w tym samym katalogu?
Visgean Skeloru
@VisgeanSkeloru chociaż trochę to sprawiło kłopot, w razie potrzeby możesz umieścić je w różnych katalogach, bez względu na to, gdzie wyglądałem, wydaje się, że jest to już ustalona konwencja
orustammanapov
2
@VisgeanSkeloru Nie miej wielu plików Dockerfiles w tym samym katalogu. Katalog zawierający staje się kontekstem dla docker buildpolecenia, co oznacza, że ​​każdy obraz zostanie niepotrzebnie odbudowany, jeśli zmieniony zostanie plik dockerfile innego obrazu.
Thomas
6
@ Thomas czasami trzeba umieścić wiele plików Dockerfile w tym samym katalogu, aby udostępniać wspólne pliki w oddzielnych kontenerach, ponieważ kontekst Dockera nie pozwala na dostęp do „../some-common-stuff”
Devis L.
Czy litera „D” musi być pisana wielką literą, czy to nie ma znaczenia?
NoName
51

dev.Dockerfile, test.Dockerfile, build.DockerfileItd.

Na VS Code używam <purpose>.Dockerfilei jest poprawnie rozpoznawany.

Sahil Ahuja
źródło
27

Myślę, że powinieneś mieć katalog na kontener z plikiem Dockerfile (bez rozszerzenia). Na przykład:

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

Podczas budowania po prostu użyj nazwy katalogu, Docker znajdzie plik Dockerfile. na przykład:

docker build -f ./db .
garryp
źródło
Czy zbuduje 3 kontenery z twojego przykładu?
alvas
@alvas Yes it will
garryp Kwietnia
4
W wielu przypadkach nie wystarczy. Docker nie widzi plików. Na przykład cel, kompilacja itp.
Cyva
Czy w takim razie możemy uruchomić ten 3 plik docker naraz za pomocą polecenia docker-compose?
Yogi Ghorecha
16

Jeśli chcesz korzystać z autobuildera na hub.docker.com, musisz to zrobić Dockerfile . Tak więc :)

Dirk Eddelbuettel
źródło
3
Uważam, że kontekst pytania był szerszy. Być może możesz dołączyć dodatkowe informacje dla osób, które nie używają autobuildera, aby uzupełnić tę odpowiedź.
Josh Habdas,
16

Wydaje się, że to prawda, ale osobiście wydaje mi się, że to kiepski projekt. Jasne, miej domyślną nazwę (z rozszerzeniem), ale zezwalaj na inne nazwy i miej sposób na określenie nazwy pliku dockera dla poleceń.

Posiadanie rozszerzenia jest również przyjemne, ponieważ pozwala kojarzyć aplikacje z tym typem rozszerzenia. Kiedy klikam plik Dockerfile w systemie MacOSX, traktuje go jako plik wykonywalny systemu Unix i próbuje go uruchomić.

Gdyby pliki Dockera miały rozszerzenie, mógłbym powiedzieć systemowi operacyjnemu, aby uruchamiał je z konkretną aplikacją, np. Moim edytorem tekstu. Nie jestem pewien, ale obecne zachowanie może być również związane z uprawnieniami do plików.

Ashley Aitken
źródło
15

Utworzyłem dwa Dockerfile w tym samym katalogu,

# vi one.Dockerfile
# vi two.Dockerfile

do budowania obu Dockerfiles,

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

Uwaga: powinieneś być w obecnym katalogu roboczym.

Shivaraj Navalgund
źródło
10

Czy nadam im nazwę i rozszerzenie; Jeśli tak to co?

Możesz dowolnie nazywać swoje pliki Dockerfiles. Domyślna nazwa pliku to Dockerfile(bez rozszerzenia), a jej użycie może ułatwić różne zadania podczas pracy z kontenerami.

W zależności od konkretnych wymagań możesz chcieć zmienić nazwę pliku. Jeśli na przykład budujesz dla wielu architektur, możesz chcieć dodać rozszerzenie wskazujące architekturę, jaką wykonał zespół resin.io dla kontenera HAProxy, przykład wielopojemnikowego ARM :

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

W podanym przykładzie każdy plik Dockerfile jest kompilowany z innego, specyficznego dla architektury obrazu nadrzędnego. Konkretny plik Dockerfile, który ma być używany do kompilacji, można określić za pomocą --file, -fopcji podczas budowania kontenera za pomocą wiersza polecenia.

Josh Habdas
źródło
1
Lubię używać rozszerzenia, aby wskazać architekturę (lub cokolwiek). W przeciwieństwie do innych odpowiedzi, wszystkie pliki Dockerfiles są bardzo łatwe do znalezienia w dużym, zagraconym katalogu; w naturalny sposób sortują się razem.
Mike Sherrill „Cat Recall”
3

Dockerfilejest dobre, jeśli masz tylko jeden plik Dockera (na katalog). Możesz użyć dowolnego standardu, jeśli potrzebujesz wielu plików Dockera w tym samym katalogu - jeśli masz dobry powód. W ostatnim projekcie istniały pliki dockera AWS i lokalne pliki środowiska deweloperskiego, ponieważ środowiska te różniły się wystarczająco:

Dockerfile Dockerfile.aws

ktamlyn
źródło
Widziałem również tę metodę używaną do określania architektur. Na przykład umieszczenie Dockerfile.armv7hfobok pliku Dockerfile.i386.
Josh Habdas
1

Dockerfile (niestandardowa nazwa i folder):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Budować:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Abel
źródło