您现在的位置是:网站首页> 学习资源

开发相关软件

摘要

开发相关软件

Docker Desktop安装使用

Docker Desktop修改安装目录与容器存放目录的方法

宝塔面板 1Panel LDNMP 三大建站系统

Kubernetes(k8s)教程

关于微服务

eCapture(旁观者): 基于eBPF技术实现TLS加密的明文捕获,无需CA证书



Docker Desktop安装使用

点击下载

点击进入在线体验docker

点击查看docker 常用命令

点击查看docker在线教程

此视频忽略了

检查 Hyper-V是否安装

windows控制面板》程序和功能》启用或关闭Windows功能》找到Hyper-V》全部勾选后,点击“确定”,等待安装即可

1.png

win10系统 Docker 提示Docker Engine stopped解决全过程记录

点击查看原文

1.png


一、检查服务是否开启

1.jpg


 找到 【Docker Desktop Service】,然后,启动他;

你也可以直接设置为“自动”

找到服务,右键》属性》启动类型:自动》点击“确定”

1.png


操作方式1:搜索

在底部菜单找到搜索,输入:服务

1.png


如果底部没有“搜索”,右键底部》搜索》点击“显示搜索图标”

1.png

2.png


操作方式2:命令

键盘【“菜单键win”+r】,弹出运行,输入:services.msc;点击“确定”

1.png


二、检查 Hyper-V是否安装

windows控制面板》程序和功能》启用或关闭Windows功能》找到Hyper-V》全部勾选后,点击“确定”,等待安装即可

1.png

1.png

2.png


三、检查 bcdedit的hypervisorlaunchtype是否为Auto

【win菜单】右键》选择 Windows PowerShell(管理员)


输入 


bcdedit

 查看hypervisorlaunchtype的状态


1.png


如果不是Auto


则需要输入下面命令,重启电脑即可。


bcdedit /set hypervisorlaunchtype auto

重要的话说三遍

重启电脑即可!!!

重启电脑即可!!!

重启电脑即可!!!


延伸阅读

第一篇:

您的主机不满足在启用Hyper-V或Device/Credential Guard的情况下运行VMware Workstation 的最低要求。_您的主机不满足在启用 hyper-v 或 device/credential guard 的情况下运-CSDN博客


第二篇:

windows命令分为2种,一种是命令提示符(CMD),另一种是PowerShell;怎么打开他们-CSDN博客


 四、检查CPU是否开启虚拟化

如何查看:

右键底部菜单》任务管理器》性能》CPU

1.png


如何设置:

重启电脑》进入boss》高级设置》处理器设置》CPU》Intel虚拟机》设置为“开启”》保存后退出,重启

1、重启计算机,并在开机时按下特定的按键,如F2、F10、Delete等,进入BIOS设置界面。

2、在BIOS设置界面中,找到“Advanced”或“高级”选项,然后选择“CPU Configuration”或“CPU 配置”选项。

3、在“CPU Configuration”或“CPU 配置”选项中,找到“SVM Mode”或“SVM 模式”选项,然后将其设置为“Enabled”或“启用”状态。

4、保存并退出BIOS设置界面,重新启动计算机。


这样,就可以开启AMD的CPU虚拟化功能,然后可以使用虚拟化软件或模拟器来运行虚拟的操作系统或应用程序了。


五、检查wsl

5.1.是否开启

windows控制面板》程序和功能》启用或关闭Windows功能》找到【适用于Linux的Windows子系统】》勾选后,点击“确定”,等待安装即可

1.png



 5.2检查更新

打开Windows PowerShell

windows命令分为2种,一种是命令提示符(CMD),另一种是PowerShell;怎么打开他们-CSDN博客

输入命令

wsl --update

 1.png

1.png

点击查看docker 常用命令



Docker Desktop修改安装目录与容器存放目录的方法

点击查看原文

一、 改变软件安装目录

Docker Desktop 默认安装目录是 C:\Program Files\Docker 。由于windows 电脑 C盘空间有限,所以将它安装在别的盘符目录下更有用。

