Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core docker映像,每个客户具有应用程序设置_Docker_Asp.net Core_Dockerfile - Fatal编程技术网

.net core docker映像,每个客户具有应用程序设置

.net core docker映像,每个客户具有应用程序设置,docker,asp.net-core,dockerfile,Docker,Asp.net Core,Dockerfile,我有一个.NET Core 2.0 web api,它运行在负载平衡器后面的Docker容器(也是Docker容器)上。我想通过拥有多个容器来扩展web api,每个客户一个容器。考虑到这一点,我必须在配置中进行更改,以分离和抽象客户详细信息,这样我就可以为每个客户设置应用程序。那样的话,我就会有appsettings.CustomerA.config,appsettings.CustomerB.config等等 我的常规Dockerfile是: FROM microsoft/aspnetcor

我有一个.NET Core 2.0 web api,它运行在负载平衡器后面的Docker容器(也是Docker容器)上。我想通过拥有多个容器来扩展web api,每个客户一个容器。考虑到这一点,我必须在配置中进行更改,以分离和抽象客户详细信息,这样我就可以为每个客户设置应用程序。那样的话,我就会有
appsettings.CustomerA.config
appsettings.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"]
这很好,但我不知道的是我是否可以有不同的DockerFile,每个客户一个,我指定客户(不确定这是否是一个好的做法,因为我会将环境与客户混合,但同时,如果有意义,环境是针对给定客户的)或者根据客户的不同,我是否应该创建一个不同的配置文件进行复制

我从MicrosoftDocker文档中获取docker模板,并自己添加了环境


感谢您的帮助

我们不建议为每个客户提供单独的Dockerfile,甚至不建议使用单独的图像。这将很快导致需要管理大量DockerFile,并会带来许多复杂性,尤其是当您需要升级所有文件/图像时,新功能需要这样做

最好有一个Docker映像,并将所有特定于客户的配置外部化到映像的外部

有多种方法可以做到这一点。在Docker中,您可以将环境变量传递给容器以对其进行配置。您还可以将环境变量包装在配置文件中,并将其作为env文件传递


另一种“Docker方式”,将图像之外的内容具体化,就是使用。运行容器时,可以将主机上的目录绑定到容器上。在目录中,您可以有配置文件。。。启动时容器可以拾取。

非常感谢。然后,我将配置容器以使用挂载。似乎是实现我想要的最敏感的方式。如果我想使用swarm,我想知道如何实现自动化。计划是在工作节点上部署容器,但如果选择使用装载,我需要将客户配置单独部署到相关节点。我说得对吗?是的,没错。您需要在每台机器上配置。您可以通过一些网络共享(如NFS)来缓解此问题。或者,您可以切换到分布式的东西,如FTP或键值存储,如Redis,其中每个容器根据环境变量请求其配置。我明白了,这也是一个很好的解决方案。非常感谢你的帮助!