您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
Docker
Docker基础汇总 VUE Ubuntu Docker发布 .Net API Ubuntu Docker发布 Ubuntu Docker 部署MySQL
VUE Ubuntu Docker发布
Ubuntu Docker 部署MySQL
激萌の小宅 小宅博客 Docker

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

.Net API Ubuntu 18.04.6 Docker发布

    虚拟环境就按上一节的基础上来。

    安装之前,确认下当前的环境,如下:

QQ截图20240807131149.jpg


新建.net工程

参考博客:https://blog.csdn.net/hyq106/article/details/129046618


打开Visual Studio 2022,创建一个新的webapi项目。

QQ截图20240807135945.jpg


默认选项,一直下一步就ok。注意框架要使用.net6.0,不要选择.netframework(不支持跨平台)。

QQ截图20240807140039.jpg


QQ截图20240807140133.jpg


创建完后,已经生成完整的示例代码了,这个项目是可以直接运行的。这里我们在Program.cs文件中,稍作修改,在最后一行Run方法指定api的端口号,如下:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

app.Run("http://*:1040");


运行起来

QQ截图20240807140451.jpg


在浏览器输入地址“http://localhost:1040/WeatherForecast”,结果如下:

QQ截图20240807140542.jpg


项目运行没有问题。下一步要部署到linux上去。


生成Dockerfile

右键项目,选择“添加”-“Docker支持”。

QQ截图20240807140941.jpg


选择“Linux”,确定。

QQ截图20240807141023.jpg


在项目下会生成一个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.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 1040

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplicationApi/WebApplicationApi.csproj", "WebApplicationApi/"]
RUN dotnet restore "WebApplicationApi/WebApplicationApi.csproj"
COPY . .
WORKDIR "/src/WebApplicationApi"
RUN dotnet build "WebApplicationApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplicationApi.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplicationApi.dll"]


QQ截图20240807141319.jpg


将Dockerfile复制到上一级目录(即和解决方案.sln文件同一级目录)下。

QQ截图20240807141552.jpg


上传至Linux

将整个项目的源码上传至linux,博主因为使用的是虚拟机,所以这里使用挂载目录进行上传,当然你也可以使用FTP工具进行上传。

QQ截图20240807142504.jpg


Docker部署

使用以下命令,根据net目录下的Dockerfile文件,编译项目并创建docker镜像。

# 一定不要忘记后面的点
docker build -t [起一个镜像名] .

# 博主这里直接取名为 testapi
docker build -t testapi .


QQ截图20240807143352.jpg


使用以下命令,创建和启动容器

docker run -d -p 8888:80 --name [起一个容器名] [构建镜像时起的镜像名]

# 博主使用的是如下命令
docker run -d -p 1040:1040 --name netapi testapi


QQ截图20240807143607.jpg


虚拟机外部访问:http://192.168.1.5:1040/WeatherForecast

虚拟机内部访问:http://127.0.0.1:1040/WeatherForecast

注意:这里无法访问swagger,貌似需要设置,默认是不允许访问的

QQ截图20240807143829.jpg


补充内容1

如果需要开启swagger访问,访问地址:“http://127.0.0.1:1040/swagger/index.html”

需要进行如下修改

参考博客:ASP.NET IIS发布

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

# region 旧配置
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
//    app.UseSwagger();
//    app.UseSwaggerUI();
//}
#endregion

# region 改成这样
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage(); // 配置异常中间件
}

app.UseSwagger();
app.UseSwaggerUI();
#endregion

app.UseAuthorization();

app.MapControllers();

app.Run("http://*:1040");


这样你就能访问swagger了

QQ截图20240808111732.jpg


补充内容2

考虑到每次更新都要重新部署容器,博主自己写了一个脚本,格式如下

#!/bin/bash
docker stop [docker ps中对应的NAMES名字]
docker rm [docker ps中对应的NAMES名字]
docker rmi [docker images中对应的REPOSITORY名字]
docker build -t [docker images中对应的REPOSITORY名字] .
docker run -d -p 1040:1040 --name [docker ps中对应的NAMES名字] [docker images中对应的REPOSITORY名字]

docker images
docker ps


当前工程,重新部署的脚本如下:

#!/bin/bash
docker stop netapi
docker rm netapi
docker rmi testapi
docker build -t testapi .
docker run -d -p 1040:1040 --name netapi testapi

