Linux环境下使用Docker部署.Net8应用

🖥️ 环境准备

开发工具:VisualStudio2022
服务器:腾讯云 Ubuntu 22.04 LTS (GNU/Linux 5.15.0-91-generic x86_64)
默认服务器已有 Docker 环境

Install Docker Engine on Ubuntu

📁 项目准备

启用 Docker 支持,os 选择 Linux
image.png

项目列表自动添加一个 Dockerfile 文件,我们需要修改该文件

image.png

复制代码
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
# 注释掉 USER app,这句话的意思是我们的docker镜像中要有用户名app,
# 这样可以避免一些安全问题,但是需要额外添加用户app
#USER app
WORKDIR /app
# 可有可无
EXPOSE 5000
# 下面注释掉是为了不拷贝整个解决方案,只拷贝项目发布后的文件
#FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
#ARG BUILD_CONFIGURATION=Release
#WORKDIR /src
#COPY ["WenYan.Service.Api/WenYan.Service.Api.csproj", "WenYan.Service.Api/"]
#RUN dotnet restore "./WenYan.Service.Api/./WenYan.Service.Api.csproj"
COPY . .
#WORKDIR "/src/WenYan.Service.Api"
#RUN dotnet build "./WenYan.Service.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build
#
#FROM build AS publish
#ARG BUILD_CONFIGURATION=Release
#RUN dotnet publish "./WenYan.Service.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
#
#FROM base AS final
#WORKDIR /app
#COPY --from=publish /app/publish .
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 使用软连接,并且将时区配置覆盖/etc/timezone
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
ENTRYPOINT ["dotnet", "WenYan.Service.Api.dll"]
复制代码

 

生成发布文件

image.png

将发布后的文件拷贝到服务器

🧰 项目部署

构建 Docker 镜像
image.png
根据镜像构造容器

注意:ASPNETCORE_HTTP_PORTS 环境变量,设置映射端口 ,.Net8 默认 ASP.NET Core 端口已更改为 80 到 8080

中断性变更:默认 ASP.NET Core 端口已更改为 80 到 8080 - .NET

复制代码
#创建docker镜像
sudo docker build -t dotnetapi .
#运行启动镜像,使用的是5000端口,这里最好跟Dockerfile文件中的端口保持一致,不然会出现些莫名其妙的问题
sudo docker run --name dotnetapi -p 5000:5000 -d --restart=on-failure:3 dotnetapi 
# 查看日志信息
docker logs
--tail=1000 dotnetapi
# 查看运行的容器
docker ps

 #已有的容器更新为自动重启
 docker update --restart=always 容器ID(或者容器名)
 #已更新已有的 nginx 容器为例
 docker update --restart=always nginx

 #已更新已有的 tomcat 容器为例

 docker update --restart=always tomcat

复制代码

关于 –restart 策略参数 说明如下:

--restart 策略

命令 作用备注
no 默认策略,在容器退出时不重启容器
on-failure 在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 在容器非正常退出时重启容器,最多重启3次
always 在容器退出时总是重启容器
unless-stopped 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

查看容器日志

image.png
开放 8050 端口即可外部访问

posted @   ice.ko  阅读(280)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示