当前位置: 首页 > news >正文

弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门

Docker技术概论
在WSL2中玩转Docker之Docker Engine部署

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139663032
HuaWei:https://bbs.huaweicloud.com/blogs/429017

【介绍】:本文介绍基于WSL2的基础用于,以及基于WSL2,部署Docker Engine,实验环境为Windiws11,部署Docker Engine的Linux为Ubuntu发行版本。

在这里插入图片描述


上一节:《 暂无 | 下一节:《 暂无


1. 概述

Docker是一种广泛使用的容器化平台,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,以便在任何地方都能够以相同的方式运行。在Windows操作系统上,Docker Desktop是一种流行的Docker安装方式,它提供了一个用户友好的图形界面,使得安装和管理Docker变得非常简单。

然而,尽管Docker Desktop在Windows上的安装和使用非常方便,但它仍然存在一些局限性和不完善的地方。例如,一些功能在Docker Desktop上可能无法完全发挥作用,或者仍处于试验阶段,这可能会影响到使用体验。

此外,Docker Desktop作为一个独立的应用程序,会占用一定的系统资源,并且可能与其他应用程序产生冲突。对于一些对性能要求较高的开发者来说,这可能是一个问题。

为了解决这些问题,一种替代方案是在Windows Subsystem for Linux 2WSL2)中直接安装Docker EngineWSL2是微软推出的一项功能,它允许在Windows上运行Linux环境,并提供了更好的性能和兼容性。通过在WSL2中安装Docker Engine,开发者可以获得更原生的Docker体验,并且可以避免Docker Desktop的一些限制和问题。

在接下来的文章中,我们将详细介绍如何在WSL2中安装Docker Engine,并探讨这种方法相对于使用Docker Desktop的优势和注意事项。

2. 部署WSL2环境

2.1 WSL2简介及其安装

Windows Subsystem for Linux 2WSL2)是微软在Windows 10版本2004及更高版本中引入的一项功能,它是WSL的一个重大更新。WSL2基于虚拟机技术,提供了一个完整的Linux内核,使得在Windows上运行Linux环境变得更加高效和兼容。

与第一代WSL相比,WSL2具有以下优势:

  1. 更好的性能:WSL2使用虚拟机技术,可以实现接近原生Linux的性能表现。

  2. 完整的系统调用兼容性:WSL2提供了一个完整的Linux内核,支持所有的Linux系统调用,使得更多的Linux应用程序可以在Windows上运行。

  3. 更好的文件系统性能:WSL2引入了一个新的文件系统,称为VHDX,它提供了更快的文件读写性能。

要在Windows上安装WSL2,你需要按照以下步骤进行操作:

  1. 确保你的Windows版本为2004或更高版本(内部版本19041及更高版本)或Windows 11。可以在设置->系统->关于中查看版本信息。

  2. 以管理员身份打开PowerShell或Windows命令提示符,方法是右键单击并选择"以管理员身份运行"。
    在这里插入图片描述

  3. 在PowerShell或命令提示符中输入以下命令并按回车键:

wsl --install

这个命令将启用运行WSL并安装Linux的Ubuntu发行版所需的功能。如果你想安装其他发行版,可以使用-d标志,例如:

wsl --install -d Debian

不过你也可以在后续查看安装各种发行版本。

  1. 命令执行完毕后,最好需要重启计算机以完成安装。

  2. 重启后,打开已安装的Linux发行版,它会自动打开一个控制台窗口。

2.2 查找WSL2和安装支持的其它发行版

之前提到-d Debian可以选择初始化时一个默认版本,如未选择就是使用默认的Ubuntu。实际上我们还可以继续安装其它发行版本,要了解当前WSL2支持的Linux发行版,可以使用这个命令:

wsl --list --online

它将搜索当前的支持列表并打印输出出来,例如:

PS C:\Users\jclee95> wsl --list --online
以下是可安装的有效分发的列表。
使用 'wsl.exe --install <Distro>' 安装。NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
Ubuntu-24.04                           Ubuntu 24.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

在这里插入图片描述

我们可以选择喜欢的版本通过下面的命令进行安装,例如安装Ubuntu-24.04版本:

wsl --install Ubuntu-24.04

在已经被Windows集成到Windows 11上作为系统终端的,开发者神器 WIndows Terminal上,你可以找到你安装的发行版本:
在这里插入图片描述

