Составить из произвольной папки с файлами в контексте сборки и папки Dockerfile

Я хотел бы создать сервис, сохраняя при этом файловую структуру моего проекта. Но у Docker, похоже, есть проблемы с путями вне контекста сборки. Я создаю пакет и хотел бы хранить все материалы, связанные с Docker, в папке в корне проекта. Но я не могу найти способ сослаться на файлы проекта с docker-compose и Dockerfile. При создании контейнеров файлы из проекта необходимо скопировать.

Вот моя текущая структура проекта:

root/
    docker/
        docker-compose.yml
        Dockerfile
        docker_resource.txt
        config
    src/
        project-files.whatever
    root-files.txt

Теперь, если я $cd docker и $docker-compose up, есть две возможности, которые я пробовал. Либо мой Dockerfile копирует файлы с помощью COPY .. /path/in/container, либо в файле компоновки есть инструкции по сборке, например:

x-build: &my-build
    context: ..
    dockerfile: docker/Dockerfile

Первый подход не работает. Очевидно, Dockerfile не может ссылаться ни на что вне контекста сборки. Второй подход работает, но только после того, как я отредактирую команду копирования с docker_resource.txt на docker/docker_resource.txt. В идеале я хотел бы сохранить возможность docker build из ./dockerи сохранять чистоту, не беспокоясь о контексте компоновки в Dockerfile. Это возможно?

Как минимум, мне нужен способ иметь файлы, связанные с докером, в произвольной папке и иметь возможность указывать контекст сборки в файле компоновки без дополнительных изменений.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
0
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно относиться к src/project-files.whatever как к самодостаточной минимальной сборке. Я бы поместил Dockerfile внутрь src. Его следует рассматривать как часть проекта, и он должен быть специфичным для него. Однако вам все равно нужно будет отредактировать команду копирования.

root/
    docker/
        docker-compose.yml
        docker_resource.txt
        config
    src/
        project-files.whatever
        Dockerfile
    root-files.txt

Вы все равно хотите разделить композицию, Dockerfile и ресурсы. В зависимости от того, что находится внутри docker_resource, вы можете переместить его в src. Думайте об образе как о самой программе без каких-либо настроек. Я предлагаю поместить материалы ресурсов/конфигурации в том, чтобы вам не приходилось перестраивать с нуля при каждом изменении.

Другой способ сделать это — поместить Dockerfile на один уровень выше и разрешить вашему корню быть контекстом сборки. В этом случае ваша структура будет примерно такой:

/root
    Dockerfile
    docker-compose.yml
    docker_resource.txt
    config
    src/
        project-files.whatever
    root-Files/
        root-files.txt

Не уверен, что тебе это нравится.

Не нравится, но это мало помогает. Несмотря ни на что, спасибо за ответ! Я рассмотрю первый изложенный вами подход.

Felix 01.02.2019 12:10

Другие вопросы по теме