zoukankan      html  css  js  c++  java
  • wsl2安装Linux原生Docker

    其实wsl安装Docker相关内容我已经在wsl整合k8s的相关内容中分享过了,但是为了方便各位小伙伴和自己查阅,我今天又做一个一次整理汇总,形成一个专门的文档,算是对之前内容回顾和总结吧。

    wsl的那些事

    WSL有所了解的小伙伴应该都知道,关于wsl其实是有两个版本的,而且官方文档也给出了详细的对比:

    详细对比可以看下官方说明:

    https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions
    

    简单总结下就是:

    • wsl2有完整的Linux内核,可以支持原生的Linux应用,甚至是运行Liunx GUI应用
    • wsl2相比wsl文件IO性能提升,在文件密集型操作(如 git 克隆、npm 安装、apt 更新、apt 升级等)中的速度都明显更快
    • wsl2有一些缺点:
      • 不能访问从 Windows 装载的文件
      • 不支持 同一个项目WindowsLinux 进行交叉编译
      • 不支持串行端口和USB 设备访问
      • WSL 2 的内存使用量会随使用而缩放

    不过windowswsl2之间是可以实现便捷的文件传输的,只是他们之间的传输类似于虚拟机的文件传输,是基于网络进行的。如果我们需要在windows访问wsl中的文件,直接通过文件管理器访问\\wsl$,然后选择对应的系统即可:

    准备工作

    daemonize安装配置

    安装daemonize是为了让我们的wsl支持systemctl命令,然后激活Systemd ,这些命令在后面启动docker服务、创建集群的时候都要用到。

    安装命令也很简单(我一直觉得linux安装软件比windows方便,一行命令就完成安装,它不香吗):

    sudo apt install daemonize #第二种方式执行
    sudo apt install -yqq fontconfig daemonize # 第一种方式需要执行
    

    因为我已经安装过了,显示得可能和你不一样:

    这里有两种方式。需要注意的是第一种方式需要多安装一个软件包:fontconfig

    第一种方式

    第一种方式需要创建一个脚本,我们直接通过vim创建:

    sudo vim /etc/profile.d/00-wsl2-systemd.sh
    

    然后将如下内容写入,保存

    # Create the starting script for SystemDvi /etc/profile.d/00-wsl2-systemd.sh
    SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
    if [ -z "$SYSTEMD_PID" ]; then   
      sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target   
      SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
    fi
    if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then 
       exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
    fi
    

    然后关闭当前Terminal,重新打开。

    第二种方式

    下面是第二种方式,这行命令是为了激活我们的systemd命令

    sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
    
    注意

    我推荐第一种,第二种虽然第一次是ok的,但是在实际使用中发现,wsl重启后(或者电脑重启),第二种方式执行docker命令的时候,会报下面的错,而且我还没找到解决方案:

    安装原生Docker

    这里安装的是Linux原生的docker,并非是基于windows环境的,安装完成后,你就可以在wsl使用原生的docker

    安装依赖

    安装软件包以允许 apt 通过 HTTPS 使用存储库

    # 安装 Docker CE
    ## 设置仓库
    ### 安装软件包以允许 apt 通过 HTTPS 使用存储库
    sudo apt-get update && sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    

    这里是安装多个软件的方式,上面总共安装了四个软件包,软件包直接用空格分割。

    添加docker官方发密钥
    ### 新增 Docker 的 官方 GPG 秘钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    
    添加docker镜像地址
    ### 添加 Docker apt 仓库
    add-apt-repository \
      "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) \
      stable"
    

    这里会把它添加进/etc/apt/sources.list文件中。

    安装docker

    和上面一样,安装多个软件。

    ## 安装 Docker CE
    sudo apt-get update && sudo apt-get install containerd.io   docker-ce   docker-ce-cli -y
    
    配置docker

    这里主要是设置docker的镜像仓库的镜像地址(有点绕,主要是国内下载镜像慢,所以需要改成网易等国内的镜像地址)

    sudo vim /etc/docker/daemon.json
    

    前面忘记说了,加sudo就是以管理员运行,因为/etc文件夹权限比较高,普通用户是没法修改的。然后加入如下内容:

    {
      "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/", "https://hub-mirror.c.163.com/", "https://reg-mirror.qiniu.com"],
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2"
    }
    
    启动docker

    如果前面安装daemonize采用的第一种方式,就通过下面的方式启动docker

    # 启动
    service docker start
    # 重启
    service docker restart
    # 停止
    service docker stop
    

    否则下面的命令,如果上面这种方式无法启动,也可以通过下面的命令试下(万一好了呢,病急乱投医呗):

    mkdir -p /etc/systemd/system/docker.service.d
    
    # 重启 docker.
    systemctl daemon-reload
    # 重启
    systemctl restart docker
    # 启动
    systemctl start docker
    

    好了,以上就是wsl2安装原生Linux Docker的所有内容了,感兴趣的小伙伴,可以亲自动手实践下。

  • 相关阅读:
    NET开源框架(转载)
    数据行转列的应用(json数据源)
    防止通过URL下载文件
    jquery中的$.post()方法无法给变全局变量的问题
    页面乱码问题的解决方案
    在mvc中使用Ninject进行依赖注入
    在mvc4.0中使用json数据
    使用thinkphp3.2中的验证码功能
    ThinkPHP中邮件发送功能
    ASP.NET页面运行机制
  • 原文地址:https://www.cnblogs.com/caoleiCoding/p/15412922.html
Copyright © 2011-2022 走看看