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

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
//有时候,需要将镜像拷到其他服务器使用,可以将镜像导出
//注意:硬件架构(amd/arm)不同,镜像不兼容
//镜像导出
docker save -o test.tar test:latest //镜像导出文件test.tar;test:latest=需要导出的镜像名:tag
//镜像导入
docker load -i 导出的镜像文件

6 构建容器并运行

docker run --name 容器名 -d -p 8000:8000 镜像名   //暴露端口号:8000
//查看运行日志信息
docker logs --tail=8000 dotnetapitest
//容器开机自启动
docker update --restart=always 容器名/容器Id
//容器也可以进行迁移
//导出容器
docker export -o test.tar test //test.tar:导出的容器;test:需要导出的容器名
//导入容器
docker import [options] file|URL|- [REPOSITORY[:TAG]]

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 镜像名

相关文章:

  • python云上水果超市的设计与实现flask-django-php-nodejs
  • C/C++代码性能优化——数据结构和算法
  • 云手机为电商提供五大出海优势
  • 企业数字化转型:是竞争力的关键,还是行业炒作?
  • web自动化测试框架都是有哪些?
  • vim | 介绍vim以及配置vimrc文件
  • 【C语言】C语言运算符优先级详解
  • 汽车制造产生的污废水如何处理排放
  • 简述从浏览器发出请求到数据返回的全过程
  • 洛谷 1679.神奇的四次方数
  • Elasticsearch:ES|QL 入门 - Python Notebook
  • 【每日一题】好子数组的最大分数
  • 追求抛负载性价比,就用国产SLD8S24A/ SLD8S33A/ SLD8S36A大功率TVS
  • LeetCode 0310.最小高度树:拓扑排序秒了
  • js复制内容到剪贴板实现复制粘贴功能
  • Docker下部署自己的LNMP工作环境
  • FastReport在线报表设计器工作原理
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • k8s如何管理Pod
  • Laravel Telescope:优雅的应用调试工具
  • Leetcode 27 Remove Element
  • leetcode46 Permutation 排列组合
  • Python进阶细节
  • Spark RDD学习: aggregate函数
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 百度地图API标注+时间轴组件
  • 翻译:Hystrix - How To Use
  • 服务器从安装到部署全过程(二)
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 入门到放弃node系列之Hello Word篇
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 算法之不定期更新(一)(2018-04-12)
  • 通过npm或yarn自动生成vue组件
  • 为视图添加丝滑的水波纹
  • 系统认识JavaScript正则表达式
  • Prometheus VS InfluxDB
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #pragma once
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (笔试题)分解质因式
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)Neo4j下载安装以及初次使用
  • (一)基于IDEA的JAVA基础1
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)http-server应用
  • (转)JAVA中的堆栈
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET 回调、接口回调、 委托
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换