.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 中的配置

结果 正常

 

posted on 2024-04-29 10:42  是水饺不是水饺  阅读(40)  评论(0)    收藏  举报

导航