.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是你想用的端口

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


相关文章
|
6天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
6天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
8天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
8天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
14天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
23天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
21天前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
8天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
32 0
|
24天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
122 17