使用VSCode在WSL和Docker中开发

article/2025/6/18 22:07:12

通过WSL,开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需使用传统虚拟机或设置成双启动系统。借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试。

安装WSL

通过WSL,开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需使用传统虚拟机或设置成双启动系统。

安装WSL2

在Windows11或Windows10(更新至新版)中,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl --install 命令,此命令将启用运行 WSL2 并安装 Linux 的 Ubuntu 发行版所需的功能。。

如果不使用默认的Ubuntu发行版,也可以进行更改。

  • 若要更改安装的发行版,请输入:wsl --install -d <Distribution Name>。 将 <Distribution Name> 替换为要安装的发行版的名称。

设置 Linux 用户信息

安装 WSL 后,需要为新安装的 Linux 发行版创建用户帐户和密码。

检查正在运行的 WSL 版本

可列出已安装的 Linux 发行版,并通过在 PowerShell 或 Windows 命令提示符中输入以下命令来检查每个发行版的 WSL 版本:wsl -l -v

D:\>wsl -l -vNAME              STATE           VERSION
* Ubuntu            Running         2docker-desktop    Running         2

应确保使用WSL2,以便利的使用Docker、VScode等软件进行开发。

使用 WSL 运行多个 Linux 发行版的方法

WSL 支持运行想要安装的任意数量的不同 Linux 发行版。 这可能包括从 Microsoft Store 选择发行版、导入自定义发行版或生成自己的自定义发行版。

可以使用命令wsl -l -o查看可安装的Linux发行版。

D:\>wsl -l -o
以下是可安装的有效分发的列表。
使用“wsl.exe --install <Distro>”安装。NAME                            FRIENDLY NAME
AlmaLinux-8                     AlmaLinux OS 8
AlmaLinux-9                     AlmaLinux OS 9
AlmaLinux-Kitten-10             AlmaLinux OS Kitten 10
AlmaLinux-10                    AlmaLinux OS 10
Debian                          Debian GNU/Linux
FedoraLinux-42                  Fedora Linux 42
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
Ubuntu                          Ubuntu
Ubuntu-24.04                    Ubuntu 24.04 LTS
archlinux                       Arch Linux
kali-linux                      Kali Linux Rolling
openSUSE-Tumbleweed             openSUSE Tumbleweed
openSUSE-Leap-15.6              openSUSE Leap 15.6
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1

安装后,有几种方法可以运行 Linux 发行版:

  • 安装 Windows 终端(推荐):使用 Windows 终端支持你想要安装的任意数量的命令行,并允许你在多个标签或窗口窗格中打开它们并在多个 Linux 发行版或其他命令行(PowerShell、命令提示符、Azure CLI 等)之间快速切换。 可使用独特的配色方案、字体样式、大小、背景图像和自定义键盘快捷键来完全自定义终端。 了解详细信息。
  • 通过访问 Windows“开始”菜单并键入已安装的发行版的名称,可以直接打开 Linux 发行版。 例如:“Ubuntu”。 这会在其自己的控制台窗口中打开 Ubuntu。
  • 在 Windows 命令提示符或 PowerShell 中,可以输入已安装的发行版的名称。 例如:ubuntu
  • 在 Windows 命令提示符或 PowerShell 中,可以在当前命令行中打开默认的 Linux 发行版,方法是输入:wsl.exe
  • 在 Windows 命令提示符或 PowerShell 中,可以在当前命令行中使用默认的 Linux 发行版,而无需输入新的发行版名称,方法是输入:wsl [command]。 将 [command] 替换为 WSL 命令,例如,替换为 wsl -l -v 以列出已安装的发行版,或 wsl pwd 以查看当前目录路径在 WSL 中的装载位置。 在 PowerShell 中,命令 get-date 将提供 Windows 文件系统中的日期,而 wsl date 将提供 Linux 文件系统中的日期。

WSL2上的Docker 远程容器

Docker 容器概述