如果系统是首次启动时,需要等待一段时间,让系统完成初始化并提示你创建一个新的Linux用户帐户和密码。例如:

在这里插入图片描述
你需要设置一个用户名和密码。

对于已经初始化完成的系统,切换终端后将直接执行其/bin/bash/bin/sh或类似项目,打开一个交互式环境:

在这里插入图片描述

Windows Termimal上,以后如果需要进入默认WSL系统(如未修改就是安装wsl时的Ubuntu),可以直接指定bash命令:

bash

这会通过一个wsl的批处理激活对应的Linux交互环境,如果需要回退Windows终端,则执行exit即:

exit

例如:
在这里插入图片描述

2.3 关于WSL容器中的HTTP/HTTPS代理

这里可以看到一点小提示:

wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。

一般用户如果没有使用代理不需要关注。它表明,在 Windows 主机上配置了 localhost 代理(主要用于特定网络的访问),但 WSL 无法使用这个代理配置。在 WSLNAT 模式下,localhost 代理是不被支持的。

这个意思是,localhost一般在系统上是回环IP如127.0.0.1的本地host中指定的域名,而然WSL中的系统是独立的,两个系统都有自己的回环地址,因此如果你在你的Windows宿主机上使用的VPN代理是不会影响到WSL中安装的系统的回环地址。

如果你了解Docker网络就知道,Docker所管理的容器中类似。实际上在Windows上,一个Docker容器也是一个WSL系统,只不过容器主要是由Docker软件所管理的。

如果你不需要在 WSL 中使用代理,可以在 Windows 的代理设置中禁用 localhost 代理。这样 WSL 就不会尝试使用这个代理配置了。

说了这么多要在你的WSL容器中使用代理,你就不因该将HTTP/HTTPS代理设置为127.0.0.1,虽然在Windows上可能这样做如(假设代理端口为6666):

$Env:http_proxy="http://192.168.31.25:6666";$Env:https_proxy="http://192.168.31.25:6666"

你应该先在你的Windows终端上使用ipconmfig查询一下自己的IP地址,假设为192.168.31.25,那么,在你的WSLLinux容器中,就应该使用这样的格式来使用代理了:

export http_proxy="http://192.168.31.25:6666"
export https_proxy="http://192.168.31.25:6666"

另外,如果你希望默认使用这个代理,还可以在~/.bashrc中配置Bash启动运行:

vim ~/.bashrc

添加这两行命令:

export http_proxy="http://192.168.31.25:6666"
export https_proxy="http://192.168.31.25:6666"

注意,需要替换为你实际的代理服务器地址和端口。如果你喜欢这个配置文件的修改立刻生效则需要运行下面的命令:

source ~/.bashrc

另外,如果如果你使用的不是Bash Shell而是 Zsh shell,则运行:

source ~/.zshrc

现在,http_proxyhttps_proxy 环境变量已经设置好了。你可以使用以下命令来验证环境变量是否设置正确:

echo $http_proxy
echo $https_proxy

然后在你的对应WSL容器中curl特定的网站,看实际访问是否成功,如:

在这里插入图片描述
可见我这里是成功的。

另外,这种方法是在当前用户的 shell 配置文件中设置环境变量,因此只对当前用户生效。如果你想要为所有用户设置代理环境变量,可以将这两行内容添加到 /etc/environment 文件中,并重新登录或重启系统以使更改生效。

2.4 WSL的其它常用管理命令

为了便于读者进行相关调试,这里顺便介绍一些WSL中常用的命令

列出已安装的 WSL 发行版

wsl -l

例如:
在这里插入图片描述
这里安装了2个wsl系统,都是Ubuntu,一个为24.04版本的,另外一个为22.04版本的。

设置为默认使用系统版本

例如设置22.04的为默认版本:

wsl --set-default Ubuntu-22.04

关闭所有正在运行的 WSL 实例

wsl --shutdown

注销并删除一个 WSL 发行版

wsl --unregister <DistroName>

更新 WSL 到最新版本

wsl --update

显示 WSL 的状态,包括版本信息

wsl --status

从 tar 文件导入 WSL 发行版

wsl --import <DistroName> <InstallLocation> <FileName>

将 WSL 发行版导出到 tar 文件

wsl --export <DistroName> <FileName>

终止指定的 WSL 发行版

wsl --terminate <DistroName>

3. 从deb包安装Docker

3.1 关于apt repository的安装方式

