示例:为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
成功!!!!