Docker 是一种工具,用于创建、部署和运行应用程序(通过使用容器)。 容器使开发人员可以将应用与需要的所有部件(库、框架、依赖项等)打包为一个包一起交付。 使用容器可确保此应用的运行与之前相同,而不受任何自定义设置或运行该应用的计算机上先前安装的库的影响(运行应用的计算机可能与用于编写和测试应用代码的计算机不同)。 这使开发人员可以专注于编写代码,而无需关心将运行代码的系统。

Docker 容器与虚拟机类似,但不会创建整个虚拟操作系统。 相反,Docker 允许应用使用与运行它的系统相同的 Linux 内核。 这使得应用包能够仅要求主计算机上尚未安装的部件,从而降低包大小以及提高性能。

将 Docker 容器与 Kubernetes 等工具结合使用以实现持续可用性是容器普及的另一个原因。 这样就可以在不同的时间创建应用容器的多个版本。 每个容器(及其特定的微服务)均可以动态更换,而无需停止整个系统来进行更新或维护。 你可以准备一个包含所有更新的新容器,将该容器设置用于生产,并在新容器准备就绪后直接指向该容器。 你还可以使用容器对不同版本的应用进行存档,如有需要,还可将其作为安全回退保持运行。

安装 Docker Desktop

借助 Docker Desktop for Windows 中支持的 WSL 2 后端,可以在基于 Linux 的开发环境中工作并生成基于 Linux 的容器,同时使用 Visual Studio Code 进行代码编辑和调试,并在 Windows 上的 Microsoft Edge 浏览器中运行容器。

在已安装WSL之后,安装Docker Desktop.

  1. 下载 Docker Desktop 并按照安装说明进行操作。(https://docs.docker.com/docker-for-windows/wsl/#download)
  2. 安装后,从 Windows 开始菜单启动 Docker Desktop,然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“设置”。
  3. 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。
  4. 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。
  5. 若要确认已安装 Docker,请打开 WSL 发行版(例如 Ubuntu),并通过输入 docker --version 来显示版本和内部版本号
  6. 通过使用 docker run hello-world 运行简单的内置 Docker 映像,测试安装是否正常工作。(如果$ docker run hello-world
    Unable to find image ‘hello-world:latest’ locally
    docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers),需要配置国内镜像源)
  7. 一些需要了解的有用 Docker 命令:
  • 通过输入以下命令列出 Docker CLI 中可用的命令:docker
  • 使用以下命令列出特定命令的信息:docker <COMMAND> --help
  • 使用以下命令列出计算机上的 docker 映像(此时仅为 hello-world 映像):docker image ls --all
  • 使用以下命令列出计算机上的容器:docker container ls --alldocker ps -a(如果没有 -a 显示全部标志,则仅显示正在运行的容器)
  • 使用以下命令列出有关 Docker 安装的系统范围的信息,包括 WSL 2 上下文中你可使用的统计信息和资源(CPU 和内存):docker info

使用 VS Code 在远程容器中开发

安装VS Code扩展

若要开始使用 Docker 和 WSL 2 开发应用,建议使用 VS Code 以及 WSL、Dev Containers 和 Docker 扩展。

  • 安装 VS Code WSL 扩展。 此扩展使你能够在 VS Code 中打开在 WSL 上运行的 Linux 项目(无需担心路径问题、二进制兼容性或其他跨 OS 的难题)。
  • 安装 VS Code Dev Containers 扩展。 此扩展使你能够打开容器内的项目文件夹或存储库,并利用 Visual Studio Code 的完整功能集在容器中执行开发工作。
  • 安装 VS Code Docker 扩展。 此扩展添加了从 VS Code 内生成、管理和部署容器化应用程序的功能。 (需要 Dev Containers 扩展才能使用容器作为你的开发环境。)

