.net core的一种兼容Docker,k8s,Linux及Window的获取环境变量的方式

-- .net core的一种兼容Docker,k8s,Linux及Window的获取环境变量的方式(系统级,进程级别等)
【官网】:

应用场景

很多时候设计跨平台时,如何读取和设置环境变量都是一个问题,本文正好分享这块内容。

基础资源

使用须知

需要在不同环境下进行相关的验证. 不能在开发环境觉得可以就不管生产环境了。

配置步骤

A)不同平台的获取环境变量的方式.

A1)windows上获取环境变量的语句。

  [方案1:获取系统环境变量]


Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.Machine)



  [方案2: 获取用户环境变量]



Environment.GetEnvironmentVariable("name",EnvironmentVariableTarget.User)



A2)一种跨平台,兼容windows,linux,max,docker的获取环境变量的方式。

var  env=Environment.GetEnvironmentVariable("Env",RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? EnvironmentVariableTarget.Machine : EnvironmentVariableTarget.Process);



A3)startup.cs中的IWebHostEnvironment env( env.IsDevelopment(),env.EnviromentName)的作用。

上述环境变量严格意义来说对应了: Appseting.Development.json,Appseting.Production.json


  B)不同平台下设置环境变量的方式.

 B1)windows平台上.

   这点不用说了,打开: 【我的电脑】->【属性】->【高级系统设置】->【高级】->【环境变量】即可设置.

  B2)linux平台.

使用export命令直接修改PATH的值,配置MySQL进入环境变量的方法:

export PATH=/home/uusama/mysql/bin:$PATH  # 或者把PATH放在前面 export PATH=$PATH:/home/uusama/mysql/bin

注意事项:

  • 生效时间:立即生效
  • 生效期限:当前终端有效,窗口关闭后无效
  • 生效范围:仅对当前用户有效
  • 配置的环境变量中不要忘了加上原来的配置,即$PATH部分,避免覆盖原来配置



 B3)直接用docker启动的项目.

使用docker run --env VARIABLE=VALUE image:tag直接添加变量

示例:

root@ubuntu:/home/vickey/test_build# docker run --rm -it --env TEST=2 ubuntu:latest root@2bbe75e5d8c7:/# env |grep "TEST" TEST=2

 B4)k8s场景(不能用docker run命令启动的项目).

使用dockerfile的ARGENV添加变量:

ARG只在构建docker镜像时有效(dockerfile的RUN指令等),在镜像创建了并用该镜像启动容器后则无效(后面有例子验证)。但可以配合ENV指令使用使其在创建后的容器也可以生效。

ARG buildtime_variable=default_value        # if not set default_value buildtime_variable would be set ‘‘ ENV env_var_name=$buildtime_variable

在构建映像时,可以使用--build-arg buildtime_variable=other_value覆盖dockerfile里的变量值default_value

$ docker build --build-arg buildtime_variable=other_value --tag image:tag





常见问题

快速入门

参考资料