Как назвать Dockerfiles


140

Я не уверен, как назвать Dockerfiles. Многие на GitHub используют Dockerfileбез расширения файла. Я даю им имя и расширение; Если да, то? Или я просто позвоню им Dockerfile?

Ответы:


165

Не меняйте имя файла dockerfile, если вы хотите использовать autobuilder на hub.docker.com. Не используйте расширение для файлов Docker, оставьте его пустым. Имя файла должно быть просто: (без расширения)

Dockerfile

Тем не менее, вы можете сделать, как показано ниже ...

dev.Dockerfile, uat.Dockerfile, И prod.Dockerfileт.д.

На VS Code вы можете использовать, <purpose>.Dockerfileи он работает соответственно.


83
Как насчет того, когда у вас есть несколько файлов Docker в одном каталоге?
Visgean Skeloru

@VisgeanSkeloru, хотя и немного хлопотно, вы можете поместить их в разные каталоги, если это необходимо, независимо от того, где я смотрел, похоже, это уже установленное соглашение
orustammanapov

2
@VisgeanSkeloru Не используйте несколько файлов Docker в одном каталоге. Содержащий каталог становится контекстом для docker buildкоманды, что означает, что каждое изображение будет перестроено без необходимости, если файл Docker другого изображения будет изменен.
Томас,

6
@Thomas иногда вам нужно разместить несколько файлов Docker в одном каталоге, чтобы обмениваться общими файлами между отдельными контейнерами, потому что контекст Docker не позволяет получить доступ к "../some-common-stuff"
Devis L.

Нужно ли вводить букву «D» или это не имеет значения?
NoName

51

dev.Dockerfile, test.Dockerfile, И build.Dockerfileт.д.

На VS Code я использую <purpose>.Dockerfileи он распознается правильно.


27

Я думаю, у вас должен быть каталог на контейнер с Dockerfile (без расширения). Например:

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

Когда вы собираете просто использовать имя каталога, Docker найдет Dockerfile. например:

docker build -f ./db .

Будет ли он строить 3 контейнера из вашего примера?
Alvas

@alvas Да, будет
garryp

4
Это не достаточно хорошо во многих случаях. Докер не может видеть файлы вверх. Например, цель, сборка и т. Д.
Cyva

Можем ли мы запустить этот файл 3 docker одновременно, используя команду docker-compose?
Йоги Гореча

16

Если вы хотите использовать autobuilder на hub.docker.com, так и должно быть Dockerfile . Так что :)


3
Я считаю, что контекст вопроса был более широким. Возможно, вы могли бы включить дополнительную информацию для лиц, не использующих autobuilder, чтобы сделать этот ответ более полным.
Джош Хабдас

16

Кажется, это правда, но лично мне кажется плохой дизайн. Конечно, иметь имя по умолчанию (с расширением), но разрешить другие имена и способ указать имя файла Docker для команд.

Наличие расширения также хорошо, потому что оно позволяет ассоциировать приложения с этим типом расширения. Когда я нажимаю на Dockerfile в MacOSX, он обрабатывает его как исполняемый файл Unix и пытается запустить его.

Если у файлов Docker есть расширение, я могу указать ОС запустить их с определенным приложением, например, с моим приложением для текстового редактора. Я не уверен, но текущее поведение также может быть связано с разрешениями файла.


15

Я создал два файла Docker в одном каталоге,

# vi one.Dockerfile
# vi two.Dockerfile

построить оба Dockerfiles,

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

Примечание: вы должны быть в текущем рабочем каталоге.


10

Я даю им имя и расширение; Если да, то?

Вы можете назвать свои Dockerfiles так, как вам нравится. Имя файла по умолчанию Dockerfile(без расширения), и использование по умолчанию может упростить различные задачи при работе с контейнерами.

В зависимости от ваших конкретных требований вы можете изменить имя файла. Например, если вы строите для нескольких архитектур, вы можете добавить расширение, обозначающее архитектуру как разрабатываете сделала команда смолы.io для контейнера HAProxy в своем примере ARM для нескольких контейнеров :

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

В представленном примере каждый Dockerfile строится из отдельного, специфичного для архитектуры, восходящего образа. Конкретный Dockerfile для использования в сборке может быть указан с помощью--file, -f опции при сборке контейнера с помощью командной строки.


1
Мне нравится использовать расширение, чтобы указать архитектуру (или что-то еще). В отличие от некоторых других ответов, все файлы Docker очень просто найти в большом, загроможденном каталоге; они естественно сортируют вместе.
Майк Шеррилл "Cat Recall"

3

Dockerfileхорошо, если у вас есть только один файл Docker (на каталог). Вы можете использовать любой стандарт, какой захотите, если вам нужно несколько файлов докеров в одном каталоге - если у вас есть веская причина. В недавнем проекте были файлы Docker AWS и локальные файлы среды разработки, потому что среды достаточно различались:

Dockerfile Dockerfile.aws


Я видел этот метод, используемый для определения архитектуры, а также. Например, поместив Dockerfile.armv7hfрядом с Dockerfile.i386.
Джош Хабдас

1

Dockerfile (пользовательское имя и папка):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Телосложение:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.