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

CentOS7使用Docker部署.net Webapi

1 准备WebApi项目

对于已存在的WebApi项目,需要添加Docker支持;
编码时,先设置好项目需要的端口号:program.cs中,app.Run("http://*:8000");设置端口为:8000

在VS中,选中项目:右键——添加——Docker支持,会自动添加Dockerfile文件

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

#net 6 运行时支持
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
#Api部署路径
WORKDIR /app
#开放的端口
#EXPOSE 8000
#
#FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
#ARG BUILD_CONFIGURATION=Release
#WORKDIR /src
#COPY ["TestWebApi.csproj", "."]
#RUN dotnet restore "./././TestWebApi.csproj"
#COPY . .
#WORKDIR "/src/."
#RUN dotnet build "./TestWebApi.csproj" -c $BUILD_CONFIGURATION -o /app/build
#
#FROM build AS publish
#ARG BUILD_CONFIGURATION=Release
#RUN dotnet publish "./TestWebApi.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
#
#FROM base AS final
#WORKDIR /app
#COPY --from=publish /app/publish .
#注意:COPY.符号以及.符号之间均有空格
COPY . .
ENTRYPOINT ["dotnet", "TestWebApi.dll"]

2 正常进行项目发布

注意:若发布的项目中不包含Dockerfile文件,需要将文件拷贝进去

在这里插入图片描述

3 准备服务器环境,安装Docker

//准备环境,安装Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//下载安装Docker核心
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
//设置Docker开机自启
systemctl enable  docker

4 将已发布的项目文件上传到服务器,使用WinSCP工具

WinSCP下载路径:https://winscp.net/download/WinSCP-6.3.2-Setup.exe/download

5 进入上传的WebApi部署文件夹下,构建镜像

docker build -t my-webapi .     //.表示当前根目录,镜像名:my-webapi

6 构建容器并运行

docker run --name 容器名 -d -p 8000:8000 镜像名   //暴露端口号:8000
//查看运行日志信息
docker logs --tail=8000 dotnetapitest

7 为保证服务正常运行,添加守护进程

//安装epel,据说这里面的软件包更丰富
yum install epel-release
//安装守护进程
yum install -y supervisor
systemctl enable supervisord # 开机自启动
systemctl start supervisord # 启动supervisord服务

8 打开守护进程的配置文件

cat /etc/supervisord.conf

在这里插入图片描述
红框部分表明在etc这个文件夹下的*.ini文件为守护进程的配置文件,可以自行配置

9 编写守护进程配置

//新建配置命令
sudo vi mywebapi.ini

//配置内容
[program:mywebapi]                     #进程名称
command=dotnet TestWebApi.dll         #站点启动指令
directory=/temp/你的网站项目地址      #命令执行目录
environment=ASPNETCORE_ENVIRONMENT=production  #进程环境变量
user=root                              #启动进程的账户
stopsignal=INT
autostart=true                         #supervisord启动时,该进程是否自启动
autorestart=true
startsecs=2                            #自动重启时间间隔,秒
srdeer_logfile=/temp/xxx.err.log    #错误日志,相关路径必须存在
stdout_logfile=/temp/xxx.out.log   #输出日志

supervisor控制台指令:

//更新新的配置到supervisord,配置修改后需要执行
supervisorctl update
//查看所有应用
supervisorctl status
//重新启动配置中的所有程序
supervisorctl reload
//启动某个进程(program_name=你配置中写的程序名称)
supervisorctl start program_name
//重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name
//停止全部进程
supervisorctl stop all

10 守护进程启动应用需要安装.net

//将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
//安装sdk
sudo yum install dotnet-sdk-6.0  //注意自己开发使用的版本
//安装运行时,一般情况下安装sdk之后,无需执行当前命令
sudo yum install aspnetcore-runtime-6.0
//重启服务器,测试服务是否正常运行
reboot

11 若部署出现异常,可执行如下命令之后重新部署

//关闭容器
docker stop 容器名
//删除容器
docker rm 容器名
//删除镜像
docker rmi 镜像名

http://www.kler.cn/a/273699.html

相关文章:

  • 切忌 SELECT *,就算表只有一列
  • android源码编译后,为什么emulator一直黑屏或者停止android界面
  • Linux web服务器
  • WEB前端-2
  • 递归构建树菜单节点
  • 网络安全-web渗透环境搭建-BWAPP(基础篇)
  • 汽车功能安全整体方法
  • Stream流将List列表中的每个对象赋值给另外一个List列表中的每个对象
  • Java的集合类
  • idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发
  • 阿里云ecs服务器配置反向代理上传图片
  • spring 没完没了
  • flink重温笔记(十七): flinkSQL 顶层 API ——SQLClient 及流批一体化
  • Excel xlsx file:not supported
  • 零基础学python:10、 函数的基础3
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Rect)
  • springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出
  • k8s admin 用户生成token
  • JavaScript之继承
  • 【sql】初识 where EXISTS
  • MySQL---索引
  • 第十四届蓝桥杯省赛C++B组题解
  • 【Unity动画】Unity如何导入序列帧动画(GIF)
  • 护眼灯和白炽灯哪个更保护眼睛?四款必选的高口碑护眼台灯
  • 第二十二章 构建和配置 Nginx (UNIX® Linux macOS) - 示例:为特定路径上的所有流量启用 CSP 路由
  • idea2023 运行多 springboot 实例