首先,查看下 C:\Program Files 目录有没有 Docker ,有就删除这个目录;

然后在想要安装 Docker Desktop 这个软件的盘符建立目录 ,如: Docker ;

接下来使用管理员身份打开 Powershell 命令终端,输入如下命令:

mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"

最后运行 Docker Desktop 的安装程序即可。


二、切换容器存储目录


1.png


如图所示在设置界面选择 Resources , 然后找到 Disk image location 项,调整容器存储的目录,但在这里修改并不能生效。


我将网上搜索引擎中找到的 “如何修改Docker Desktop 容器存放目录” 的文件尝试了一遍,一直没有成功。 网上找到的方法除了上面设置界面操作的方法外,另外有2种:

第一种方法: 创建目录链接方式,操作命令如下

 mklink /j "C:\ProgramData\DockerDesktop\vm-data"  "D:\ProgramData\DockerDesktop\vm-data"

这样操作安装 Docker Desktop 时会报错。

第二种方法:在配置文件或者如下图所示位置配置容器存放目录;具体参数这里不列举了,因为我尝试过没成功,点击 `Apply & restart` 保存设置后,软件卡顿很长时间。

1.png

最后是重点啦~ 上面的第二种方法给我启示,所以我找到应该修改的配置文件 。它是 C:\Users\Think\AppData\Roaming\Docker 目录下的 settings.json 文件。

具体修改如下图所示:

1.png

修改完后 重启下 Docker Desktop 即可生效。


宝塔面板 1Panel LDNMP 三大建站系统

 点击查看原文

科技Lion的Shell脚本工具是一款全能脚本工具箱,使用shell脚本编写。专为Linux服务器监控、测试和管理而设计。无论您是初学者还是经验丰富的用户,该工具都能为您提供便捷的解决方案。集成了独创的Docker管理功能,让您轻松管理容器化应用;LNMP建站解决方案能帮助您快速搭建网站,站点优化,防御,备份还原迁移一应俱全;并且整合了各类系统工具面板的安装及使用,使系统维护变得更加简单。我们的目标是成为全网最优秀的VPS一键脚本工具,为用户提供高效、便捷的科技支持

使用方法

安装curl

Debian/Ubuntu

apt update -y  && apt install -y curl


CentOS

yum update && yum install -y curl


Alpine Linux

apk update && apk add curl


运行脚本

GitHub版 部分小伙伴会遇到官网版出现大段乱码!就用GitHub版本吧!

curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh && ./kejilion.sh

国内服务器版

curl -sS -O https://raw.gitmirror.com/kejilion/sh/main/cn/kejilion.sh && chmod +x kejilion.sh && ./kejilion.sh


脚本主界面

脚本全面支持Ubuntu、Debian,Cent OS和Alpine Linux系统

只要执行命令自动获取最新版本


主要功能

docker管理器

轻松安装管理你的docker容器,无需安装任何可视化面板。操作优雅直觉!


LDNMP建站

LDNMP建站系统,超凡的快速建站方案,多站共存都是一键搞定。站点管理防护优化一应俱全。


面板工具集合

集合了时下流行的VPS面板应用程序,一键快速搭建。安装完成即可使用。安装后动态管理已安装的面板应用。


系统工具集合

集合了对Linux各项系统管理等基础操作,方便小伙伴优雅使用。调整VPS参数不需要记住繁琐命令,一键搞定。


更多功能

还有更多功能等待着大家自己发掘。欢迎提供宝贵意见,希望一键化脚本工具越来越强大。帮助小伙伴们使用VPS管理VPS。



Kubernetes(k8s)教程

Docker 专注于容器化和单个容器的管理,而 Kubernetes 在此基础上提供了一个全面的容器编排和管理平台,用于大规模部署和管理由 Docker 容器组成的应用程序。


2024年翻遍整个B站,这绝对是最好的Docker+k8s视频教程

点击查看原视频




关于微服务

