Как вы организуете файлы Docker, принадлежащие проекту, когда у вас есть один файл Docker для базы данных, один для сервера приложений и т. Д.? Вы создаете какую-то иерархию в источнике? Крупный корпоративный проект не может состоять только из одного Dockerfile?
218
Ответы:
Примечание автора
Этот ответ устарел. Инжир больше не существует и был заменен Docker compose . Принятые ответы не могут быть удалены ....
Docker Compose поддерживает построение проекта иерархии. Так что теперь легко поддерживать Dockerfile в каждом подкаталоге.
Оригинальный ответ
Я просто создаю каталог, содержащий Dockerfile для каждого компонента. Пример:
При сборке контейнеров просто укажите имя каталога, и Docker выберет правильный файл Dockerfile.
источник
В более новых версиях (> = 1.8.0) Docker вы можете сделать это
Большое спасение.
РЕДАКТИРОВАТЬ: обновить версии в соответствии с комментарием Ракся
РЕДАКТИРОВАТЬ: комментарий от @vsevolod: можно получить подсветку синтаксиса в коде VS, задав файлы. Расширение Dockerfile (вместо имени), например, Prod.Dockerfile, Test.Dockerfile и т. Д.
источник
Dockerfile.web
запускать конфигурацию. Поэтому я создал проблему: youtrack.jetbrains.com/issue/WEB-28185docker-compose.yml
файле?Используйте
docker-compose
и несколькоDockerfile
в отдельных каталогахКак сказал Кингсли Учнор , у вас может быть несколько
Dockerfile
, по одному на каталог, которые представляют то, что вы хотите построить.Мне нравится иметь
docker
папку, которая содержит каждое приложение и их конфигурацию. Вот пример иерархии папок проекта для веб-приложения, имеющего базу данных.docker-compose.yml
пример:docker-compose
Пример использования командной строки:Если вам нужны файлы из предыдущих папок при сборке Dockerfile
Вы все еще можете использовать выше раствор и положите
Dockerfile
в директорию , таких какdocker/web/Dockerfile
, все , что вам нужно , чтобы установить сборкуcontext
в вашей ,docker-compose.yml
как это:Таким образом, вы сможете получить такие вещи:
и
./docker/web/Dockerfile
вот так:Вот несколько быстрых команд из tldr docker-compose . Обязательно обратитесь к официальной документации для получения более подробной информации.
источник
COPY ../package.json /app/package.json
)? Этот файл обычно находится на корневом уровне, и Docker запретил доступ к родительскому. Какой подход вы будете использовать?web
проект из.
(indocker-compose.yml
:)build: .
. Таким образом,web
имеет доступ к корневым файлам при сборке. Я видел этот связанный вопрос: stackoverflow.com/questions/24537340/… и мы можем строить из родительского каталога вместо этого при использованииdocker
командной строки, и этот ответ показывает, как это сделать с помощью docker-compose: stackoverflow.com/a/45353241/ 1092815-f
вариант в порядке, но я предпочитаю использоватьdocker-compose
с подпапками. Я думаю, что оба ответа верны. Большинство людей могут предпочесть оставитьDockerfile
имя по умолчанию для поддержки большинства IDE из коробки. Я не отменяю первый ответ, я просто предоставляю альтернативу. Мне просто не нравится, когда моя среда разработки думает, что мой Dockerfile - этоphp
файл, когда я используюDockerfile.php
, но да, он работает. Я видел несколько примеров в документации докера;Dockerfile.build
,Dockerfile.debug
И т.д.example.Dockerfile
сохраняет подсветку синтаксиса и иконки на VSCode.В Intellij я просто изменил имя файла Docker на * .Dockerfile и связал тип файла * .Dockerfile с синтаксисом Docker.
источник
Добавьте слой абстракции, например, файл YAML, как в этом проекте https://github.com/larytet/dockerfile-generator, который выглядит следующим образом:
Короткий скрипт Python / make может генерировать все файлы Docker из файла конфигурации.
источник
При работе над проектом, который требует использования нескольких файлов Docker, просто создайте каждый файл Docker в отдельном каталоге. Например,
app / db /
Каждый из вышеперечисленных каталогов будет содержать свой dockerfile. Когда приложение собирается, docker будет искать все каталоги и создавать все файлы Docker.
источник