使用 Docker 为现有应用项目创建开发容器

  1. 对于此示例,我将在 Python 开发环境设置文档中使用适用于 Django 的 Hello World 教程中的源代码。如果想要使用自己的项目源代码,可以跳过此步骤。 若要从 GitHub 下载 HelloWorld-Django Web 应用,请打开 WSL 终端(例如 Ubuntu)并输入:git clone https://github.com/mattwojo/helloworld-django.git

  2. 在 WSL 终端中,将目录更改为此项目的源代码文件夹:

    Bash

    cd helloworld-django
    
  3. 通过输入以下内容,在本地 WSL 扩展服务器上运行的 VS Code 中打开项目:

    Bash

    code .
    

    通过检查 VS Code 实例左下角的绿色远程指示器,确认已连接到 WSL Linux 发行版。(WSL: Unbutu-24.04)

  4. 从 VS Code 命令面板 (Ctrl + Shift + P),输入:开发容器: 在容器中重新打开,因为我们使用的是已使用 WSL 扩展打开的文件夹。 也可使用“开发容器: 在容器中打开文件夹…”,以使用本地 \\wsl$ 共享(从 Windows 端)选择 WSL 文件夹。 有关更多详细信息,请参阅 Visual Studio Code 快速入门:在容器中打开现有文件夹。 如果这些命令在你开始键入时未显示,请检查并确保你已安装上面链接的 Dev Containers 扩展。VS Code 开发容器命令

  5. 选择要容器化的项目文件夹。 在我的示例中,它是 \\wsl\Ubuntu-20.04\home\mattwojo\repos\helloworld-django\VS Code 开发容器文件夹

  6. 将显示容器定义列表,因为项目文件夹(存储库)中还没有 dev container 配置。 显示的容器配置定义列表将根据项目类型进行筛选。 对于 Django 项目,我将选择 Python 3。VS Code 开发容器配置定义

  7. 系统将打开新的 VS Code 实例,开始生成新映像,生成完成后,将启动容器。 将看到出现新的 .devcontainer 文件夹,其中 Dockerfiledevcontainer.json 文件中包含容器配置信息。VS Code .devcontainer 文件夹

  8. 若要确认项目仍然连接到 WSL 和容器中,请打开 VS Code 集成终端 (Ctrl + Shift + ~)。 通过输入 uname 检查操作系统,并通过 python3 --version 检查 Python 版本。 可以看到,uname 返回为“Linux”,因此你仍然连接到 WSL 2 引擎,Python 版本号将基于容器配置,该配置可能不同于 WSL 发行版上安装的 Python 版本。

  9. 若要使用 Visual Studio Code 在容器内运行和调试应用,请首先打开“运行”菜单(Ctrl+Shift+D 或选择最左侧菜单栏上的选项卡)。 然后选择“运行和调试”以选择调试配置,并选择最适合项目的配置(在我的示例中,这将是“Django”)。 这会在项目的 launch.json 文件夹中创建一个 .vscode 文件,其中包含有关如何运行应用的说明。

    VS Code 运行调试配置

  10. 在 VS Code 中,选择“运行”>“开始调试”(或只按 F5 键)。 这会在 VS Code 中打开终端,并且你应会看到如下所示的结果:“正在 http://127.0.0.1:8000/ 启动开发服务器。使用 CONTROL-C 退出服务器。”按住 Control 键并选择显示的地址,以在默认 Web 浏览器中打开应用,并查看在其容器中运行的项目。

    运行 docker 容器的 VS Code

现在,已使用 Docker Desktop 成功配置了远程开发容器,该容器由 WSL 2 后端提供支持,可以使用 VS Code 对该容器进行编码、生成、运行、部署或调试。

Docker 镜像源设置

在Windows中,docker desktop – settings --docker engine中增加镜像源,例如:

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors":["https://docker.xuanyuan.me"]
}

然后点击"Apply & restart",之后,就可以在WSL中查看设置和拉取镜像了。

$ docker info
Client:Version:    28.0.4Context:    defaultDebug Mode: falsePlugins:
......Registry Mirrors:https://docker.xuanyuan.me/Live Restore Enabled: false

运行docker image测试:

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
Digest: sha256:0b6a027b5cf322f09f6706c754e086a232ec1ddba835c8a15c6cb74ef0d43c29
Status: Downloaded newer image for hello-world:latestHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

