Để bắt đầu, hãy tạo một dự án Web API mới và cấu hình nó để hỗ trợ Docker.
Thêm việc đọc các biến môi trường vào cấu hình:
config.AddEnvironmentVariables();
using DemoApi;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureAppConfiguration(config =>
{
config.AddEnvironmentVariables();
});
// Thêm các dịch vụ vào container.
builder.Services.Configure<AppConfig>(builder.Configuration);
builder.Services.AddControllers();
// Tìm hiểu thêm về cách cấu hình Swagger/OpenAPI tại https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Cấu hình pipeline yêu cầu HTTP.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
public class AppConfig
{
public string AppName { get; set; }
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"AppName": "demo"
}
Trong trường hợp này, nếu không có biến môi trường được cấu hình, giá trị mặc định từ appsettings.json sẽ được sử dụng. Nếu biến môi trường được cấu hình, nó sẽ ghi đè lên giá trị trong appsettings.json.
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace DemoApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class InfoController : ControllerBase
{
private readonly AppConfig _config;
private readonly ILogger<InfoController> _logger;
public InfoController(IOptions<AppConfig> config, ILogger<InfoController> logger)
{
_config = config.Value;
_logger = logger;
}
[HttpGet]
public ActionResult Get()
{
return Ok(_config.AppName);
}
}
}
Thêm Docker Compose vào dự án.
Sau khi biên dịch, hãy sao chép các tệp đã biên dịch sang máy Linux.
Lưu ý: Tệp .env được dùng để thêm các biến môi trường. Lưu ý rằng tệp này thường bị ẩn.
Tại đây, tôi sẽ sửa đổi các biến môi trường.
Vì chúng ta đang sao chép các tệp đã biên dịch, dưới đây là tệp Dockerfile:
#Xem https://aka.ms/customizecontainer để tìm hiểu cách tùy chỉnh container gỡ lỗi của bạn và cách Visual Studio sử dụng Dockerfile này để xây dựng hình ảnh của bạn nhanh hơn cho gỡ lỗi.
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
COPY . /app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
ENTRYPOINT ["dotnet", "DemoApi.dll"]
Tệp Docker Compose có hai tệp: docker-compose.yml và docker-compose.override.yml.
Mặc định, Compose đọc hai tệp, docker-compose.yml và một tệp tùy chọn docker-compose.override.yml. Theo quy ước, docker-compose.yml chứa cấu hình cơ bản của bạn. Tệp override.yml, như tên gọi của nó, chứa các cấu hình ghi đè lên dịch vụ hiện có hoặc các dịch vụ mới.
docker-compose.yml
version: '3.4'
services:
demoapi:
image: demoapi
build:
context: .
dockerfile: Dockerfile
docker-compose.override.yml - Thực tế, tệp này không cần thiết nếu bạn đã cấu hình mọi thứ trong docker-compose.yml. Tuy nhiên, để mục đích thử nghiệm, chúng ta sẽ viết nó như sau:
version: '3.4'
services:
demoapi:
env_file: .env
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_HTTP_PORTS=8080
- AppName=${APP_NAME}
ports:
- "8911:8080"
restart: always
Tiếp theo, thực thi lệnh docker-compose up -d để khởi động các container, và sử dụng docker-compose down để dừng và xóa chúng.
Bây giờ, khi truy cập ứng dụng, bạn sẽ thấy giá trị của biến môi trường, nó sẽ ghi đè lên giá trị trong appsettings.json.
Kết quả: Hoạt động bình thường.