安装过程与直接在Ubuntu物理机上安装是一样的。在WSL中通过apt包管理器仓库安装时,需要设置Dockerrepository,但是有时即使你正确使用了HTTP/HTTPS代理,也可能由于网络问题安装失败。如果你需要尝试这个安装方式,可以按照下面的步骤进行:

3.2 手动下载deb安装

首先访问:https://download.docker.com/linux/ubuntu/dists/?_gl=1dzadrf_gcl_auMjAzNjIxNjkxMy4xNzE3OTE2MTA5_gaNjQ5MjUwNDYyLjE3MTc5MTYxMDk._ga_XJWPQMJYHQ*MTcxODI3NzgwNi43LjEuMTcxODI3ODUyNC41My4wLjA.,从这个网站中选择你的Ubuntu版本:
在这里插入图片描述
这个页面列举的是各个Ubuntu发行版本的版本代号,
每个 Ubuntu 版本都有一个代号,通常由一个形容词和一个动物名称组成,并按字母顺序排列。例如:

  • Ubuntu 18.04: Bionic Beaver
  • Ubuntu 20.04: Focal Fossa
  • Ubuntu 22.04: Jammy Jellyfish
  • Ubuntu 22.10: Kinetic Kudu

这里,我想为 Ubuntu 22.04 下载 Docker 文件,因此选择 jammy/ 目录,来到了第2个页面:

在这里插入图片描述
这些是 Docker 提供的不同版本或发布渠道:

  1. stable/: 这是 Docker 的稳定版本,推荐大多数用户使用。稳定版本经过了广泛的测试,可靠性高,并提供了长期支持。如果你正在生产环境中使用 Docker 或者不需要最新的功能,选择稳定版本是最佳选择。

  2. test/: 这是 Docker 的测试版本,包含了新的功能和改进,但可能不如稳定版本可靠。如果你想尝试最新的功能并且可以容忍可能出现的问题,你可以选择测试版本。测试版本通常会在几周或几个月后成为新的稳定版本。

  3. nightly/: 这是 Docker 的每夜构建版本,包含了最新的代码更改。每夜版本是自动构建的,没有经过广泛测试,因此可能不稳定。除非你是开发人员或者想测试最新的代码,否则不建议使用每夜版本。

  4. pool/: 这不是一个特定的 Docker 版本,而是一个包含所有 Docker deb 包的目录。你通常不需要直接使用这个目录。

  5. InRelease, Release, 和 Release.gpg: 这些是用于验证软件包完整性和真实性的文件,不代表特定的 Docker 版本。

现在我们使用deb包进行安装,因此访问pool/目录:
在这里插入图片描述
选择stable稳定版,进入第4个页面:

在这里插入图片描述
这些目录包含了适用于不同 CPU 架构的 Docker deb 安装包。下面是一个表格,描述了每个目录的用途:

目录描述
amd64/包含适用于 AMD64 (x86-64) 架构的 Docker deb 安装包。这是最常见的架构,用于大多数个人计算机和服务器。
arm64/包含适用于 ARM64 (AArch64) 架构的 Docker deb 安装包。这种架构常用于嵌入式设备、移动设备和一些服务器。
armhf/包含适用于 ARMHF (ARM hard float) 架构的 Docker deb 安装包。这种架构常用于 32 位 ARM 设备,如 Raspberry Pi。
ppc64el/包含适用于 PowerPC 64 位小端 (ppc64el) 架构的 Docker deb 安装包。这种架构常用于 IBM POWER 系统。
s390x/包含适用于 IBM System z (s390x) 架构的 Docker deb 安装包。这种架构常用于 IBM 大型机。

一般该根据你的系统 CPU 架构选择相应的目录。对于大多数个人计算机和服务器,amd64/ 是正确的选择。你可以使用以下命令来检查你的系统架构:

dpkg --print-architecture

在这里插入图片描述
可以看到我这里是amd64,就打开amd64目录,进入实际的下载页面:
在这里插入图片描述
需要注意下载版本的匹配,否则安装时可能会出错。这里我选择的是当前较新的一套版本:

  • containerd.io_1.6.33-1_amd64.deb

  • docker-ce-cli_26.1.4-1ubuntu.22.04jammy_amd64.deb

  • docker-ce_26.1.4-1ubuntu.22.04jammy_amd64.deb

  • docker-buildx-plugin_0.14.1-1ubuntu.22.04jammy_amd64.deb

  • docker-compose-plugin_2.27.1-1ubuntu.22.04jammy_amd64.deb

  • docker-ce-rootless-extras_26.1.4-1ubuntu.22.04jammy_amd64.deb