查看docker image

$ docker image ls
REPOSITORY                               TAG       IMAGE ID       CREATED        SIZE
hello-world                              latest    74cc54e27dc4   4 months ago   10.1kB

http://www.hkcw.cn/article/VqMsGurmOW.shtml

相关文章

《汇编语言》第12章 内中断——实验12 编写0号中断的处理程序

编写0号中断的处理程序&#xff0c;使得在除法溢出发生时&#xff0c;在屏幕中间显示字符串"divide error&#xff01;"&#xff0c;然后返回到DOS。 要求&#xff1a;仔细跟踪调试&#xff0c;在理解整个过程之前&#xff0c;不要进行后面课程的学习。 ;sy12.asm …

黑马k8s(十八)

一&#xff1a;安全认证 1.安全认证-概述 2.安全认证-认证方式 认证管理 3.安全认证-授权管理 因为没有授予角色deployment的权限&#xff0c;所以不能查看 4.安全认证-准入控制 二&#xff1a;DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的…

python:PyMOL 使用教程 及实用示例

安装参阅&#xff1a;开源版PyMol安装保姆级教程 百度网盘下载 提取码&#xff1a;csub 简介: PyMOL是一个Python增强的分子图形工具。它擅长蛋白质、小分子、密度、表面和轨迹的3D可视化。它还包括分子编辑、射线追踪和动画。 PyMol的名字来源于“Py”表示该软件基于Python这…

第十二节:第三部分:集合框架:List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理

List系列集合特点 List集合的特有方法 List集合支持的遍历方式 ArrayList集合的底层原理 ArrayList集合适合的应用场景 代码&#xff1a;List系列集合遍历方式 package com.itheima.day19_Collection_List;import java.util.ArrayList; import java.util.Iterator; import jav…

ZC-OFDM雷达通信一体化减小PAPR——SC-FDMA技术

文章目录 前言一、SC-FDMA 技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中&#xff0c;信号的传输由多个子载波协同完成&#xff0c;多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高于…

【算法】贪心算法

一、贪心算法基本思想 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从 整体最优考虑&#xff0c;它所作出的选择只是在某种意义上的局部最优选择。 我们希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不 能对所有问题都得到整体最优解&#xff08;O…

通义灵码深度实战测评:从零构建智能家居控制中枢,体验AI编程新范式

一、项目背景&#xff1a;零基础挑战全栈智能家居系统 目标&#xff1a;开发具备设备控制、环境感知、用户习惯学习的智能家居控制中枢&#xff08;PythonFlaskMQTTReact&#xff09; 挑战点&#xff1a; 需集成硬件通信(MQTT)、Web服务(Flask)、前端交互(React) 调用天气AP…

C 语言开发中常见的开发环境

目录 1.Dev-C 2.Visual Studio Code 3.虚拟机 Linux 环境 4.嵌入式 MCU 专用开发环境 1.Dev-C 使用集成的 C/C 开发环境&#xff08;注&#xff1a;较老旧方案&#xff0c;适合基础学习&#xff09; 2.Visual Studio Code 结合 C/C 扩展 GCC/MinGW 编译器&#xff0c;配置…

关于用Cloudflare的Zero Trust实现绕过备案访问国内站点说明

cloudflare 是一个可免费的CDN&#xff0c;CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;加速国内网站&#xff0c;通常是已备案的。Zero Trust类似FRP&#xff0c;可以将请求转发到目标服务器。在使用Zero Trust绕过备案访问国内网站需要&…

火语言UI组件--播放器

【组件功能】&#xff1a;引用网络播放地址的视频播放器。 样式预览 设置 基础设置 属性名称属性释义输入值类型网络资源地址(url)播放视频的网络地址字符串类型音量(volume)播放视频的音量&#xff08;参考值&#xff1a;0 ~ 1)浮点型(Float)自动播放(autoplay)视频是否自动…

Linux基本指令

