docker 部署 .net core 项目

示例:为abp vnext 4.3.0 .net 5 版本,项目结构如下:

dockerfile 文件如下:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["src/TrustCms.Web.Hosting/TrustCms.Web.Hosting.csproj", "src/TrustCms.Web.Hosting/"]
COPY ["src/TrustCms.Application/TrustCms.Application.csproj", "src/TrustCms.Application/"]
COPY ["src/TrustCms.Domain/TrustCms.Domain.csproj", "src/TrustCms.Domain/"]
COPY ["src/TrustCms.Domain.Shared/TrustCms.Domain.Shared.csproj", "src/TrustCms.Domain.Shared/"]
COPY ["src/TrustCms.Application.Contracts/TrustCms.Application.Contracts.csproj", "src/TrustCms.Application.Contracts/"]
COPY ["src/TrustCms.HttpApi/TrustCms.HttpApi.csproj", "src/TrustCms.HttpApi/"]
COPY ["src/Trust.Abp.WeChat/Trust.Abp.WeChat.csproj", "src/Trust.Abp.WeChat/"]
COPY ["src/TrustCms.EntityFrameworkCore.DbMigrations/TrustCms.EntityFrameworkCore.DbMigrations.csproj", "src/TrustCms.EntityFrameworkCore.DbMigrations/"]
COPY ["src/TrustCms.EntityFrameworkCore/TrustCms.EntityFrameworkCore.csproj", "src/TrustCms.EntityFrameworkCore/"]
RUN dotnet restore "src/TrustCms.Web.Hosting/TrustCms.Web.Hosting.csproj"
COPY . .
WORKDIR "/src/src/TrustCms.Web.Hosting"
RUN dotnet build "TrustCms.Web.Hosting.csproj" -c Release -o /app/build


FROM build AS publish
RUN dotnet publish "TrustCms.Web.Hosting.csproj" -c Release -o /app/publish


FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TrustCms.Web.Hosting.dll"]

执行打包命令  -t 指定 镜像名称

docker build -t demo .

打包成功

打包二

先发布应用程序

dockerfile 文件放到web 应用的根目录 ,dockerfile 文件要选择复制

dockerfile  内容

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
COPY . .
ENTRYPOINT ["dotnet", "TrustCms.Web.Hosting.dll"]

进行发布完成的目录里面  cmd  执行打包命令

打包完成后可在本地验证 应用是否跑起来 ;跳过

将镜像上传 腾讯云或者docker hub 或者阿里云,这里使用腾讯云;跳过

将镜像拉取下来 如图

应用程序需要挂载一下文件,所以要先创建对应的文件夹或文件 才能挂载,本次应用需要挂载日志目录,upload(文件上传目录) ,如图

准备工作完成,运行,

docker run -d -p 6001:80 -v /var/www/xxxx.net/StaticFiles:/app/StaticFiles -v /var/www/xxx.net/logs:/app/logs --name xx.net:0.1

查看启动日志,没有报错已经已经正常启动

docker logs 容器id

由于日志文件已经挂载可以从文件夹里面找到,前提是已经有输出日志信息

//进入容器内
docker exec -it 容器名称/id bash


ls //列出应用程序的文件夹或文件

查看容器的ip地址

docker inspect --format '{{ .NetworkSettings.IPAddress }}' 容器id/名称

通过IP+端口访问 必须要开放对应的端口

nginx  反向代理 ,nginx 安装 跳过

proxy_pass 这里使用容器IP地址 因为应用程序本身使用80端口 所以不需要加端口,根据需要自己填写

server {
    listen 80;
    server_name  xxx.net;
    location / {
        proxy_pass http://172.17.0.3;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $http_host;
        proxy_cache_bypass $http_upgrade;
    }
}

重启nginx  

nginx -s reload

成功!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值