Дублирование среди Dockerfiles - PullRequest
0 голосов
/ 01 сентября 2018

Я сейчас устанавливаю OpenStack Keystone. Для автономного Keystone необходимы три компонента: mysql, python и apache2.

Абсолютно я не могу выбрать все из них на базу, я сделал Python в качестве базового образа, а другие были вставлены как операторы RUN для установки mysql и apache2.

Я думаю, что операторы RUN являются дублированием, потому что все три компонента существуют в общем реестре Docker.

Есть ли хорошее решение или правильный способ повторно использовать существующий внешний Dockerfile ???

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Вы можете использовать Docker Compose для запуска приложения, имеющего mysql, python, and apache2.

Использование Docker compose позволит вам управлять настройкой приложения с помощью одной команды. Вам просто нужно написать файл DockerCompose.yml, а также файлы Docker, соответствующие контейнерам, которые вы настроите.

В вашем случае вы можете иметь dockerfile для настройки контейнера python и apache2 и другой Dockerfile, имеющий mysql в качестве базового образа для настройки указанного контейнера.

0 голосов
/ 01 сентября 2018

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

В вашем случае кажется, что ваше приложение состоит из OpenStack Keystone (для работы которого требуется Python и Apache) и MySQL. Поэтому я бы установил Python & Apache в ваш Dockerfile и настроил MySQL (возможно, просто используя образ из общедоступного репозитория) в качестве отдельного контейнера, к которому контейнер OpenStack подключается по сети.

Как упомянуто выше, этот сценарий является рекомендуемым способом запуска приложений Docker - он следует парадигме Unix «каждое приложение делает только одно, но делает это очень хорошо». Каждый контейнер делает только одну вещь и подключается к любым другим сервисам в других контейнерах. Но можно запустить несколько служб в одном контейнере, например. Keystone работает на Apache / python и MySQL в одном контейнере. Если это ваша цель, вы должны написать Dockerfile, который установит все и запустит все вместе. Этот Dockerfile, вероятно, будет довольно сложным и потребует ENTRYPOINT, которая заставит MySQL и Apache работать вместе. Скорее всего, вам придется дублировать большую часть работы, уже проделанной в стандартных образах MySQL и Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...