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 @ 2024-11-22 16:32  ice.ko  阅读(13)  评论(0编辑  收藏  举报