2017-11-27 6 views
1

ロードバランサの背後にあるDockerコンテナ(ドッキング用のコンテナ)上で実行されている.NET Core 2.0 Web APIがあります。私は顧客ごとに1つ、複数のコンテナを持つことでWeb APIの規模を拡大したいと考えています。そのことを念頭に置いて、顧客の詳細を分けて抽象化するために構成を変更しなければならなかったので、顧客ごとにアプリの設定を行うことができます。私はappsettings.CustomerA.configを持つことになりそうすれば、appsettings.CustomerB.configなど.netお客様のアプリケーション設定を持つコアドッカー画像

私の一般的なDockerfileは次のとおりです。すべての罰金ですが、私は知らないが、私が指定したところ、私は、顧客ごとに1つずつ異なるDockerfilesを持つことができるかどうかである

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"] 

顧客と環境を混在させているので、それは良い習慣であるかどうかは確かではありませんが、それと同時に、その環境は特定の顧客のためのものです)、または私がコピーする別の設定ファイルを作成する必要があるかどうか顧客に応じて?

Microsoftのドッカー文書https://docs.docker.com/engine/examples/dotnetcore/#create-a-dockerfile-for-an-aspnet-core-applicationからドッカーテンプレートを取得し、環境を自分で追加しました。ヘルプ

答えて

2

ため

おかげで顧客ごとに個別のDockerfile、あるいは別のイメージを持つことが推奨されていません。これにより、すぐに多数のドッカーファイルが管理され、多くの複雑さが導入されます。特に、新しい機能が必要なときにすべてのファイル/イメージをアップグレードする場合に便利です。

1つのDockerイメージを持ち、すべての顧客固有の構成をイメージの外部に外部化することが望ましいです。

これには複数の方法があります。 Dockerでは、コンテナに環境変数を渡して設定することができます。設定ファイルに環境変数をラップし、envファイルとして渡すこともできます。

画像の外側にあるものを外部化する別の "ドッカーの道"は、bind mountsを使用することです。コンテナの実行時に、ホストからコンテナにディレクトリをバインドできます。ディレクトリには、起動時にコンテナがピックアップできる設定ファイルがあります。

+0

これは本当にありがとうございます。次に、マウントを使用するようにコンテナを設定します。私が欲しいものを達成する最も敏感な方法と思われます。私は群れを使用したい場合、これがどのように自動化できるのだろうか。計画はワーカーノードにデプロイされたコンテナを取得することですが、マウントを使用することを選択した場合は、顧客の設定を関連するノードに個別に展開する必要があります。私は正しい? –

+0

はい、そうです。各マシンに設定が必要です。 NFSなどのネットワーク共有を行うことで、この問題を緩和することができます。また、FTPやRedisなどのキー値ストアなど、環境変数に基づいて各コンテナが構成を要求するような、分散したものに切り替えることもできます。 – yamenk

+0

私はそれも良い解決策だと思う。ご協力いただき誠にありがとうございます! –

関連する問題