Як назвати Dockerfiles


140

Я не знаю, як назвати Dockerfiles. Багато хто з GitHub використовують Dockerfileбез розширення файлу. Чи даю їм ім’я та розширення; якщо так, що? Або я їх просто називаю Dockerfile?

Відповіді:


165

Не змінюйте ім'я dockerfile, якщо ви хочете використовувати автобудівник на hub.docker.com. Не використовуйте розширення для файлів докер, залиште його недійсним. Ім'я файлу повинно бути таким: (зовсім не розширення)

Dockerfile

однак, ви можете зробити так, як нижче ...

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

У коді VS можна використовувати, <purpose>.Dockerfileі він працює відповідно.


83
А як бути, коли у вас в одному каталозі є кілька Dockerfiles?
Віггея Скелору

@VisgeanSkeloru, хоч трохи клопоту, ти можеш помістити їх у різні довідники, якщо це буде потрібно, незалежно від того, де я шукав, здається, вже встановлена ​​конвенція
orustammanapov

2
@VisgeanSkeloru Не майте декількох Dockerfiles в одному каталозі. Каталог, що містить, стає контекстом для docker buildкоманди, а це означає, що кожне зображення буде непотрібно перебудовуватися, якщо зміниться докерфайл іншого зображення.
Томас

6
@Тома іноді потрібно розмістити кілька Dockerfiles в одному каталозі, щоб ділитися загальними файлами в окремих контейнерах, оскільки контекст докера не дозволяє отримати доступ до "../some-common-stuff"
Devis L.

Чи потрібно "D" з великої літери або це не має значення?
NoName

51

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

У коді VS, який я використовую, <purpose>.Dockerfileвін розпізнається правильно.


27

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

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

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

docker build -f ./db .

Чи побудує він 3 контейнера з вашого прикладу?
alvas

@alvas Так, буде
garryp

4
Це недостатньо добре в багатьох випадках. Докер не може бачити файли. Наприклад, target, build тощо.
Cyva

Чи можемо ми запустити цей 3 докер-файл одночасно за допомогою команди docker-compose?
Йогі Гореча

16

Якщо ви хочете використовувати автобудівник на hub.docker.com, це має бути Dockerfile . Так що :)


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

16

Здається, це правда, але, особисто, мені здається, це поганий дизайн. Звичайно, мати ім'я за замовчуванням (з розширенням), але дозволити інші імена та спосіб вказати ім'я файлу докера для команд.

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

Якщо у файлів Докера було розширення, я можу сказати ОС запустити їх із певної програми, наприклад моєї програми редактора тексту. Я не впевнений, але поточна поведінка також може бути пов'язана з дозволом файлів.


15

Я створив два докерфіли в одному каталозі,

# vi one.Dockerfile
# vi two.Dockerfile

для створення обох Dockerfiles використання,

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

Примітка: ви повинні бути в поточному робочому каталозі ..


10

Чи даю їм ім’я та розширення; якщо так, що?

Ви можете назвати свої Dockerfiles, скільки завгодно. Ім'я файлу за замовчуванням Dockerfile(без розширення), а використання типових даних може полегшити різні завдання під час роботи з контейнерами.

Залежно від ваших конкретних вимог, ви можете змінити ім'я файлу. Наприклад, якщо ви будуєте для декількох архітектур, ви можете додати розширення, що вказує архітектуру, як команда resin.io зробила для контейнера HAProxy їхній багатоконтейнерний приклад ARM :

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

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


1
Мені подобається використовувати розширення для позначення архітектури (або будь-якої іншої). На відміну від деяких інших відповідей, всі Dockerfiles мертві, їх просто знайти у великому, захаращеному каталозі; вони, природно, сортують разом.
Майк Шеррілл 'Відкликання котів'

3

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

Dockerfile Dockerfile.aws


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

1

Докерфайл (власне ім’я та папка):

   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.