使用 Docker 运行 Elixir Phoenix 应用程序
设置 Elixir 开发环境的一个巧妙方法是使用 Docker 而不是在asdf本地使用或安装 Elixir 工具链。
pwdDocker 可以选择将目录挂载到容器中,我们可以利用这个功能,通过 unix 命令(打印工作目录)挂载我们当前所在的任何文件夹。
我们还可以指示 Docker 暴露端口,并在容器停止后将其移除。将这些功能结合起来,我们就能获得一个完全由 Docker 封装的 Elixir 环境。该命令的基本形式如下(使用 bash):
docker run --mount type=bind,source=$(pwd),target=/app -p 4000:4000 --rm elixir:latest
从这里开始,我们可以扩展它,用 Elixir 做任何我们想做的事情,例如运行mix命令。
不过,我们需要创建一个包含这些工具的 Docker 镜像。以下是一个 Docker 镜像示例,您可以docker build -t elixir-env .在 Dockerfile 的目录中使用它来构建镜像:
# Extend from the official Elixir image
FROM elixir:latest
RUN mix local.hex --force \
&& mix archive.install --force hex phx_new \
&& apt-get update \
&& curl -sL https://deb.nodesource.com/setup_lts.x | bash \
&& apt-get install -y apt-utils \
&& apt-get install -y nodejs \
&& apt-get install -y build-essential \
&& apt-get install -y inotify-tools \
&& mix local.rebar --force
ENV APP_HOME /app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
EXPOSE 4000
CMD ["mix", "phx.server"]
创建镜像并打上标签后,elixir-env我们可以通过在 bash 中运行该容器来创建 Phoenix 应用程序:
docker run --mount type=bind,source=$(pwd),target=/app -p 4000:4000 --rm elixir-env:latest mix phx.server
但真正有趣的地方在于,当你将其别名化为 shell 中的一个函数时。
这样做可以让你获得基本的 CLI 工具,并且使其像本地安装一样易于使用。
要为函数设置别名,只需执行以下操作:
alias mix="docker run --mount type=bind,source=$(pwd),target=/app -p 4000:4000 --rm elixir:latest mix"
从这里我们可以直接使用mix该容器运行后续的任何调用。因此,我们可以将其替换为本地安装,而无需关心它是否通过 Docker 运行。
这种技术在测试环境或因依赖冲突而无法在本地机器上运行特定程序时非常有效。在 Docker 中运行程序可以避免处理全局依赖项,并允许您进行全新安装,从而获得更大的灵活性。
文章来源:https://dev.to/eikooc/using-docker-for-your-elixir-phoenix-application-n8n