Ich habe eine .NET Core 2.0 Web API, die auf einem Docker-Container hinter einem Load Balancer (auch ein Docker Container) ausgeführt wird. Ich möchte die Web API skalieren, indem ich mehrere Container, einen pro Kunde, habe. Vor diesem Hintergrund musste ich Änderungen in der Konfiguration vornehmen, um die Kundendetails zu trennen und zu abstrahieren, damit ich die App-Einstellungen pro Kunde vornehmen kann. So kann ich appsettings.CustomerA.config
, appsettings.CustomerB.config
usw..net Core Docker Bild mit App-Einstellungen pro Kunde
Meine allgemeine Dockerfile ist haben würde:
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"]
Das ist alles in Ordnung, aber was ich weiß nicht, ob ich verschiedene Dockerfiles haben kann, eine pro Kunde, wo ich angeben der Kunde (nicht sicher, ob das eine gute Praxis ist oder nicht, weil ich Umgebungen mit Kunden mische, aber gleichzeitig die Umgebung für einen bestimmten Kunden ist, wenn das Sinn macht) oder ob ich eine andere Konfigurationsdatei erstellen soll, die ich kopiere abhängig von dem Kunden?
Ich nahm die Docker-Vorlage aus der Microsoft Docker-Dokumentation https://docs.docker.com/engine/examples/dotnetcore/#create-a-dockerfile-for-an-aspnet-core-application und fügte die Umgebung selbst hinzu.
Danke für die Hilfe
Vielen Dank dafür. Ich werde dann den Container konfigurieren, um Mounts zu verwenden. Scheint der empfindlichste Weg, um das zu erreichen, was ich will. Ich frage mich, wie das automatisiert werden kann, wenn ich einen Schwarm benutzen will. Es ist geplant, Container auf Worker-Knoten bereitzustellen. Wenn Sie jedoch Mounts verwenden möchten, muss die Kundenkonfiguration separat auf die relevanten Knoten verteilt werden. Habe ich recht? –
Ja, das stimmt. Sie müssen auf jeder Maschine konfigurieren. Sie können dieses Problem durch eine Netzwerkfreigabe wie NFS beheben. Alternativ können Sie zu einem verteilten Gerät wie FTP oder einem Schlüsselwertspeicher wie Redis wechseln, wo jeder Container seine Konfiguration basierend auf Umgebungsvariablen anfordert. – yamenk
Ich sehe, das ist auch eine gute Lösung. Vielen Dank für deine Hilfe! –