Кажется, здесь есть некоторая путаница относительно того, что делает 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.