我是直接点击下载到我的Windows主机上的,在下面一章将介绍如何直接在WLS容器上找到你的Windows宿主机上的文件。

当然,还有一个在写脚本实现的时候可以用的方法是通过wget命令下载到指定的目录,这在Linux系统上还是很常见的,如:

wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/containerd.io_1.6.33-1_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-cli_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-buildx-plugin_0.14.1-1~ubuntu.22.04~jammy_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-compose-plugin_2.27.1-1~ubuntu.22.04~jammy_amd64.deb
wget https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/docker-ce-rootless-extras_26.1.4-1~ubuntu.22.04~jammy_amd64.deb

4. WSL容器访问Windows位置以安装deb

4.1 WSL容器中的卷绑定

在WSL2中,Microsoft引入了一个非常方便的功能,允许在WSL容器中直接访问Windows文件系统。这意味着你可以在WSL的Linux环境中,使用熟悉的Linux命令和工具来操作Windows上的文件和目录。

当你启动一个WSL发行版时,它会自动将Windows文件系统中的某些位置挂载到WSL的文件系统中。默认情况下,会发生以下挂载:

  • C:盘会被挂载到/mnt/c

  • D:盘会被挂载到/mnt/d

其他盘符也以此类推,如E:盘会被挂载到/mnt/e等。

例如,如果你在Windows的D:\Downloads目录中有一些文件,你可以在WSL中通过/mnt/d/Downloads路径来访问它们。

这个功能非常强大,它允许你在WSL中无缝地使用Windows文件系统,而不需要复制文件或在两个系统之间切换。你可以在WSL中使用ls,cd,cp,mv等命令来浏览和操作这些文件。

需要注意的是,虽然你可以在WSL中访问整个Windows文件系统,但反过来并不成立。从Windows中,你只能访问WSL的Linux文件系统的一部分,默认位置是:

\\wsl$\<DistroName>\home\<UserName>

其中<DistroName>是你的WSL发行版的名称,<UserName>是你的Linux用户名。

了解了WSL的卷绑定功能后,我们就可以方便地在WSL中安装之前下载到Windows中的Docker deb包了。

4.2 安装deb

假设你已经将Dockerdeb安装包下载到了WindowsD:\Downloads目录,现在我们可以在WSL中进行安装。首先,启动你的WSL发行版,然后切换到/mnt/d/Downloads目录:

cd /mnt/d/Downloads

然后,使用dpkg命令来安装这些deb包。注意要按照一定的顺序,因为有些包有依赖关系:

sudo dpkg -i containerd.io_1.6.33-1_amd64.deb
sudo dpkg -i docker-ce-cli_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
sudo dpkg -i docker-ce_26.1.4-1~ubuntu.22.04~jammy_amd64.deb
sudo dpkg -i docker-buildx-plugin_0.14.1-1~ubuntu.22.04~jammy_amd64.deb
sudo dpkg -i docker-compose-plugin_2.27.1-1~ubuntu.22.04~jammy_amd64.deb
sudo dpkg -i docker-ce-rootless-extras_26.1.4-1~ubuntu.22.04~jammy_amd64.deb

安装完成后,Docker就已经安装到你的WSL系统中了。

你可以尝试启动Docker服务和在系统启动时自动启动:

sudo systemctl start docker
sudo systemctl enable docker

然后,检查Docker服务的状态和安装的版本:

sudo docker version

在这里插入图片描述
从这个截图可以看出,Docker已经成功在WSL容器中部署了,但拉取镜像却失败了,因此下一章介绍如何配置代理,这对于网络访问加速Docker拉取很有用。

5. 为Docker配置代理

为了直接使用Docker官方仓库,可以设置Docker访问代理,前提是你自己已有代理服务器。关于代理服务器不在本文的介绍范围内。

这个部分是我的另外一篇笔记中的摘录:《简记:为Docker配置服务代理》,地址:https://blog.csdn.net/qq_28550263/article/details/139562987

5.1 创建Docker配置文件(如果不存在)

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

5.2 添加代理设置

sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf

在配置文件中,添加以下内容:

[Service]
Environment="HTTP_PROXY=http://服务端主机IP:VPN服务端口号"
Environment="HTTPS_PROXY=http://服务端主机IP:VPN服务端口号"
Environment="NO_PROXY=localhost,127.0.0.1"

例如:

[Service]
Environment="HTTP_PROXY=http://192.168.31.25:7890"
Environment="HTTPS_PROXY=http://192.168.31.25:7890"
Environment="NO_PROXY=localhost,127.0.0.1"

在这里插入图片描述

这里我使用的依然是192.168.31.25和端口7890。请将http://192.168.31.25:7890替换为你实际的代理服务器地址和端口。

NO_PROXY环境变量指定了不应该通过代理访问的主机或域名,通常包括本地主机和回环地址。

5.3 重新加载Docker服务配置并重启Docker

  1. 重新加载Docker服务配置:
sudo systemctl daemon-reload
  1. 重启Docker服务:
sudo systemctl restart docker

然后再次尝试拉取镜像,现在拉取流量将通过代理隧道转发:
在这里插入图片描述
拉取结束后,可以再次查看一下你的镜像:
在这里插入图片描述
可见成功了。

相关文章:

弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门

Docker技术概论 在WSL2中玩转Docker之Docker Engine部署 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://bl…...

Mac下载了docker,在终端使用docker命令时用不了

问题&#xff1a;在mac使用docker的时候&#xff0c;拉取docker镜像失败 原因&#xff1a;docker是需要用app使用的 &#xff0c;所以在使用的时候必须打开这个桌面端软件才可以在终端上使用docker命令&#xff01;&#xff01;&#xff01;...

Spring Security——基于MyBatis

目录 项目总结 新建一个项目 pom.xml application.properties配置文件 User实体类 UserMapper映射接口 UserService访问数据库中的用户信息 WebSecurityConfig配置类 MyAuthenticationFailureHandler登录失败后 MyAuthenticationSuccessHandlerw登录成功后 WebSecur…...

Qt——升级系列(Level Four):控件概述、QWidget 核心属性、按钮类控件

目录 控件概述 QWidget 核心属性 核心属性概览 enabled geometry windowTitle windowIcon windowOpacity cursor font toolTip focusPolicy styleSheet 按钮类控件 Push Button Radio Buttion Check Box Tool Button 控件概述 Widget 是 Qt 中的核⼼概念. 英⽂原义是 "…...

品质卓越为你打造App UI 风格

品质卓越为你打造App UI 风格...

ei期刊和sci期刊的区别

ei期刊和sci期刊的区别 ei期刊和sci期刊的区别是什么?Sci和ei都属于国际期刊的一种&#xff0c;但是二者之间存在一些区别&#xff0c;选择期刊投稿时需要注意这些区别。EI期刊刊物的审查周期短&#xff0c;SCI学术期刊的审查期长。难度要求不同&#xff0c;SCI期刊比EI期刊对…...

从零手写实现 nginx-20-placeholder 占位符 $

前言 大家好&#xff0c;我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的&#xff0c;可以参考我的另一个项目&#xff1a; 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …...

leetcode290:单词规律

题目链接&#xff1a;290. 单词规律 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool wordPattern(string pattern, string s) {unordered_map<char, string> s2t;unordered_map<string, char> t2s;int len pattern.size();int CountSpace…...

IDEA 2022

介绍 【尚硅谷IDEA安装idea实战教程&#xff08;百万播放&#xff0c;新版来袭&#xff09;】 jetbrains 中文官网 IDEA 官网 IDEA 从 IDEA 2022.1 版本开始支持 JDK 17&#xff0c;也就是说如果想要使用 JDK 17&#xff0c;那么就要下载 IDEA 2022.1 或之后的版本。 公司…...

Vue TypeScript 实战:掌握静态类型编程

title: Vue TypeScript 实战&#xff1a;掌握静态类型编程 date: 2024/6/10 updated: 2024/6/10 excerpt: 这篇文章介绍了如何在TypeScript环境下为Vue.js应用搭建项目结构&#xff0c;包括初始化配置、创建Vue组件、实现状态管理利用Vuex、配置路由以及性能优化的方法&#x…...

Hudi extraMetadata 研究总结

前言 研究总结 Hudi extraMetadata ,记录研究过程。主要目的是通过 extraMetadata 保存 source 表的 commitTime (checkpoint), 来实现增量读Hudi表写Hudi表时,保存增量读状态的事务性,实现类似于流任务中的 exactly-once 背景需求 有个需求:增量读Hudi表关联其他Hudi…...