docker images
docker ps


QQ截图20240808112043.jpg



VUE Ubuntu Docker发布
Ubuntu Docker 部署MySQL

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

.Net API Ubuntu 18.04.6 Docker发布

    虚拟环境就按上一节的基础上来。

    安装之前,确认下当前的环境,如下:

QQ截图20240807131149.jpg


新建.net工程

参考博客:https://blog.csdn.net/hyq106/article/details/129046618


打开Visual Studio 2022,创建一个新的webapi项目。

QQ截图20240807135945.jpg


默认选项,一直下一步就ok。注意框架要使用.net6.0,不要选择.netframework(不支持跨平台)。

QQ截图20240807140039.jpg


QQ截图20240807140133.jpg


创建完后,已经生成完整的示例代码了,这个项目是可以直接运行的。这里我们在Program.cs文件中,稍作修改,在最后一行Run方法指定api的端口号,如下:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

app.Run("http://*:1040");


运行起来

QQ截图20240807140451.jpg


在浏览器输入地址“http://localhost:1040/WeatherForecast”,结果如下:

QQ截图20240807140542.jpg


项目运行没有问题。下一步要部署到linux上去。


生成Dockerfile

右键项目,选择“添加”-“Docker支持”。

QQ截图20240807140941.jpg


选择“Linux”,确定。

QQ截图20240807141023.jpg


在项目下会生成一个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.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 1040

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplicationApi/WebApplicationApi.csproj", "WebApplicationApi/"]
RUN dotnet restore "WebApplicationApi/WebApplicationApi.csproj"
COPY . .
WORKDIR "/src/WebApplicationApi"
RUN dotnet build "WebApplicationApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WebApplicationApi.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplicationApi.dll"]


QQ截图20240807141319.jpg


将Dockerfile复制到上一级目录(即和解决方案.sln文件同一级目录)下。

QQ截图20240807141552.jpg


上传至Linux

将整个项目的源码上传至linux,博主因为使用的是虚拟机,所以这里使用挂载目录进行上传,当然你也可以使用FTP工具进行上传。

QQ截图20240807142504.jpg


Docker部署

使用以下命令,根据net目录下的Dockerfile文件,编译项目并创建docker镜像。

# 一定不要忘记后面的点
docker build -t [起一个镜像名] .

# 博主这里直接取名为 testapi
docker build -t testapi .


QQ截图20240807143352.jpg


使用以下命令,创建和启动容器

docker run -d -p 8888:80 --name [起一个容器名] [构建镜像时起的镜像名]

# 博主使用的是如下命令
docker run -d -p 1040:1040 --name netapi testapi


QQ截图20240807143607.jpg


虚拟机外部访问:http://192.168.1.5:1040/WeatherForecast

虚拟机内部访问:http://127.0.0.1:1040/WeatherForecast

注意:这里无法访问swagger,貌似需要设置,默认是不允许访问的

QQ截图20240807143829.jpg


补充内容1

如果需要开启swagger访问,访问地址:“http://127.0.0.1:1040/swagger/index.html”

需要进行如下修改

参考博客:ASP.NET IIS发布

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

# region 旧配置
// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
//    app.UseSwagger();
//    app.UseSwaggerUI();
//}
#endregion

# region 改成这样
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage(); // 配置异常中间件
}

app.UseSwagger();
app.UseSwaggerUI();
#endregion

app.UseAuthorization();

app.MapControllers();

app.Run("http://*:1040");


这样你就能访问swagger了

QQ截图20240808111732.jpg


补充内容2

考虑到每次更新都要重新部署容器,博主自己写了一个脚本,格式如下

#!/bin/bash
docker stop [docker ps中对应的NAMES名字]
docker rm [docker ps中对应的NAMES名字]
docker rmi [docker images中对应的REPOSITORY名字]
docker build -t [docker images中对应的REPOSITORY名字] .
docker run -d -p 1040:1040 --name [docker ps中对应的NAMES名字] [docker images中对应的REPOSITORY名字]

docker images
docker ps


当前工程,重新部署的脚本如下:

#!/bin/bash
docker stop netapi
docker rm netapi
docker rmi testapi
docker build -t testapi .
docker run -d -p 1040:1040 --name netapi testapi

docker images
docker ps


QQ截图20240808112043.jpg