从零实操基于WSL2 Docker部署Asp.Net Core项目

前言

平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Windows10开始已经有WSL、WSL2

去年在笔记本上捣鼓过WSL2,但也只是打开安装完后打了下几行命令尝个鲜,没有进行过后续跟开发有关的操作

前两天把家里电脑系统升级到Windows 11,新系统感觉良好,抽空再次尝试下WSL2,顺便记录下完整的项目部署流程

 

WSL

WSL:适用于 Linux 的 Windows 子系统。

  • 什么是适用于 Linux 的 Windows 子系统?

适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。

  • 什么是 WSL 2?

WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。

  • WSL 2 和 WSL 1 的区别?

 

安装WSL 2

WSL官方教程:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

Hyper-V说明:https://docs.microsoft.com/zh-cn/virtualization/hyper-v-on-windows/about/

  1. 首先要去 控制面板 -> 程序和功能 -> 启用或关闭Windows功能 -> 打开 Hyper-V 、适用于Lindex的Windows子系统、虚拟机平台(仅用WSL 1无需这个) ,设置成功后需要重启系统

  2. 打开Windows Terminal (支持多命令窗口的终端工具,Windows11已自带,之前版本需要去应用商品下载安装)  或者 CMD 或者 PowerShell,输入以下代码可查看当前已注册的Linux分发版本

    wsl -l

     
    注意:上面截图里是我已安装完Ubuntu和Docker的结果,如果第一次安装,只有一个默认Linux

  3. 安装完成默认架构是WSL 1,需要手动切换到WSL 2,在这之前需要先下载安装Linux的内核更新包

    点击下载Linux内核更新包

    安装完毕之后执行下面命令,切换到WSL 2

    wsl --set-default-version 2

 

安装Ubuntu

  1. 打开Windows应用商城,搜索Ubuntu,并选择一个版本进行安装



  2. 安装完成后,点击启动Ubuntu,会提示需要设置用户名和密码
    (网上截图)

  3. 设置Ubuntu为WSL默认系统,WSL 版本号为2(这里以Ubuntu 20.04为例)

    wsl --set-version Ubuntu-20.04 2
  4. 在Windows Terminal 下会多一个Ubuntu的命令行选项

 

安装Docker

    Windows环境下可以去Docker官方下载Docker Desktop进行安装,最新版本已经支持使用WSL2运行,也可以在Ubuntu下以Linux传统方式安装Docker(自行某度)

    

    

 

迁移Docker镜像默认保存路径(如果你的C盘很大,可跳过这步)

   Docker的镜像默认保存路径在:C:\Users\你的用户名\AppData\Local\Docker\wsl\data      长期使用镜像多了,C盘就会吃紧了,可以迁移目录到其他盘

  1. 关闭Docker

  2. 关闭所有发行版Linux

    wsl --shutdown
  3. 将docker-desktop-data导出到指定目录下 D:\Docker\wsl\data\docker-desktop-data.tar(注意,原有的docker images不会一起导出)

    wsl --export docker-desktop-data D:\Docker\wsl\data\docker-desktop-data.tar
  4. 注销docker-desktop-data

    wsl --unregister docker-desktop-data
  5. 重新导入docker-desktop-data到要存放的文件夹:D:\Docker\wsl\data\

    wsl --import docker-desktop-data D:\Docker\wsl\data\ D:\Docker\wsl\data\docker-desktop-data.tar --version 2#参数说明
    -version 2 :指定WSL版本为2
  6. 重启Docker

  7. 如果重启Docker出现报错:Failed to set version to docker-desktop: exit code: -1
    需要打开cmd执行以下命令,执行完毕后需要重启电脑

    netsh winsock reset

    报错原因:https://zhuanlan.zhihu.com/p/151392411
    如果重启后镜像默认路径又会恢复到原路径,需要重新弄一遍上面所有步骤,囧

 

在Docker中安装Nginx、MySQL等(没用到,可跳过这步)

直接在Ubuntu的命令下使用docker命令安装组件

  • Nginx

    docker pull nginx  --拉取Nginx最新镜像
    #此处省略拉取镜像过程中的几十行命令
    #....
    #....docker run --name nginx-local -p 8080:80 -d nginx   --启动Nginx容器#参数说明
    --name nginx-local:设置容器名称
    -p 8080:80:端口进行映射,将本地 8080 端口映射到容器内部的 80 端口
    -d:设置容器在在后台一直运行
    nginx:镜像名或标签名

     浏览器中输入 http://localhost:8080


  • MySQL

    docker pull mysql  --拉取MySQL最新镜像
    #此处省略拉取镜像过程中的几十行命令
    #....
    #....docker run --name mysql-local -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql#参数说明
    --name mysql-local:设置容器名称
    -p 3306:3306:端口进行映射,将本地 3306端口映射到容器内部的 3306 端口
    -e MYSQL_ROOT_PASSWORD=123456 :设置mysql的登录密码,默认帐号名为root
    -d:设置容器在在后台一直运行
    mysql:镜像名或标签名

     测试连接MySQL
    

  • Docker Desktop 中同步显示镜像

