Я хочу использовать образ докера в производственной среде для запуска контейнера Phoenix, однако, поскольку Elixir - это всего лишь слой поверх Erlang, кажется, что запуск Elixir в моей производственной среде может быть пустой тратой места.
В идеале я мог бы скомпилировать все приложение Phoenix в Erlang, а затем использовать образ из erlang: alpine для фактического запуска приложения в производственной среде. Что-то вроде этого...
FROM elixir:alpine as builder
(install dependencies and copy files)
RUN mix compile_app_to_erlang
FROM erlang:alpine
COPY --from=builder /path/to/compiled/erlang /some/other/path
CMD ["erlang", "run"]
примечание: compile_app_to_erlang не настоящая команда, но я ищу что-то подобное. Кроме того, я понятия не имею, как работает erlang, поэтому весь код там полностью составлен.
Кроме того, насколько я знаю, есть проект под названием distillery, который делает это, но это похоже на то, что не должно быть слишком сложным (если бы я знал, как работает erlang), и я бы предпочел не полагаться на другой зависимости, если у меня тоже нет. Кроме того, похоже, что если вы используете ликеро-водочный завод, вам также придется использовать пользовательские образы докеров для запуска кода, чего я стараюсь избегать.
Возможно ли что-то подобное? Если да, то кто-нибудь знает решение DIY?
Я предлагаю вам использовать винокурня для создания двоичного файла.
Затем просто запустите контейнер alpine
, смонтируйте к нему distillery release
, запустите двоичный файл. Да, вы можете использовать Supervisor для его запуска.
Вы можете использовать remote_console
distillery для связи с консолью этого двоичного файла.