当前位置: 首页 > java >正文

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

文章目录

  • 介绍
  • 创建.NET WebAPI项目
  • 项目打包
  • 项目部署
    • 文件准备
    • 部署命令
    • 可能的问题与解决

介绍

使用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),配置端口的方式不止一种,只试验了这一种:
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镜像时的参数)
# 此阶段用于在快速模式(默认为调试配置)下从 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镜像的脚本)
    后面部署时直接运行脚本,不必输入很长的命令。
    脚本内容(需根据项目名称灵活调整):
docker  build -t web-dotnet:prod-1.0 -f Dockerfile .
  1. 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
  1. 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

在这里插入图片描述

http://www.xdnf.cn/news/3390.html

相关文章:

  • 实现了一个基于寄存器操作STM32F103C8t6的工程, 并实现对PA1,PA2接LED正极的点灯操作
  • npm宿主依赖、宿主环境依赖(peerDependencies)(指由宿主环境提供的依赖)
  • 网络安全防火墙技术有哪些?网络防火墙的主要作用
  • 在ASP.NET MVC中使用Repeater指南
  • 【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)
  • Seata服务端回滚事务核心源码解析
  • springboot中异步接口实现所有方式_20250501
  • 内存 “舞台” 上,进程如何 “翩翩起舞”?(转)
  • idea安装
  • 【Unity】 组件库分类详解
  • RAGFlow报错:ESConnection.sql got exception
  • 【基础算法】插值查找算法 - JAVA
  • (即插即用模块-Attention部分) 六十一、(2024 ACCV) LIA 基于局部重要性的注意力
  • 【数据分享】2020年中国高精度森林覆盖数据集(免费获取)
  • VBA数据库解决方案第二十讲:Select From Where条件表达式
  • 「面白い」日本 课文详解
  • 【MySQL数据库】视图
  • Flutter PIP 插件 ---- 新增PipActivity,Android 11以下支持自动进入PIP Mode
  • ARM ASM
  • 【云原生】基于Centos7 搭建Redis 6.2 操作实战详解
  • 【五一培训】Day1
  • Redis 挂掉后高并发系统的应对策略:使用 Sentinel 实现限流降级与 SkyWalking 监控优化
  • PostgreSQL 数据库下载和安装
  • Stm32 烧录 Micropython
  • 基于机器学习的舆情分析算法研究
  • 连接linux虚拟机并运行C++【从0开始】
  • 机器学习实战,天猫双十一销量与中国人寿保费预测,使用多项式回归,梯度下降,EDA数据探索,弹性网络等技术
  • vue中$set原理
  • Meta公司于2025年4月29日正式推出了全新Meta AI应用程序的首个版本
  • 正则表达式:精准匹配,高效处理文本