新建Asp.Net Core项目

  • 在项目中添加健康检查组件

    Install-Package Microsoft.Extensions.Diagnostics.HealthChecks
  • 在Startup.cs文件中添加注册代码

    public void ConfigureServices(IServiceCollection services)
    {services.AddHealthChecks();
    }
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {app.UseHealthChecks("/health");    
    }

     

  • 在控制器中随便写一个Action方法


  • 通过VS运行项目,测试健康检查Action

生成Dockerfile文件

  • VS很早就支持快速生成Dockerfile,在项目的右键中,添加Docker支持,选择Linux即可


  • 编辑Dockerfile添加时区,当然也可以什么都不动,直接进行下一步

    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo 'Asia/Shanghai' >/etc/timezone

     

  • 在VS中打开终端,也可以手动打开命令行终端工具cd到项目解决方案根目录下
    注意:命令行打开必须是定位在解决方案根目录下,这么做是因为项目复杂以后项目之间会相互引用,而Dockefile文件自动生成出来的csproj引用路径默认是以解决方案根目录为准,除非你手动修改了Dockerfile中csproj的文件路径


  • 在命令行中输入docker build命令,构建镜像

  • docker build -f DockerApi/Dockerfile -t docker-api .   --注意结尾最后还有个点
    #此处省略构建镜像过程中的几十行命令 
    #.... 
    #....
    #参数说明
    -f DockerApi/Dockerfile :指定Dockerfile文件路径,如果Dockerfile已经在当前定位的目录下就不用特别指定了
    -t docker-api : 设置镜像标签为docker-api,标签名自定义
    . :构建镜像的上下文路径#构建完成后查看镜像
    docker images


  • 启动容器

  • docker run --name docker-api -it -p 5000:80 docker-api
    
    #参数说明
    --name docker-api :设置容器名称
    -it :i-交互式操作,t-终端
    -p 5000:80 :端口进行映射,将本地5000端口映射到容器内部的80端口
    docker-api :镜像名或标签名
  • 打开浏览器输入
    http://localhost:5000/health
    http://localhost:5000/api/demo/get



  • 大功告成!查看Docker Desktop,同步显示所有容器

 

以上就是Docker上部署Asp.Net Core的所有实操步骤,如果按教程一步步来,应该是没有多大问题的 

作者:Harry

原文出处:https://www.cnblogs.com/simendancer/articles/14967916.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux启动xorg进程,Linux 黑话解释:Xorg,X11,Wayland,什么是显示服务器

原标题:Linux 黑话解释:Xorg,X11,Wayland,什么是显示服务器您是否想知道X Server,Xorg,X11,Wayland以及诸如此类的东西到底是什么?Wayland vs Xorg,哪个更好&…

有气质的人都在看什么?

全世界只有3.14 % 的人关注了青少年数学之旅王小波说:我活在世上,无非想要明白些道理,遇见些有趣的事,倘能如我所愿,我的一生就算成功。你的圈子将决定你的人生。每一位对事物都有着独特的态度让你成为一个有趣的人。今…

投影变换[转]

4. 投影变换 一个投影变换类似于选择一个透镜的焦距,它是三种变换中最复杂的一个。 4.1 视锥(Viewing Frustum) 4.2 什么是投影变换? 4.3 设置投影矩阵 4.4 一个“W-Friendly”投影矩阵 4.1 视锥视锥就是场景中的一个三维空间,…

那些把天聊死的神操作。。| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅【1】【2】【3】【4】【5】【6】【7】【8】【9】【10】【11】【12】(图源网络,侵权删)有话请“直”说↓ ↓ ↓

SqlDataReader对象的NextResult方法读取存储过程多个结果集

如上图,我这里有返回4个记录集,分别表示 发送的总数,成功数,失败数,以及所有的记录集,那么我怎么去获取呢? 如果我第二个记录集 第三个记录集 都是多行的话,怎么办?可以参考下面这张…

全部换新-微软复兴.NET,C#10 .NET6 VS2022各个强势!

VS2022.NET6C#10一起体验是啥感觉?爽!令人印象深刻的是VS2022打开超大项目的流畅,.NET6极致简化的MiniAPI框架,C#10各种炫酷新语法。看看下图的代码你能认识吗?来自MiniAPI框架,直接在MapGet里面使用Lambda…