微服务的工作原理:

  1. 服务拆分:将一个大型应用程序拆分为多个小的、独立的服务,每个服务都有明确定义的责任和边界。服务应该围绕业务能力进行组织,而不是技术层面。

  2. 独立部署:每个微服务都可以独立地开发、部署和扩展。这意味着你可以使用不同的技术栈和语言来开发不同的服务,只要它们能够通过约定的通信机制进行交互。

  3. 服务通信:微服务通过轻量级的通信机制进行通信,通常是 HTTP API(如 REST 或 gRPC)。每个服务暴露一个 API,其他服务可以通过该 API 与其通信。

  4. 服务发现:在微服务架构中,服务的位置(如 IP 地址和端口号)可能是动态变化的。因此,需要一个服务发现机制,让服务能够找到它们需要通信的其他服务。常见的服务发现机制包括 Consul、Eureka 等。

  5. 数据管理:每个微服务通常有自己的数据存储,而不是共享一个集中式的数据库。这种方法称为"数据库分片"或"数据库按服务划分"。它提高了服务的独立性和可扩展性,但也引入了数据一致性的挑战。

  6. 容错和恢复:在微服务架构中,服务可能会失败或变得不可用。因此,服务需要设计为能够处理其他服务的失败。常见的模式包括断路器、重试和回退。

  7. 监控和日志:由于系统是由多个独立的服务组成的,监控和日志记录变得非常重要。集中式的日志收集和分布式追踪可以帮助理解和调试系统的行为。

  8. 自动化部署:微服务架构强调快速、频繁的发布。这需要自动化的构建、测试和部署流程。常见的工具包括 Jenkins、GitLab CI/CD、Kubernetes 等。

微服务架构的主要优点是提高了系统的模块化、可扩展性和技术多样性。但它也引入了复杂性,特别是在服务通信、数据一致性和运维方面。因此,在采用微服务架构时,需要仔细权衡其利弊,并选择适合自己的业务场景和技术环境的实现方式。


服务发现是微服务架构中的一个关键组件,它允许服务在运行时动态地找到并通信with其他服务,而不需要硬编码服务的位置信息。以下是几种常见的服务发现机制及其工作原理:

  1. 客户端服务发现:

    • 在这种模式下,客户端(调用服务)负责确定服务实例的网络位置,并直接向其发出请求。
    • 客户端从服务注册中心查询服务实例的位置信息。服务注册中心是一个中央存储库,存储所有服务实例的网络位置。
    • 当服务实例启动时,它会向服务注册中心注册自己的位置信息;当它关闭时,会从服务注册中心注销。
    • 客户端缓存从服务注册中心检索到的服务位置信息,并定期刷新以获取最新的位置信息。
    • 例子:Netflix Eureka, Consul, etcd。
  2. 服务端服务发现:

    • 在这种模式下,客户端通过负载均衡器向服务发出请求,负载均衡器负责将请求路由到可用的服务实例。
    • 服务实例在服务注册中心注册和注销,就像在客户端发现模式中一样。
    • 负载均衡器从服务注册中心查询服务实例的位置,并将请求路由到其中一个实例。
    • 负载均衡器还执行健康检查,以确保它只将请求路由到健康的服务实例。
    • 例子:AWS Elastic Load Balancer (ELB), Kubernetes Services, Istio。
  3. 混合模式:

    • 一些系统使用客户端发现和服务端发现的混合模式。
    • 在这种模式下,客户端从服务注册中心检索服务实例的位置,但将请求发送到负载均衡器,负载均衡器then将请求路由到服务实例。
    • 这种模式结合了客户端发现的灵活性和服务端发现的简单性。

服务发现机制通常与服务注册中心一起工作,服务注册中心存储服务实例的网络位置。常见的服务注册中心包括:

  • Consul:一个分布式的服务发现和配置工具。
  • Eureka:由 Netflix 开发的服务注册中心,广泛用于 Spring Cloud 生态系统。
  • Zookeeper:一个分布式的协调服务,也可以用作服务注册中心。
  • etcd:一个分布式的键值存储,常用于服务发现和配置管理。

