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

windows 使用wsl安装docker

前言

       很多情况下代码开发需要依赖 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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • POD内的容器之间的资源共享
  • CLUSTERDOWN Hash slot not served问题复现
  • 【隐私计算】Paillier半同态加密算法
  • node前端开发基本设置
  • rust GUI框架Tauri入门——基于vanilla.js
  • 【C语言】联合体枚举的讲解
  • 02请求响应(简单参数)
  • Java学习Day42:骑龙救!(springMVC)
  • PostMan使用变量
  • 在mac中如何使python3作为默认版本
  • v-for循环中使用‘v-model‘ directives cannot update the iteration variable itself
  • JavaSE基础——第三章 运算符
  • 如何在webots中搭建一个履带机器人
  • 什么是外贸专用路由器?
  • 微信小程序----日期时间选择器(自定义时间精确到分秒)
  • [译]如何构建服务器端web组件,为何要构建?
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js作用域和this的理解
  • Logstash 参考指南(目录)
  • magento2项目上线注意事项
  • MQ框架的比较
  • node和express搭建代理服务器(源码)
  • node学习系列之简单文件上传
  • React-redux的原理以及使用
  • 程序员该如何有效的找工作?
  • 翻译--Thinking in React
  • 京东美团研发面经
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 手机端车牌号码键盘的vue组件
  • 我有几个粽子,和一个故事
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 带你开发类似Pokemon Go的AR游戏
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # .NET Framework中使用命名管道进行进程间通信
  • (1)svelte 教程:hello world
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Sql Server 保留几位小数的两种做法
  • (自适应手机端)行业协会机构网站模板
  • .NET BackgroundWorker
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 读取 JSON格式的数据
  • .NET 事件模型教程(二)
  • .net 中viewstate的原理和使用
  • .net对接阿里云CSB服务
  • .NET构架之我见
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)