在咱們平常的開發過程當中,爲了達到程序的靈活配置,咱們每每將一些可變參數保存到配置文件中,而後在集成打包部署的時候經過腳本指令來替換配置文件中的參數,針對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。
以上即是兩種替換變量值的方式,但願經過該篇文章的介紹能夠幫助你們更靈活的設置應用程序中用到的變量信息。