.netcore应用在WSL中的容器化部署

简介: 前面,我们讲解了如何在wsl中安装数据库,.netcore运行时,以及如何发布一个.netcore应用,为了构成一个完整的小系列,本节,我们来学习一下,如何将.netcore应用在WSL中容器化。

环境准备


1.Docker安装

之前,出过一个docker的小系列,请参考

Docker入门之开篇

Docker Desktop及Kubernetes安装

Docker、k8s使用初体验及Dashboard避坑指南!!

通过以上3篇,可以学习到docker的一些基础知识,包括是什么,为什么,怎么用,其中包括,如何构建镜像、启停容器以及一些需要注意的问题。

更多内容请参考相关系列

https://blog.csdn.net/xiansenlee/category_9929815.html


2.启用相应功能

因为本节内容是基于wsl的,而且最新版本的docker for windows也是支持wsl2的,所以建议安装wsl2,并在docker中启用wsl,启用如下功能

  • 启用WSL 2作为引擎

     

  • 在集成项下,选择相应的系统

     

如果你尚未安装wsl环境,或非wsl2环境,请参考前3篇文章。


至此,我们就可以开始本节的正式的内容了。


创建应用


.netcore应用创建

本次,我们创建一个aspnetcore应用,也就是一个web应用,并将其部署到容器中,

首先,我们通过以下命令创建一个web应用并生成

dotnet new web -o DockerTest
dotnet build DockerTest\DockerTest.csproj


然后,再将项目发布到Release路径下,以便再构建镜像的时候应用


dotnet publish DockerTest\DockerTest.csproj -c Release


然后可以,先试运行一下看看效果

dotnet run DockerTest.csproj
dotnet DockerTest.dll



Dockerfile创建

在DockerTest.csproj的同级目录下添加Dockerfile文件并且编辑其内容,这里可以使用vs添加该文件,这样会自带默认内容,我们可以通过修改默认内容来达到我们的目标


然后选择目标平台为linux.

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DockerTest.csproj", "."]
RUN dotnet restore "./DockerTest.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "DockerTest.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "DockerTest.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerTest.dll"]


在该文件中,我们可以看到容器暴露的端口为80 443,项目基于aspnet:5.0,

此时,我们可以启用docker来构建镜像。

docker build -t dockertest -f Dockerfile .
# -t指定镜像的名称,这里要注意只能是小写
# -f指定Dockerfile的路径 .表示当前路径


此时,我们只需要等待执行完毕即可。


当镜像构建完毕后,我们可先查看镜像,然后再运行一个容器

docker images #查看所有镜像
docker run -d -p 5060:80 dockertest
#-p表示映射的端口,将本地的5060映射到容器的80端口
docker run -d -p 4446:80 --name 3334 dockertest
#启动特定名称的容器
docker container ls
#查看全部容器


此时,容器即已成功启动,我们可以通过在浏览器中输入地址来验证。

表明我们的容器已经部署成功。


避坑指南

到这里,基本上本节内容已经结束了,但这里提一个坑,不注意的话很容易掉进去,按照我们的思路,我们如果想将容器内的应用通过特定的端口暴露出来,只需要修改Dockerfile中的EXPOSE即可。

但是,注意了!!!!

如果只更改端口,是没办法通过浏览器访问到的,然后通过各种调试你会发现,只有暴露80端口并添加映射的时候才能访问到,这是因为啥呢???

其实,这是因为.netcore默认监听的端口是80,因此,容器启动应用时,其实监听的是80端口,要想通过其他端口访问,我们只需要在Dockerfile中添加ENV变量来指定即可


ENV ASPNETCORE_URLS=http://+:5000 #5000是你想用的端口

然后构建出来的镜像,部署到容器后,即可通过这个端口来访问。


相关文章
|
1天前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
C# Android开发 iOS开发
2025年全面的.NET跨平台应用框架推荐
2025年全面的.NET跨平台应用框架推荐
86 23
|
1月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
2月前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
64 1
|
2月前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:<https://github.com/khellang/Scrutor>
61 5
|
2月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2月前
|
人工智能 Kubernetes 安全
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
82 13
|
2月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
59 3

热门文章

最新文章