这些服务注册中心提供了 API 和客户端库,使服务能够注册、注销以及查询其他服务的位置信息。它们还提供了健康检查机制,以确保只有健康的服务实例会被返回给客户端。

服务发现是构建可扩展、弹性微服务系统的关键。它允许服务在运行时动态地相互发现和通信,从而支持服务的自动扩展、故障转移和滚动更新。


Go 语言有几个流行且强大的微服务框架,这些框架提供了构建和部署微服务的工具和库。以下是一些值得关注的 Go 微服务框架:

  1. Go-kit (https://github.com/go-kit/kit):

    • Go-kit 是一个广泛采用的 Go 微服务框架,提供了一组用于构建微服务的可复用组件。
    • 它强调使用接口和组合来促进代码的模块化和可测试性。
    • Go-kit 提供了服务发现、负载均衡、日志记录、度量和追踪等功能。
    • 它与众多开源工具集成,如 Consul、Zipkin 和 Prometheus。
  2. Micro (https://github.com/micro/go-micro):

    • Micro 是一个用于构建微服务的插件化框架。
    • 它提供了服务发现、RPC 通信、事件驱动的架构和分布式系统的基本模式。
    • Micro 有一个强大的插件系统,允许你扩展和定制框架的行为。
    • 它支持多种传输协议(如 HTTP、gRPC、NATS)和编码格式(如 JSON、Protobuf)。
  3. Gizmo (https://github.com/NYTimes/gizmo):

    • Gizmo 是由纽约时报开发的一个微服务工具包。
    • 它提供了一组标准的包和工具,用于构建 Go 微服务。
    • Gizmo 包括服务发现、配置管理、日志记录、度量和 RPC 通信等功能。
    • 它还提供了一个 CLI 工具,用于生成微服务的样板代码。
  4. Go-zero (https://github.com/tal-tech/go-zero):

    • Go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。
    • 它提供了 API 定义、代码生成、并发控制、负载均衡、缓存、监控等功能。
    • Go-zero 强调简单性和可用性,旨在帮助开发者快速构建高性能的微服务。
  5. Kratos (https://github.com/go-kratos/kratos):

    • Kratos 是一个模块化的 Go 微服务框架,受到了 Go-kit 和 Gin 的启发。
    • 它提供了一组可复用的模块,如传输、中间件、日志记录、度量和追踪。
    • Kratos 支持多种传输协议和编码格式,并与各种开源工具集成。

这些只是 Go 生态系统中几个流行的微服务框架。选择框架时,考虑你的具体需求、团队的经验以及框架的成熟度和社区支持非常重要。


C# 微服务框架中,使用最广泛的是 .NET Core 和 Steeltoe。

  1. .NET Core:

    • .NET Core 是 Microsoft 开发的开源、跨平台框架,用于构建现代化的、基于云的应用程序。
    • 它提供了构建微服务的基础设施,包括 ASP.NET Core 用于构建 Web API 和微服务。
    • .NET Core 受到 Microsoft 的大力支持和推广,已经被广泛采用于各种规模的企业和组织。
    • 许多大型公司,如 Stack Overflow、Jet.com 和 Siemens,都在生产环境中使用 .NET Core 构建微服务。
    • .NET Core 有一个庞大而活跃的社区,提供了大量的文档、教程和第三方库。
  2. Steeltoe:

    • Steeltoe 是 Pivotal 公司开发的开源 .NET 微服务框架,旨在与 Spring Cloud 生态系统集成。
    • 它提供了一组用于构建微服务的可复用组件,如服务发现、配置管理、断路器等。
    • Steeltoe 允许 .NET 开发人员使用与 Spring Cloud 相同的模式和工具,促进了 .NET 和 Java 微服务之间的互操作性。
    • 许多使用 Pivotal Cloud Foundry 平台的组织都采用了 Steeltoe 来构建 .NET 微服务。
    • Steeltoe 有一个活跃的社区,定期发布新版本和更新。



.NET Core如何快速构建微服务

我们通过一个实际的例子来看看如何使用 .NET Core 快速构建微服务。我们将创建一个简单的产品目录微服务,它提供了一些 API 来管理产品。

创建新的 ASP.NET Core Web API 项目:

打开 Visual Studio,选择 "新建项目"。

选择 "ASP.NET Core Web API" 模板,给项目命名为 "ProductCatalog",然后点击 "创建"。

定义产品模型:


在项目中创建一个名为 "Models" 的文件夹。

在该文件夹中创建一个名为 "Product.cs" 的文件,内容如下:


public class Product

{

    public int Id { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }

    public decimal Price { get; set; }

}

创建产品控制器:

在项目中创建一个名为 "Controllers" 的文件夹。

在该文件夹中创建一个名为 "ProductsController.cs" 的文件,内容如下:


[ApiController]

[Route("api/[controller]")]

public class ProductsController : ControllerBase

{

    private static readonly List<Product> Products = new List<Product>

    {

        new Product { Id = 1, Name = "Product 1", Description = "Description 1", Price = 10.00m },

        new Product { Id = 2, Name = "Product 2", Description = "Description 2", Price = 20.00m },

        new Product { Id = 3, Name = "Product 3", Description = "Description 3", Price = 30.00m }

    };


    [HttpGet]

    public IEnumerable<Product> GetAll()

    {

        return Products;

    }


    [HttpGet("{id}")]

    public IActionResult GetById(int id)

    {

        var product = Products.FirstOrDefault(p => p.Id == id);

        if (product == null)

        {

            return NotFound();

        }

        return Ok(product);

    }

}

配置 Startup.cs:

打开 "Startup.cs" 文件,确保在 ConfigureServices 方法中添加了以下内容:


public void ConfigureServices(IServiceCollection services)

{

    services.AddControllers();

}

运行微服务:


按 F5 或点击 "开始调试" 来运行应用程序。

默认情况下,Web API 将在 https://localhost:5001 和 http://localhost:5000 上运行。

测试 API:


打开 Postman 或任何其他 API 测试工具。

发送一个 GET 请求到 https://localhost:5001/api/products,你应该会看到所有产品的列表。

发送一个 GET 请求到 https://localhost:5001/api/products/1,你应该会看到 ID 为 1 的产品。

这个例子展示了如何使用 .NET Core 快速创建一个简单的微服务。在实际应用中,你可能需要添加更多的功能,如数据库集成、错误处理、日志记录、身份验证和授权等。


.NET Core 提供了许多内置的特性和扩展点,可以帮助你处理这些常见的场景。此外,你还可以利用 .NET 生态系统中的其他库


如何发现这个微服务并调用这个微服务,给出具体步骤和实际代码

好的,让我们继续这个例子,看看如何发现和调用我们刚刚创建的产品目录微服务。我们将使用 Consul 作为服务发现的解决方案。


安装并运行 Consul:

https://www.consul.io/downloads 下载 Consul。

点击进入consul源码地址

解压缩下载的文件,并将 consul 二进制文件添加到你的系统路径。

打开命令提示符,运行 consul agent -dev 来启动 Consul 代理。


将 Consul 服务发现添加到产品目录微服务:


安装 Consul.Microsoft.Extensions.Configuration NuGet 包。

修改 Program.cs 文件,配置 Consul:


public static IHostBuilder CreateHostBuilder(string[] args) =>

    Host.CreateDefaultBuilder(args)

        .ConfigureServices((hostContext, services) =>

        {

            services.AddSingleton<IConsulClient, ConsulClient>(p => new ConsulClient(consulConfig =>

            {

                consulConfig.Address = new Uri("http://localhost:8500");

            }));

        })

        .ConfigureWebHostDefaults(webBuilder =>

        {

            webBuilder.UseStartup<Startup>();

        });

在 Startup.cs 文件的 Configure 方法中,添加服务注册:


public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime lifetime, IConsulClient consulClient)

{

    // ... 其他配置 ...


    var registration = new AgentServiceRegistration

    {

        ID = "ProductCatalog",

        Name = "ProductCatalog",

        Address = "localhost",

        Port = 5000

    };


    consulClient.Agent.ServiceRegister(registration).Wait();


    lifetime.ApplicationStopping.Register(() =>

    {

        consulClient.Agent.ServiceDeregister(registration.ID).Wait();

    });

}

创建一个客户端微服务来调用产品目录微服务:

创建一个新的 ASP.NET Core Web API 项目,命名为 "ProductCatalogClient"。

安装 Consul.Microsoft.Extensions.Configuration 和 Microsoft.Extensions.Http.Polly NuGet 包。

在 Program.cs 文件中配置 Consul:


public static IHostBuilder CreateHostBuilder(string[] args) =>

    Host.CreateDefaultBuilder(args)

        .ConfigureServices((hostContext, services) =>

        {

            services.AddSingleton<IConsulClient, ConsulClient>(p => new ConsulClient(consulConfig =>

            {

                consulConfig.Address = new Uri("http://localhost:8500");//Consul的默认服务端口是8500,这个端口用于consul的HTTP API和Web UI,你可以通过访问http://[consul]

            }));


            services.AddHttpClient("ProductCatalog")

                .AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))))

                .AddTransientHttpErrorPolicy(builder => builder.CircuitBreakerAsync(5, TimeSpan.FromSeconds(30)));

        })

        .ConfigureWebHostDefaults(webBuilder =>

        {

            webBuilder.UseStartup<Startup>();

        });