文章目录 1.ls指令1.1 ls -l指令1.2 ls-a指令1.2.1文件的类型1.2.2隐藏文件1.2.3[.]\[..]的含义 1.3 ls -d指令1.4 ls-F指令1.5ls指令子功能大全 2.pwd指令2.1路径分割符2.2/根目录 3.mkdir指令3.1 mkdir-p3.2mkdir常用功能 4.cd指令4.1多叉树概念4.2绝对/相对路径4.2.1绝对路径…

桥 接 模 式

在玩游戏的时候我们常常会遇到这样的机制&#xff1a;我们可以随意选择不同的角色&#xff0c;搭配不同的武器。这时只有一个抽象上下文的策略模式就不那么适用了&#xff0c;因为一旦我们使用继承的方式&#xff0c;武器和角色总有一方会变得难以扩展。这时&#xff0c;我们就…

leetcode3128. 直角三角形-medium

1 题目&#xff1a;直角三角形 官方标定难度&#xff1a;中 给你一个二维 boolean 矩阵 grid 。 如果 grid 的 3 个元素的集合中&#xff0c;一个元素与另一个元素在 同一行&#xff0c;并且与第三个元素在 同一列&#xff0c;则该集合是一个 直角三角形。3 个元素 不必 彼此…

数据资产入表的数据质量评估

在数据资产入表过程中&#xff0c;对数据质量进行全面、系统的评估至关重要。下面将从数据完整性评估、数据准确性校验、数据一致性检查、数据时效性分析、数据可信度评价、数据规范性审核、数据安全性检测和数据可用性考察等方面&#xff0c;对数据资产入表的数据质量进行详细…

精简多功能办公软件

今天向大家推荐一款功能强大的实用软件。 软件介绍 这款名为"一个MH"的软件界面简洁明了&#xff0c;虽然体积小巧&#xff0c;却集成了多种实用功能&#xff0c;相当于整合了多个软件的功能于一身。软件将各类工具进行了系统分类&#xff0c;并配备了便捷的搜索功…

windows+APP PDFgear 免费工具

在处理PDF文件中&#xff0c;我们会遇到合并&#xff0c;编辑旋转、添加水印、转换格式等&#xff0c;这些在wps上是需要会员才能享受的功能&#xff0c;今天他来了--PDFgear&#xff0c;免费、离线、无任何附加条件的 PDF 编辑器。 文件大小&#xff1a;100M左右。 页面展示…

【深度学习】15. Segment Anything Model (SAM) :基于提示的分割新时代

Segment Anything Model (SAM) &#xff1a;基于提示的分割新时代 基本介绍 The first foundation model for promptable segmentation. Segment Anything Model&#xff08;简称 SAM&#xff09;是 Meta AI 于 2023 年提出的一种通用型图像分割基础模型。与以往分割模型不同&…

Rk3568驱动开发_GPIO点亮LED_12

需求&#xff1a; 用配置寄存器方式控制点灯非常原始&#xff0c;现在采用更方便的Linux提供的pctrl和gpio子系统编写字符驱动 1.设备树配置&#xff1a; 现将开发板中呼吸灯关闭掉防止占用到我需要使用的引脚 /* Narnat 2025-5-29 RK3568 GPIO 无需设置pinctrl*/gpioled{co…

Compose原理 - 整体架构与主流程

一、整体架构 在官方文档中&#xff08;Jetpack Compose 架构层 | Android Developers&#xff09;&#xff0c;对Compose的分层有所阐述&#xff1a; 其中 Runtime&#xff1a;提供Compose的基础运行能力&#xff0c;包括State、Side-effects、CompositionLocal、Compositio…

LeetCode 高频 SQL 50 题(基础版)之 【聚合函数】部分

题目&#xff1a;620. 有趣的电影 题解&#xff1a; select * from cinema where description !boring and id%21 order by rating desc题目&#xff1a;1251. 平均售价 题解&#xff1a; select p.product_id product_id,round(ifnull(sum(p.price*u.units)/sum(u.units),0)…