Vue31-自定义指令:总结

一、自定义函数的陷阱 1-1、自定义函数名 自定义函数名&#xff0c;不能用驼峰式&#xff01;&#xff01;&#xff01; 示例1&#xff1a; 示例2&#xff1a; 1-2、指令回调函数的this 【回顾】&#xff1a; 所有由vue管理的函数&#xff0c;里面的this直接就是vm实例对象。…...

Windows环境如何使用Flutter Version Manager (fvm)

Windows环境如何使用Flutter Version Manager (fvm) Flutter Version Manager (fvm) 是一个用于管理多个 Flutter SDK 版本的命令行工具&#xff0c;它允许开发者在不同项目之间轻松切换 Flutter 版本。这对于需要维护多个使用不同 Flutter 版本的项目的开发人员来说非常有用。…...

优化Elasticsearch搜索性能:查询调优与索引设计

在构建基于 Elasticsearch 的搜索解决方案时&#xff0c;性能优化是关键。本文将深入探讨如何通过查询调优和索引设计来优化 Elasticsearch 的搜索性能&#xff0c;从而提高用户体验和系统效率。 查询调优 优化查询是提高 Elasticsearch 性能的重要方法。以下是一些有效的查询…...

STM32-17-DAC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…...

一杯咖啡的艺术 | 如何利用数字孪生技术做出完美的意式浓缩咖啡?

若您对数据分析以及人工智能感兴趣&#xff0c;欢迎与我们一起站在全球视野关注人工智能的发展&#xff0c;与Forrester 、德勤、麦肯锡等全球知名企业共探AI如何加速制造进程&#xff0c; 共同参与6月20日由Altair主办的面向工程师的全球线上人工智能会议“AI for Engineers”…...

使用QT制作QQ登录界面

mywidget.cpp #include "mywidget.h"Mywidget::Mywidget(QWidget *parent): QWidget(parent) {/********制作一个QQ登录界面*********************/this->resize(535,415);//设置登录窗口大小this->setFixedSize(535,415);//固定窗口大小this->setWindowTi…...

代码随想录训练营第七天 344反转字符串 541反转字符串II 替换数字

第一题&#xff1a; 原题链接&#xff1a;344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 双指针&#xff0c;一根指向字符串的头部&#xff0c;一根指向字符串的尾部。两个指针向中间移动&#xff0c;交换两根指针指向的值。 代码如下&#xf…...

【Python】数据处理:SQLite操作

使用 Python 与 SQLite 进行交互非常方便。SQLite 是一个轻量级的关系数据库&#xff0c;Python 标准库中包含一个名为 sqlite3 的模块&#xff0c;可以直接使用。 import sqlite3数据库连接和管理 连接到 SQLite 数据库。如果数据库文件不存在&#xff0c;则创建一个新数据库…...

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -3

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共30个基础CAN函数&#xff1b; 该文章只梳理常规CAN&#xff0c;增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…...

