四时宝库

程序员的知识宝库

docker在单机环境下利用docker-compose实现水平扩展和负载均衡

准备工作

示例核心代码:(.net 6 web api project)

[Route("api/[controller]")]
[ApiController]
public class HomeController : ControllerBase
{
    [HttpGet]
    public async Task<string> Get()
    {
        var localIp = NetworkInterface.GetAllNetworkInterfaces()
            .Select(p => p.GetIPProperties())
            .SelectMany(p => p.UnicastAddresses)
            .FirstOrDefault(p => p.Address.AddressFamily == AddressFamily.InterNetwork &&     !IPAddress.IsLoopback(p.Address))?.Address.ToString();

		// 打印主机名称
        return await Task.FromResult(#34;Hello Docker! Host Name is {localIp}");
    }
}

docker-compose.yml

version: '3.4'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
  lb:
    image: dockercloud/haproxy   # 利用haproxy实现负载均衡
    links:
      - web
    ports:
      - 8080:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Dockerfile

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Docker.Compose.Demo/Docker.Compose.Demo.csproj", "Docker.Compose.Demo/"]
RUN dotnet restore "Docker.Compose.Demo/Docker.Compose.Demo.csproj"
COPY . .
WORKDIR "/src/Docker.Compose.Demo"
RUN dotnet build "Docker.Compose.Demo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Docker.Compose.Demo.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Docker.Compose.Demo.dll"]

开始构建

root@chris-virtualmachine-2:~/scale-demo# docker-compose ps
Name   Command   State   Ports
------------------------------
          
root@chris-virtualmachine-2:~/scale-demo# docker-compose up -d     # 启动1个web应用 1个lb应用
Creating network "scale-demo_default" with the default driver
Creating scale-demo_web_1 ... done
Creating scale-demo_lb_1  ... done

root@chris-virtualmachine-2:~/scale-demo# docker-compose up --scale web=5 -d   # 启动5个web应用 1个lb应用
Creating scale-demo_web_2 ... done
Creating scale-demo_web_3 ... done
Creating scale-demo_web_4 ... done
Creating scale-demo_web_5 ... done
scale-demo_lb_1 is up-to-date

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接