部署.NET6.0 Web API项目到Docker

文章目录

介绍

使用VS2022创建一个.NET6Web API项目,将其打包,并部署到Linux服务器上的Docker中。

Linux和Docker环境已经备好,本文不再赘述,主要记录一下.NET6项目的创建和部署流程。

其中,部署方式不止一种,本文给出常见的一种方式。

代码及配置文件参考:https://gitee.com/redcod/net6-webapi-deploy-demo

创建.NET WebAPI项目

  1. 选择ASP.NET Core Web API项目:

  2. 项目名称叫做web-dotnet

  3. 项目参数

  4. 启动项目

  1. (开启了OpenAPI支持)启动后会自动打开Swagger页面,从中找到接口地址
  1. 在浏览器中访问该地址

项目打包

  1. 在Program.cs中配置一下端口(此示例使用端口9530),配置端口的方式不止一种,只试验了这一种:
csharp 复制代码
builder.WebHost.UseUrls("http://*:9530");
  1. 右击项目,点击【发布】

  2. 选择【文件夹】的方式

  3. 使用默认的发布输出路径,也可以更改

  4. 点击【发布】,可以在【更多操作】中配置其他发布参数,本文采用默认参数。

  5. 发布成功,点击【目标位置】则打开发布文件夹

  6. 发布结果都在public文件夹内

  7. 将public文件夹压缩为zip(方便上传到Linux后再解压,也可以直接上传public文件夹):

项目部署

文件准备

可以使用MobaXterm工具远程连接Linux服务器。

在Linux服务器某个文件夹内准备好以下五个内容:

  1. public文件夹(打包结果)
  2. Dockerfile配置文件(构建docker镜像时的参数)
bash 复制代码
# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 9530
COPY ./publish ./

ENTRYPOINT ["dotnet", "web-dotnet.dll"]
  1. build.sh脚本(生成docker镜像的脚本)
    后面部署时直接运行脚本,不必输入很长的命令。
    脚本内容(需根据项目名称灵活调整):
bash 复制代码
docker  build -t web-dotnet:prod-1.0 -f Dockerfile .
  1. docker-compose.yml配置文件(用于配置镜像运行环境,即容器环境)
bash 复制代码
version: "3"
services:
  web-dotnet:
    container_name: web-dotnet
    image: web-dotnet:prod-1.0
    restart: always
    networks:
     - docker_net
    ports:
     - 9530:9530
networks:
  docker_net:
    external:
      name: docker_net
  1. deploy.sh脚本(根据镜像创建容器并运行)
bash 复制代码
docker-compose -f docker-compose.yml up -d

部署命令

上面文件准备好后,依次运行build.sh和deploy.sh两个脚本即可。

效果图:

后续更新项目时,只需要先更新public文件夹,再依次运行这两个脚本,最后再删除旧版本的镜像。

可能的问题与解决

初次运行脚本时可能会出现无权限的提示:

则可以参考:https://blog.csdn.net/j123kaishichufa/article/details/9193475

也就是执行:

bash 复制代码
chmod 777 build.sh
chmod 777 deploy.sh
相关推荐
步步为营DotNet3 分钟前
洞悉.NET 11:Blazor 与 Microsoft.Extensions.AI 的融合创新实践
人工智能·microsoft·.net
回忆2012初秋11 分钟前
.NET 8.0 实战:基于 MQTTnet 封装高可用的 MQTT 发布/订阅工具类
开发语言·mqtt·.net
m0_7510186614 分钟前
docker 安装 nginx
vue.js·nginx·docker
人工智能培训39 分钟前
AI人工智能未来发展趋势
人工智能·深度学习·机器学习·docker·容器
成为你的宁宁1 小时前
【基于 Docker-compose 部署 Prometheus 监控系统实战教程 】
docker·容器·prometheus
梦梦代码精1 小时前
LikeShop按摩到家系统:2026年本地生活创业新风口,上门服务O2O源码私有化部署实战
大数据·docker·小程序·uni-app·生活·高并发·开源软件
回忆2012初秋2 小时前
.NET 8.0 工业物联网实战:基于 S7netplus 封装高可用西门子 PLC 通信类
物联网·.net
xiaogg36782 小时前
k8s 部署yaml文件和Dockerfile文件配置
java·docker·kubernetes
日取其半万世不竭2 小时前
Docker 网络模式详解:bridge、host、overlay 和 macvlan
网络·docker·容器
沪漂阿龙3 小时前
Docker 面试题详解:容器、镜像、Dockerfile、网络、Volume、Compose、安全与生产实践一次讲透
网络·安全·docker