.net core docker-compose 发布 (一)
新建一个webapi 项目 支持docker

添加 读取环境变量到配置
config.AddEnvironmentVariables();
using TestDockerWebAPI;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureAppConfiguration(config =>
{
config.AddEnvironmentVariables();
});
// Add services to the container.
builder.Services.Configure<TestSettings>(builder.Configuration);
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
public class TestSettings { public string MyName { get; set; } }
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"MyName": "test"
}
这里如果环境变量没有配置 是返回 test 如果环境变量配置 会覆盖 appsettings.json中配置
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace TestDockerWebAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
private readonly TestSettings _options;
private readonly ILogger<TestController> _logger;
public TestController(IOptions<TestSettings> options, ILogger<TestController> logger)
{
_options = options.Value;
_logger = logger;
}
[HttpGet]
public ActionResult Get()
{
return Ok(_options.MyName);
}
}
}
点击项目添加 docker-compose

万事具备 将编译后的文件拷贝到Liunx中

注意 这里的.env是添加环境变量配置 注意这个文件是隐藏的
这里我修改环境变量

由于拷贝的是编译后的文件下面是dockerfile文件
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base COPY . /apiweb WORKDIR /apiweb EXPOSE 8080 EXPOSE 8081 ENTRYPOINT ["dotnet", "TestDockerWebAPI.dll"]
docker-compose文件有两个docker-compose.yml 和docker-compose.override.yml
默认情况下,Compose 读取两个文件,docker-compose.yml和一个可选的docker-compose.override.yml文件。按照惯例,docker-compose.yml包含您的基本配置。override.yml 文件,顾名思义,就是包含现有服务或全新服务的配置覆盖。
参考 docker-compose配置文件_dockercompose配置文件-CSDN博客
docker-compose.yml
version: '3.4'
services:
testdockerwebapi:
image: testdockerwebapi
build:
context: .
dockerfile: Dockerfile
docker-compose.override.yml 其实这个文件不用写 直接在 docker-compose.yml 配置好就行 为了测试 这么写
version: '3.4'
services:
testdockerwebapi:
env_file: .env
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8080
- MyName=${MY_NAME}
ports:
- "8911:8080"
restart: always
接下来 执行 docker-compose up -d , 删除用docker-compose down

下面 访问 如果正确 是环境变量 的值哈哈 会覆盖appsettings.json 中的配置
结果 正常

浙公网安备 33010602011771号