部署.NET6.0 Web API项目到Docker
文章目录
- 介绍
- 创建.NET WebAPI项目
- 项目打包
- 项目部署
- 文件准备
- 部署命令
- 可能的问题与解决
介绍
使用VS2022
创建一个.NET6
的Web API
项目,将其打包,并部署到Linux服务器上的Docker中。
Linux和Docker环境已经备好,本文不再赘述,主要记录一下.NET6项目的创建和部署流程。
其中,部署方式不止一种,本文给出常见的一种方式。
代码及配置文件参考:https://gitee.com/redcod/net6-webapi-deploy-demo
创建.NET WebAPI项目
-
选择ASP.NET Core Web API项目:
-
项目名称叫做
web-dotnet
:
-
项目参数
-
启动项目
- (开启了OpenAPI支持)启动后会自动打开Swagger页面,从中找到接口地址
- 在浏览器中访问该地址
项目打包
- 在Program.cs中配置一下端口(此示例使用端口9530),配置端口的方式不止一种,只试验了这一种:
builder.WebHost.UseUrls("http://*:9530");
-
右击项目,点击【发布】
-
选择【文件夹】的方式
-
使用默认的发布输出路径,也可以更改
-
点击【发布】,可以在【更多操作】中配置其他发布参数,本文采用默认参数。
-
发布成功,点击【目标位置】则打开发布文件夹
-
发布结果都在public文件夹内
-
将public文件夹压缩为zip(方便上传到Linux后再解压,也可以直接上传public文件夹):
项目部署
文件准备
可以使用MobaXterm工具远程连接Linux服务器。
在Linux服务器某个文件夹内准备好以下五个内容:
- public文件夹(打包结果)
- Dockerfile配置文件(构建docker镜像时的参数)
# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 9530
COPY ./publish ./ENTRYPOINT ["dotnet", "web-dotnet.dll"]
- build.sh脚本(生成docker镜像的脚本)
后面部署时直接运行脚本,不必输入很长的命令。
脚本内容(需根据项目名称灵活调整):
docker build -t web-dotnet:prod-1.0 -f Dockerfile .
- docker-compose.yml配置文件(用于配置镜像运行环境,即容器环境)
version: "3"
services:web-dotnet:container_name: web-dotnetimage: web-dotnet:prod-1.0restart: alwaysnetworks:- docker_netports:- 9530:9530
networks:docker_net:external:name: docker_net
- deploy.sh脚本(根据镜像创建容器并运行)
docker-compose -f docker-compose.yml up -d
部署命令
上面文件准备好后,依次运行build.sh和deploy.sh两个脚本即可。
效果图:
后续更新项目时,只需要先更新public文件夹,再依次运行这两个脚本,最后再删除旧版本的镜像。
可能的问题与解决
初次运行脚本时可能会出现无权限的提示:
则可以参考:https://blog.csdn.net/j123kaishichufa/article/details/9193475
也就是执行:
chmod 777 build.sh
chmod 777 deploy.sh