靈活設置docker容器內.net core app的配置文件信息

在咱們平常的開發過程當中,爲了達到程序的靈活配置,咱們每每將一些可變參數保存到配置文件中,而後在集成打包部署的時候經過腳本指令來替換配置文件中的參數,針對Docker容器內的應用程序,Docker也爲咱們提供了響應的替換方案,本篇文章主要爲你們介紹一下如何靈活的替換Docker容器內.net core配置文件中的參數信息。ios

在進行.net core app的開發過程當中,.net core內置了一種新的參數信息讀取方式,即讀取.json文件,咱們能夠將咱們程序中用到的可配置信息寫入到json文件中,.net core內置的IConfiguration接口能夠很方便的讀取json文件中的參數信息。docker

例如咱們在appsettings.json中添加一條數據信息,以下:"Service_Url": "234",完整的json文件內容爲:json

{
  "Logging":{
    "LogLevel":{
      "Default": "Warning"
    }         
  }, 
  "AllowedHosts": "*", 
  "Service_Url": "234" 
} 複製代碼

咱們能夠經過代碼 this.Configuration.GetValue<string>("Service_Url"); 獲取到配置文件中的Service_Url值,完整的代碼以下:bash

public class Startup
    {
        public Startup(IConfiguration configuration) {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services) {
            string Service_Url = this.Configuration.GetValue<string>("Service_Url");
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

           
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

            //Init Logger
        }
    }複製代碼

由於不少時候咱們開發環境,測試環境還有生成環境的某些參數配置是不同的,所以咱們須要將一些參數進行動態的設置,在docker中提供了兩種方式爲咱們動態的設置參數信息:cookie

在Dockerfile中進行參數的設置app

在咱們定義Dockerfile的時候咱們能夠將想要動態設置的參數在Dockerfile中進行定義,以下所示:post

FROM microsoft/dotnet:2.2-aspnetcore-runtime-nanoserver-1803 AS base
WORKDIR /app
ENV Service_Url 456
EXPOSE 80
EXPOSE 443複製代碼

上面的語法中,咱們在Dockerfile中添加名爲Service_Url的變量,並將其值設定爲456,這樣這個456就會覆蓋以前咱們在json文件中定義的234了。測試

在docker-compose.yml文件中進行參數的設置:ui

docker-compose.yml描述文件中爲咱們提供了enviroment variable的定義方式,咱們能夠將參數信息定義在這個屬性下面,以下所示:this

dockernetcore:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - Service_Url=123複製代碼

咱們在environment中定義了變量Service_Url,並賦值爲123,這樣這個123也會替代咱們在json文件中定義的234。

以上即是兩種替換變量值的方式,但願經過該篇文章的介紹能夠幫助你們更靈活的設置應用程序中用到的變量信息。


上一篇(Docker容器中應用程序的log輸出管理)

下一篇(本地搭建私有鏡像Registry)

相關文章
相關標籤/搜索