windows 使用wsl安装docker

news2024/11/24 10:27:06

前言

       很多情况下代码开发需要依赖 Linux 系统,比如安装 Docker 容器来实现代码隔离,然而问题是大部分同学的电脑都是 Windows 系统,这时就会出现大量报错,经历过的同学一定是边踩坑边落泪。

如何免费拥有一台 Linux 服务器呢?

  • 薅各大云厂商的羊毛,很多厂商对学生都会有优惠,羊毛不薅白不薅,不过问题是不可能让你一直白嫖啊,你总有花钱的时候。
  • 在自己的 Windows 电脑上安装一个 Linux 子系统,随时随地都能本地跑代码,装好一次一劳永逸,针对初学 Linux 开发来说足够使用了。

那么,如何在 Windows 电脑上安装 Linux 子系统呢? 这里也有两种方式:

  • 安装虚拟机软件,比如 VMware Workstation Player
  • 使用自带的WSL,Windows Subsystem for Linux

对于早期的 Win 操作系统,通常都会采用第一种方式进行安装,而对于 Win10 Win11 系统来说,笔者优先推荐第2种方式,原因下面说,本篇文章我会带大家实践第 2 种方式,分分钟时间搞定一台 Linux 服务器!

一、 什么是WSL和WSL2

WSL:全称为Windows Subsystem for Linux,这是微软官方开发的适用于 Linux 的 Windows 子系统,可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境,且不会产生传统虚拟机或双启动设置开销。

WSL2:具有WSL1的优点,但使用实际的Linux内核,因而性能更好。

WSL有什么优势:

  • VMware等虚拟机软件资源消耗大、启动慢、运行效率低。
  • WSL几乎能运行完整的操作系统,资源消耗小、启动快、切换快

对于没有用过虚拟机软件安装Linux系统的小伙伴而言,直接无脑用WSL2完事!

二、如何安装

2.1、开启虚拟化

检查cpu是否开启了虚拟化功能,一般是默认开启的,如果没有,就需要进入bios界面打开2

2.2、打开控制面板,进入windows程序和功能,勾选虚拟化平台跟适用于windows的linux子系统

如果没有Hyper-V选项的,按照以下步骤

  • 添加一个文件Hyper-V.bat 添加以下内容,并双击运行后重启电脑
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause

 查看自己电脑的windows版本是否符合WSL2的要求

        查看自己的操作系统版本:win+R打窗口,输入winver便可得到操作系统的内部版本如下:

如果要使用命令行

 启用适用于Windows的Linux子系统,则以管理员身份打开windows powershell,输入如下指令: 

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

 启动虚拟机功能,在安装WSL2之前,必须启动虚拟机功能,同样在power shell中输入如下指令:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

2.3、 根据提示操作,然后重启电脑

2.4、下载Linux内核更新包

  • 检查是否有wsl , 执行wsl --help 命令查看
    • 如果有, 不用在重复安装.设置wsl2默认版本即可,wsl --set-default-version 2 通过该命令设置
    • 如没有,则需下载安装 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

点击适用于 x64 计算机的 WSL2 Linux 内核更新包下载后,安装即可。

2.5、将 WSL 2 设置为默认版本

在powershell中输入如下指令:

wsl --set-default-version 2

便可将wsl的版本设置为wsl2。这里为了设置生效,重启计算机。

2.6、安装Ubuntu-20.04

我们想要在D盘安装wsl,而不是在C盘,装在C盘虽然启动要快一点,但是不建议,C盘尽量保持干净,任何软件也不要装在C盘,不然后面你的电脑会很卡,后续他要安装的所有东西都会在C盘,后期马上爆红的。具体步骤如下:

2.6.1、在D盘创建文件夹

现在D盘下创建一个名为linux的文件夹。注:这个文件夹的名字以及路径可以自由修改。

2.6.2、下载Ubuntu-20.04

在powershell中进入linux文件夹内,输入如下指令:

Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing

这里的https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx是可变的,根据你想要安装的版本,选择不同的包链接。在这个网址列出的不同Linux子系统的链接地址。回车即可进行下载。

2.6.3、启动Ubuntu-20.04

在powershell中输入如下指令,便可成功创建启动wsl2。

