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?

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.


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.


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 .

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 :)


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.


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.


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.


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


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 .
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.