linux 修复图形界面,图形界面操作的备份和恢复Linux发行版

原标题:图形界面操作的备份和恢复Linux发行版来自:Linux迷链接:https://www.linuxmi.com/redo-rescue-2-0-6-linux.html现在可以下载Redo Rescue 2.0.6备份和恢复Linux发行版,该发行版增加了各种改进和新功能以及常见的错误修复。…

汇编语言的Hello World

汇编语言的Hello World,汇编语言没有我想象的那么低级,它已经具备了不少高级语言的特性,代码也变得清晰,层次清楚,易于维护了。a.asm.386.model flat,stdcall includelib kernel32.lib includelib user32.lib MessageB…

一条线一万美元的故事误导了你多少年

全世界只有3.14 % 的人关注了青少年数学之旅福特公司请斯坦门茨检修电机,画一道线用了一万美元,这个几乎人尽皆知的故事告诉我们一个道理:知识就是财富。故事讲到这里就结束了,但实际上,故事还有下文……20世纪初&…

ylbtech-Model-Account(通用账户模块设计)

ylbtech-DatabaseDesgin:ylbtech-Model-Account(通用账户模块设计)ylbtech-Model-Account(通用账户模块设计) 1.A,数据库关系图(Database Diagram)1.B,数据库设计脚本(Database Design Script)-- -- 用户模块设计 -- 2013-8-24 -- author:yuanbo -- US…

祝大家圣诞节快乐

同时庆祝 JWFD 20周年

刘敏:优麒麟开源操作系统运营实践 | DEV. Together 2021 中国开发者生态峰会

内容来源:2021 年 6 月 5 日,由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满落幕。会上,优麒麟开源社区运营负责人刘敏发表了主题为《优麒麟开源操作系统运营实践》的演讲,从市场的角度去讲解了一些其他板块的知识。分享…

拖延的本质是逃避!| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)扎心了↓ ↓ ↓

C# 无意间写了一段线程死锁的代码

源码如下&#xff1a;private void action_Click(object sender, RoutedEventArgs e){Task t new Task(() >{for (int i 0; i < 10; i){Thread.Sleep(1000);this.Dispatcher.Invoke(() >{lblStr.Content i.ToString();});manualResetEvent.Set();Console.WriteLine…

5G已来,你能做些什么?

5G大潮虽然已经来临&#xff0c;即便没有5G手机&#xff0c;小木还是要不甘示弱地测一下自己的网速&#xff0c;假装自己也是可以美美地在网上冲浪的&#xff01;小木的网速网友提供的5G测速多么痛的领悟&#xff0c;这差距还真的是很大&#xff01;说了这么多&#xff0c;你可…

java得到文件创建时间linux,linux java获取文件创建时间

linux java获取文件创建时间[2021-01-31 07:35:22] 简介:服务器背景有时候我们需要获取文件的创建时间。例如:我在研究 《xtrabackup 原理图》的时候&#xff0c;想通过观察确认 xtrabackup_log 是最php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后…

认识WPF

新开一节WPF桌面开发的讲解&#xff0c;这节先初步认识一下什么是WPF。1.简介WPF是 Windows Presentation Foundation 的英文缩写&#xff0c;意为“窗体呈现基础”&#xff0c;是微软基于.NET Framework 3.0 推出的新一代构建窗体程序的框架。不同于WinForm&#xff0c;WPF实现…

MFC Attach()函数和Detach()函数

一、Windows对象和MFC对象的区别&#xff1f;MFC对象实际上并没有把整个Windows对象都包装在其中。对于窗口&#xff1a;MFC对象它只是有一个窗口句柄而已&#xff0c;这个窗口句柄如果指向一个实际存在的窗口对象&#xff08;窗口对象&#xff0c;也就是WNDCLASS&#xff0c;是…

用“谬论”指挥研究方向数十年,是谁让“老年痴呆”至今仍是绝症?

全世界只有3.14 % 的人关注了青少年数学之旅阿尔兹海默症&#xff0c;是“老年痴呆”的正确科学名称。它可能是世界上最广为人知的“绝症”之一&#xff1a;不仅让患者丧失了记忆和自我&#xff0c;也一直令在寻找治疗方法的学者和医药企业束手无策。30 多年前出现的“淀粉样蛋…

一定要多角度看事物 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅一定要多角度看事物岁月对我们做了什么无法反驳论发型的重要性坐骨神经痛被赋予了新含义老师真的很会总结了&#xff08;图源E_Volution_&#xff09;扎心了↓ ↓ ↓