2024年第三届数据统计与分析竞赛(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 详细请查 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024年第三届数据统计与分析竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有…...

高通Android 12 右边导航栏改成底部显示

最近同事说需要修改右边导航栏到底部&#xff0c;问怎么搞&#xff1f;然后看下源码尝试下。 1、Android 12修改代码路径 frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java a/frameworks/base/services/core/java/com/android/server/wm/Display…...

2.6数据报与虚电路

数据报 当作为通信子网用户的端系统要发送一个报文时&#xff0c;在端系统中实现的高层协议先把报文拆成若干个带有序号的数据单元&#xff0c;并在网络层加上地址等控制信息后形成数据报分组(即网络层PDU)中间结点存储分组一段很短的时间&#xff0c;找到最佳的路由后&#x…...

小主机折腾记26

双独立显卡调用问题 前两天将tesla p4从x99大板上拆了下来&#xff0c;将880G5twr上的rx480 4g安装到了x99大板上&#xff0c;预计是dg1输出&#xff0c;rx480做3d运算。安装完驱动后&#xff0c;还想着按照之前tesla p4的设置方法去设置rx480&#xff0c;结果果然&#xff0c…...

ArrayList浅析

目录 一、ArrayList源码1.1 迭代器1.1.1 Itr源码浅析1.1.2 ListItr源码浅析 1.2 常用方法1.3 System.arraycopy1.4 ArrayList 的创建方式 二、引申问题2.1 ArrayList的大小是如何增加的&#xff1f;2.2 什么情况下你会使用ArrayList2.3 在索引中ArrayList的增加或者删除某个对象…...

Spring Boot整合hibernate-validator实现数据校验

文章目录 概念基本概念常用校验注解 前置内容整合Hibernate Validator快速入门优雅处理参数校验异常其余注解校验自定义校验注解 参考来源 概念 基本概念 Hibernate Validator 是一个参数校验框架&#xff0c;可以非常方便地帮助我们校验应用程序的入参&#xff0c;实现了参数…...

Ubuntu系统中网易云音乐编译安装

项目地址&#xff1a; netease-cloud-music-gtk: Linux 平台下基于 Rust GTK 开发的网易云音乐播放器 目录 1.README.md中按照步骤来 2.安装git 3.报错 sudo apt install cmake sudo apt-get install libdbus-1-dev sudo apt install dnf sudo dnf install gettext 继…...

MPLS标签号

标签被压入在2层与3层之间 称为 2.5层 标签的格式----32 位4 个字节 前 20 位为标签号&#xff0c;2~20 个标签号&#xff1b;其中1-15号保留&#xff0c;作为特殊编号&#xff1b; 第 21-23位 exp&#xff0c;3位8个数&#xff0c;为优先级&#xff0c;用于Q0S 策略使用&a…...

OpenHarmony napi 编译 .so 并打包成 .har

一、前言 最近在搞公司标准产品适配OpenHarmony 平台&#xff0c; 按照行业上的常用方法&#xff0c;在Android 是将底层代码用c 封装成 xxx.so &#xff0c;然后将其他一部分打包成 xxx.jar。 因此&#xff0c;在OpenHarmony 平台也是打算按照这个模式。正所谓&#xff0c;好…...

python 循环导入(circular imports)解决方法

在 Python 中&#xff0c;大部分人都应该都遇到过循环导入的问题。 循环导入是指两个文件各自尝试导入另一个文件&#xff08;模块&#xff09;&#xff0c;当一个模块没有完全初始化时会导致失败。解决这种情况的最好方法是将代码分层组织&#xff0c;这样导入的关系就会自然…...

用dw设计网站怎么做/网站接广告平台

为什么80%的码农都做不了架构师&#xff1f;>>> 在服务器上执行go get github.com/bitly/go-simplejson的时候git clone 出现SSL错误 # cd .; git clone https://github.com/bitly/go-simplejson /opt/go/src/pkg/github.com/bitly/go-simplejson Cloning into /op…...

wordpress目录分类设置/谷歌seo网站推广怎么做优化

之前一直搞不很明白 AndroidManifest.xml 中 activity 标签下的 intent-filter 中 data 标签的属性含义&#xff0c;今天认真看了 Dev Guide&#xff0c;又在网上查询了大量相关资料&#xff0c;现把 data 标签中的属性含义做一个总结。 一、定义 scheme, host, port, path, p…...

百度权重从1提升到2的办法/草根seo视频大全网站

记得前面老周写过在.net core 中使用 Composition 的烂文。上回老周给大伙伴们介绍的是一个“重量级”版本—— System.ComponentModel.Composition。应该说&#xff0c;这个“重量级”版本是.NET 框架中的“标配”。 很多东西都会有双面性&#xff0c;MEF 也一样&#xff0c;…...

镇海区建设交通局网站进不去了/阿里巴巴数据分析官网

一、简介基于matlab 二值化停车场车辆计数二、源代码clc;clear allIimread(C:\Users\lenovo\Desktop\新建文件夹\2.png);Grgb2gray(I);% Ghisteq(G);Himhist(G);% bar(H);[a,b]size(G);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%提取白车GG-100;for i1:1:afor j1:1:bif G(i,j)>2…...

设计师国外网站/网站建设 全网营销

没思路的时候抓个包看看&#xff0c;可能会有意外收获...

做淘客的网站/在线之家

晚上想在ubuntu上安装docker时&#xff0c;用apt-get update报错了 没有截图&#xff0c;图网上找的&#xff0c;情况类似 尝试过换源&#xff0c;换上了清华和阿里云的镜像都没用 然后用ifconfig发现只有docker0和lo 用ifconfig -a命令发现ens33也会显示 用这条命令dhclient…...