Rename-Item .\Ubuntu20.04.appx Ubuntu.zip
Expand-Archive .\Ubuntu.zip -Verbose
cd .\Ubuntu\
.\ubuntu2004.exe

运行.exe后需要设置用户名和密码,设置完成后即可成功进入wsl

后续如何打开和关闭系统呢:

# 打开
cd D:\linux\Ubuntu 
.\ubuntu2004.exe
# 关闭
wsl --shutdown

也可以直接切换控制台,点击下拉箭头,找到Ubuntu

 4. 查看wsl的版本

在powershell中输入如下指令查看wsl的版本:

wsl -l -v

 查看Ubuntu是否启动

查看文件目录

df -h

注意

  1. 在上述所有的过程中使用powershell的地方,都要使用管理员身份打开powershell。
  2. 如果把安装的Linux子系统搞坏了,想要删除怎么办,同样在powershell中输入如下指令便可删除:
 wsl --unregister Ubuntu-20.04

三、登陆Linux安装软件

3.0. 如何查看 IP 地址

  • Windows: 终端输入 ipconfig
  • Linux: 有如下三种方式
ifconfig # 需要 sudo apt install net-tools
hostname -I
ip addr show eth0

 3.1 VScode如何访问Linux

 打开vscode - 安装wsl插件,然后点击左下角的ssh -> Connect to WSL,可以登陆这台 Linux 服务器了

 3.2 安装 ssh(远程登陆+文件传输)

Linux 中安装 ssh:

sudo apt install openssh-server
sudo service ssh start # 启动
sudo service ssh status # 查看启动状态

远程登陆:

ssh user_xxx@172.17.4.63

文件传输:

scp xxx.file user_xxx@172.17.4.63:~/datasets/

此时远程登陆和文件传输,都会出现如下报错:

user_xxx@172.17.4.63: Permission denied (publickey).

这是因为 Linux 拒绝访问,有两种方式解决:

  • 开启密码验证
  • 使用密钥认证
3.2.1 开启密码验证

在 Linux 服务器上,vim 打开/etc/ssh/sshd_config,然后修改其中的PasswordAuthentication值为 yes ,然后重启 ssh 服务。

sudo vim /etc/ssh/sshd_config  # PasswordAuthentication改为yes
sudo service ssh restart

按  i  进行编辑 ,Esc退出编辑,输入 :wq 退出编辑文件

3.2.2 使用密钥认证

如果你觉得每次都要开启密码认证,非常麻烦,可以考虑使用密钥认证。你需要在Windows机器上生成一个SSH密钥对,然后将公钥添加到 Linux 的~/.ssh/authorized_keys文件中。 具体而言:

首先需要下载并安装Git for Windows,然后打开Git Bash终端:

# windows上生成SSH密钥对
ssh-keygen

在.ssh文件夹中生成了密钥文件,其中id_rsa是私钥,id_rsa.pub是公钥。然后将id_rsa.pub中的内容复制到 Linux 的~/.ssh/authorized_keys文件中。

3.3 安装 Docker

先安装一些依赖

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

添加docker官网 GPG 密钥、设置stable 仓库

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

正确执行为会打印“OK”。

过程中可能存在问题:报错

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to download.docker.com:443 
gpg: no valid OpenPGP data found.

这说明连接异常,更换阿里云进行配置GPG 密钥(如下图),以及设置stable仓库

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository  \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安装 Docker
sudo apt-get update
sudo apt install docker-ce docker-ce-cli containerd.io

安装完成,Docker 服务将会自动启动。你可以输入下面的命令,验证它:

docker --version
sudo systemctl status docker

但安装过程中,可能报错如下:

invoke-rc.d:syntax error: unknown option ".-skip-systemd-native"
dpkg: error processing package docker-ce(--configure):
installed docker-ce package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
docker-ce
E:Sub-process /usr/bin/dpkg returnedan error code (1)
————————————————

则需执行以下操作:

cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get install docker-ce docker-ce-cli containerd.io 

 查阅安装的版本

如果有需要的话,安装历史版本的docker

apt list -a docker-ce         ## 查看 Docker 软件源中所有可用的版本
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io

Docher 版本的固定

