开篇语
自己从头开始走一遍 docker 部署.net 的流程,作为一种学习总结,以及后续会写一些在该基础之上的文章。
本次示例环境:vs2019、net5、docker、postman
创建项目
本次事例代码是用过 vs2019 创建的 ASP.NET Core Web API 项目
目标框架是.Net5,无需身份验证,不配置 HTTPS(根据个人需求勾选),启动 Docker(我习惯于后期添加),启用 OpenAPI 支持(添加 swagger 文档)
默认配置
创建完成后,我们查看项目目录为下
我们直接 F5 启动项目,发现直接跳转一个 API 文档页面
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
修改配置
我基于个人习惯,我修改 launchSettings.json 文件,删除 IIS 配置,删除后如下所示:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:51539",
"sslPort": 0
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"Net5ByDocker": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"dotnetRunMessages": "true",
"applicationUrl": "http://localhost:5000"
}
}
}
删除默认控制器,添加新的控制器 UserController,在里面添加默认一些方法操作,如下
基于个人习惯的操作,也可以不删除默认控制器
[Route("api/[controller]/[action]")]
[ApiController]
public class UserController : ControllerBase
{
public static List<string> userInfo = new();
[HttpGet]
public IEnumerable<string> Get()
{
return userInfo;
}
[HttpPost]
public List<string> Post([FromBody] string value)
{
if (!string.IsNullOrWhiteSpace(value))
userInfo.Add(value);
return userInfo.ToList();
}
[HttpDelete("{id}")]
public List<string> Delete(string id)
{
if (!string.IsNullOrWhiteSpace(id))
userInfo.Remove(id);
return userInfo.ToList();
}
}
其他配置保持默认,启动项目
生成镜像
添加 dockerfile
选中项目右键添加 docker 支持,本次部署在 windows 平台
拉取基础镜像和 sdk,还原 nuget 包,重新生成,发布
此时项目的目录结构为
运行命令
在文件资源管理器打开文件
在上层目录下运行 cmd 输入命令
docker build -f .Net5ByDockerDockerfile -t net5sample .
在不同的目录下命令有些许差异,这点非常感谢我的朋友王老师
注意:可能部分朋友在这一步会拉取官方镜像比较慢,可以配置 docker 加速器使用
通过 docker 客户端查看我们已经生成的镜像
生成容器
本文通过Terminal软件执行命令
docker run --name net5sampleone -d -p 8060:80 net5sample
命令简述:
-d 后台运行
–name 容器名称
-p 端口映射
截至到这,我们已经把刚才的项目生成了容器,下面我们可以直接通过容器方法上面的项目
验证项目
通过浏览器访问地址:localhost:8060/swagger
懵逼!!!这个时候不是应该出来 swagger 文档的界面吗?难道我们部署的方式有问题?
让我们访问下项目的接口
说明我们的项目运行是正常的,仔细查看 swagger 配置后发现,因为为了安全默认不允许发布后出来 swagger 文档
如果是测试环境或者特殊情况可以通过调整 swagger 配置位置来显示文档
通过 Postman 访问
添加用户
查询用户
删除用户
再次运行查询接口数据已经为空了。
来源:鹏祥 ,作者 AZRNG