创建一个名为 ProductCatalogClientController 的新控制器:


[ApiController]

[Route("api/[controller]")]

public class ProductCatalogClientController : ControllerBase

{

    private readonly IHttpClientFactory _httpClientFactory;

    private readonly IConsulClient _consulClient;


    public ProductCatalogClientController(IHttpClientFactory httpClientFactory, IConsulClient consulClient)

    {

        _httpClientFactory = httpClientFactory;

_consulClient = consulClient;

}



[HttpGet]

public async Task<IActionResult> GetProducts()

{

    var serviceUri = await GetServiceUri("ProductCatalog");

    if (serviceUri == null)

    {

        return NotFound("ProductCatalog service not found.");

    }


    var client = _httpClientFactory.CreateClient("ProductCatalog");

    var response = await client.GetAsync($"{serviceUri}/api/products");

    if (response.IsSuccessStatusCode)

    {

        var products = await response.Content.ReadAsAsync<IEnumerable<Product>>();

        return Ok(products);

    }


    return StatusCode((int)response.StatusCode, response.ReasonPhrase);

}


private async Task<Uri> GetServiceUri(string serviceName)

{

    var services = await _consulClient.Catalog.Service(serviceName);

    var service = services.Response?.FirstOrDefault();

    if (service != null)

    {

        return new Uri($"http://{service.ServiceAddress}:{service.ServicePort}");

    }


    return null;

}

}




4. 运行微服务:

   - 确保 Consul 正在运行。

   - 启动产品目录微服务。

   - 启动产品目录客户端微服务。


5. 测试服务发现和调用:

   - 打开 Postman 或任何其他 API 测试工具。

   - 发送一个 GET 请求到 `http://localhost:5000/api/productcatalogclient`,你应该看到来自产品目录微服务的所有产品的列表。


这个例子展示了如何使用 Consul 进行服务发现,以及如何从一个微服务调用另一个微服务。这里有几个关键点:


- 产品目录微服务在启动时向 Consul 注册自己,并在关闭时注销。

- 产品目录客户端微服务使用 Consul 来发现产品目录微服务的地址。

- HttpClient 工厂用于创建一个配置了重试和断路器策略的 HttpClient,以处理可能的网络问题。


在实际的应用中,你可能需要处理更复杂的场景,如服务认证、负载均衡、故障转移等。.NET Core 生态系统提供了许多库和工具来帮助你处理这些问题,如 Ocelot(API 网关)、Polly(弹性和瞬态故障处理)、IdentityServer(认证和授权)等。



eCapture(旁观者): 基于eBPF技术实现TLS加密的明文捕获,无需CA证书

点击查看源码


















Top