如果你想阻止 Docker 自动更新,锁住它的版本:

<span style="color:#000000"><span style="background-color:#fafafa"><code class="language-bash"><span style="color:#dd4a68">sudo</span> apt-mark hold docker-ce</code></span></span>

设置非root用户的权限

默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。
想要以非 root 用户执行 Docker 命令,需要将用户添加到 Docker 用户组,该用户组在 Docker_ce 软件包安装过程中被创建。输入:

sudo usermod -aG docker $USER   ## $USER是一个环境变量,代表当前用户名。

登出,并且重新登录,以便用户组会员信息刷新。

安装docker-compose

可选,安装命令如下。(实际上就是从github的releases中下载对应系统版本的docker-compose程序文件,授予执行权限即可)

sudo curl -L “https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-$(uname -m)” -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version 

Docker的测试

Docker Hub是一个云端服务,主要用来储存 公有和私有源中的 Docker 镜像。默认情况下,Docker可以从 从 Docker Hub 拉取镜像。
运行个docker的hello-word,执行docker命令如下:

docker container run hello-world

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

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

相关文章

什么是即时通讯平台

在当今数字化时代&#xff0c;高效的沟通和协作是企业成功的关键。为了满足企业的沟通需求&#xff0c;即时通讯平台应运而生。WorkPlus作为一款企业级即时通讯平台&#xff0c;提供了丰富的功能和安全性&#xff0c;助力企业实现高效协作、数字化办公以及推动业务发展。本文将…

为什么直播要用RTMP?

为什么要选RTMP 直播使用RTMP&#xff08;Real-Time Messaging Protocol&#xff09;协议的原因主要有以下几点&#xff1a; 1. 低延迟特性 RTMP被设计为实时消息传递协议&#xff0c;通过优化传输机制&#xff0c;可以实现较低的传输延迟。这对于直播来说至关重要&#xff…

LeetCode_sql_day26(184,1549,1532,1831)

描述 184.部门工资最高的员工 表&#xff1a; Employee ----------------------- | 列名 | 类型 | ----------------------- | id | int | | name | varchar | | salary | int | | departmentId | int | -----------------…

22章 开发高效算法

1.编写一个程序&#xff0c;提示用户输入一个字符串&#xff0c;然后显示最大连续递增的有序子字符串。分析你的程序的时间复杂度。 import java.util.Scanner;public class Test {public static void main(String[] args) {System.out.println("请输入字符串&#xff1a…

这个公司可以做点什么呢?

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

国学盛典 致敬先贤 《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕

9月10日&#xff0c;《老子与道德经》纪录片研讨会在北京善品堂国学馆圆满落幕。中国著名表演艺术家、曾饰演央视86版电视剧《西游记》中“孙悟空”的六小龄童先生与两百余人传统文化传播者、践行者、爱好者齐聚一堂&#xff0c;共同交流。本次会议由中国文化促进会福文化工作委…

python-在PyCharm中使用PyQt5

文章目录 1. 安装 PyQt5 和QtTools2. QtDesigner 和 PyUIC 的环境配置2.1 在 PyCharm 添加 Create Tools2.2 添加 PyUIC 工具 3. 创建ui界面4. 使用python调用ui界面参考文献 1. 安装 PyQt5 和QtTools QT 是最强大的 GUI 库之一&#xff0c;PyQt5 是 Python 绑定 QT5 应用的框…

phpstudy 建站使用 php8版本打开 phpMyAdmin后台出现网页提示致命错误:(phpMyAdmin这是版本问题导致的)

报错提示&#xff1a; 解决方法&#xff1a;官网下载phpmyadmin 5.2.1版本。 下载地址&#xff1a;phpMyAdmin 将网站根目录phpMyAdmin4.8.5里面的文件换成 官网下载的5.2.1版本即可。 重启网站&#xff0c;打开phpMyAdmin后台即可&#xff08;若打不开更改 mysql密码即可&am…

传知代码-KAN卷积:医学图像分割新前沿

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 在本文中深入探讨KAN卷积在医学图像分割领域的创新应用&#xff0c;特别是通过引入Tokenized KAN Block&#xff08;Tok Kan&#xff09;这一突破性设计&#xff0c;将深度学习中的图像分割技术推向了新的高…

