Docker множественное наследование выполнения entry_point

У меня есть следующее Dockerfile:

FROM gitlab-registry.foo.ru/project/my_project
FROM aerospike/aerospike-server

И выше первого и второго есть ENTRYPOINT, Как известно, только один ENTRYPOINT будет выполнен. Существует ли способ запустить всех родителей ENTRYPOINT?

Это правильно, что я могу использовать Docker-Compose для таких задач, как это?

2 ответа

Решение

Из приведенных выше комментариев есть фундаментальное недопонимание того, что делает докер. Контейнер - это изолированный процесс. Когда вы запускаете Docker-контейнер, он запускает процесс для вашего приложения, а когда этот процесс завершается, контейнер завершается. Хорошая передовая практика - одно приложение на контейнер. Несмотря на то, что существуют способы запуска нескольких программ, я бы их не рекомендовал, так как это усложняет проверку работоспособности, обновления, обработку сигналов, ведение журнала и обнаружение сбоев.

Нет чистого способа объединить несколько изображений вместе. В указанном вами Dockerfile вы определили многоэтапную сборку, которую можно было бы использовать для копирования файлов с первого этапа на финальный этап. Полученное изображение будет последним FROM раздел, а не слияние двух изображений. Типичным использованием многоэтапных сборок является замена отдельных компилируемых образов или внешних процессов сборки, а также наличие единой команды с компилируемым образом и образом времени выполнения, который выводит приложение внутри образа времени выполнения. Это очень отличается от того, что вы ищете.

Предпочтительным способом запуска нескольких приложений в Docker является создание нескольких контейнеров из разных образов и использование Docker для объединения их в сеть. Вы захотите начать с docker-compose.yml, который может использоваться любым docker-compose на автономном двигателе докера, или с docker stack deploy использовать возможности режима роя.

Простой ответ - нет.

Ваш Dockerfile использует многоэтапные сборки Docker, которые используются для передачи зависимостей от одного изображения к другому. Последний FROM оператор является базовым изображением для полученного изображения.

Точка входа из базового изображения будет только унаследована. Вам нужно exlicilty установить точку входа, если вы хотите отличаться от той, которая указана в базовом изображении, исходящем из последнего FROM инструкция.

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