.net核心docker图像与每个客户的应用程序设置

我有一个运行在负载平衡器(也是docker集装箱)后面的Docker容器上的.NET Core 2.0 web api。 我想通过拥有多个容器(每个客户一个)来扩展web api。 考虑到这一点,我必须改变configuration来分离和抽象客户的细节,所以我可以为每个客户的应用程序设置。 这样我就可以appsettings.CustomerA.configappsettings.CustomerB.config

我的一般Dockerfile是:

 FROM microsoft/aspnetcore-build AS builder WORKDIR /app # copy csproj and restore as distinct layers COPY ./Project/*.csproj ./ RUN dotnet restore # copy everything else and build COPY ./Project ./ RUN dotnet publish -c Release -o out # build runtime image FROM microsoft/aspnetcore WORKDIR /app COPY --from=builder /app/out ./ ENV ASPNETCORE_ENVIRONMENT Production ENTRYPOINT ["dotnet", "Project.dll"] 

这很好,但我不知道的是,我是否可以拥有不同的Docker文件,每个客户都有一个我指定客户的Docker文件(不确定这是否是一种好的做法,因为我将与客户混合环境,但同时,环境是给定的客户,如果这是有道理的),还是我应该创build一个不同的configuration文件,我根据客户复制?

我从Microsoft泊坞窗文档https://docs.docker.com/engine/examples/dotnetcore/#create-a-dockerfile-for-an-aspnet-core-application中取得了docker模板,并自己添加了环境。

谢谢您的帮助

不build议为每个客户或单独的图像分别提供一个Dockerfile。 这将很快导致大量的dockerfiles进行pipe理,并会引入许多复杂性,特别是当您需要在新function需要时升级所有文件/映像时。

最好有一个Docker镜像,并将所有客户特定的configuration外部化到图像的外部。

有多种方法可以做到这一点。 在Docker中,您可以将环境variables传递给容器来configuration它。 你也可以将环境variables包装在一个configuration文件中,并把它作为一个env文件传递。

另一种“Docker方式”,用于将图像外部的东西外部化,就是使用绑定安装 。 运行容器时,可以将主机上的目录绑定到容器上。 在目录中,你可以有configuration文件…容器可以在启动时拿起。