代理导致的git错误

问题&#xff1a; 今天在clone时出现如下错误&#xff1a; fatal: unable to access https://github.com/NirDiamant/RAG_Techniques.git/: Failed to connect to 127.0.0.1 port 10089 after 2065 ms: Couldnt connect to server真是让人感到奇怪&#xff01;就在前天&#…

Typora安装,使用,图片加载全流程

文章目录 前言&#xff1a;安装&#xff1a;破解&#xff1a;使用typora&#xff1a;关于CSDN加载不出图片&#xff1a;创建OSS&#xff1a;设置PicGo&#xff1a; 前言&#xff1a; ​ Typora是一款非常流行的Markdown编辑器&#xff0c;简单来说就是可以方便我们写博客。拿我…

Linux基础---07文件传输及解决yum安装失效的方法

Linux文件传输地图如下&#xff0c;先选取你所需的场景&#xff0c;若你是需要Linux和Linux之间传输文件就查看SCP工具即可。 一.下载网站文件 前提是有网&#xff1a; 检查网络是否畅通命令&#xff1a;ping www.baidu.com&#xff0c;若有持续的返回值就说明网络畅通。Ctr…

如何建立一个Webservice WSDL的简单例子(完整例子)

一&#xff1a;根据对方给的wsdl 的接口地址创建Web 的逻辑端口 1&#xff1a;例如这个用C#写的Web 2.我们需要在SAP里建立一个Service Consumers 的服务记得后缀要加?wsdl 2&#xff1a;然后就会生成对应方法的出参 入参 返回的消息根据接口方法来判断 二&#xff1a;如何通…

day21JS-axios数据通信

1. 什么是axios axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端&#xff0c;简单的理解就是ajax的封装&#xff0c;只不过它是Promise的实现版本。 特性&#xff1a; 从浏览器中创建 XMLHttpRequests从 node.js 创建 http 请求支持 Promise API拦截请求和响应转…

基于Java的固定资产管理系统

基于Java的固定资产管理系统是一个实用的应用程序&#xff0c;用于跟踪和管理公司的资产。这种系统可以包括资产的采购日期、位置、状态、折旧等信息。下面是一个简单的固定资产管理系统的设计概述&#xff0c;以及一些关键功能模块的实现思路。 系统设计概览 用户管理&…

2-97 基于matlab的小波变换模量最大值 (WTMM) 方法进行图像边缘检测

基于matlab的小波变换模量最大值 &#xff08;WTMM&#xff09; 方法进行图像边缘检测。利用小波基函数的局部化和振荡特性来检测图像中的边缘&#xff0c;沿每个像素的梯度方向搜索局部最大值&#xff0c;保留局部最大值&#xff0c;抑制其他系数&#xff0c;实现边缘检测。程…

一文入门生成式AI(理解ChatGPT的原理)

一、什么是生成式AI&#xff1f; 以ChatGPT为代表的生成式AI&#xff0c;是对已有的数据和知识进行向量化的归纳&#xff0c;总结出数据的联合概率。从而在生成内容时&#xff0c;根据用户需求&#xff0c;结合关联字词的概率&#xff0c;生成新的内容。 可以这么联想&#x…

(9) protobuf 与cmake

文章目录 概要整体架构流程代码优化 概要 protobuf的安装与用cmake编译protobuf程序 整体架构流程 安装protobuf3 21.12&#xff0c;最新版本好像要用到一个新的库&#xff0c;有点麻烦。 https://github.com/protocolbuffers/protobuf/releases/tag/v21.12 all和cpp后缀的包…

python植物大战僵尸项目源码【免费】

植物大战僵尸是一款经典的塔防游戏&#xff0c;玩家通过种植各种植物来抵御僵尸的进攻。 源码下载地址&#xff1a; 植物大战僵尸项目源码 提取码: 8muq

【前端】prop传值的用法

prop配置项的作用是让组件接收外部传过来的值。 组件标签上传值给vue组件对象 <script> export default {name: HelloWorld,data(){return{ }},props:[name,age] #简单接收 } </script>方式2:利用对象方式设置数据类型进行类型限制 props:{name:String…