win10 的 Linux 子系统中安装 docker

在 win10 的 Linux 子系统中实现 docker 的安装使用

1、安装 WSL2

此处注意,一定是 WSL2!wsl 坑太多,经常有莫名错误!

1. 配置 WSL2

  • 开启WSL 以管理员运行 Powershell:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

之后重启计算机。

  • 启用“虚拟机平台”可选组件:
    以管理员运行 Powershell:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

之后重启计算机。

  • 默认启用 WSL2
    运行 Powershell:
wsl --set-default-version 2

2. 安装配置 Ubuntu

  • 安装 Ubuntu 打开 Microsoft Store,搜索 ubuntu 并安装。
    之后启动刚刚安装的 Ubuntu。

  • 设置 Ubuntu 系统的 root 密码 Ubuntu 的默认 root 密码是随机的,即每次开机都有一个新的 root 密码。要修改密码,可在终端输入命令:

$ sudo passwd

输入当前用户的密码,终端会提示我们输入新的密码并确认,此时的密码就是 root 新密码。

2、安装 Docker

以管理员身份运行 Ubuntu,在终端中依次执行以下命令:

$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get update
$ sudo apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      software-properties-common
$ 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 \
     $(lsb_release -cs) \
     stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce

3、启动运行

sudo service docker start

查看 docker 版本:

$ docker -v

通过运行hello-world映像验证是否正确安装了Docker CE:

$ sudo docker run hello-world

4、其他问题

  • 安装指定版本的docker
$ sudo apt-get install docker-ce=<VERSION>

其中<VERSION>可以通过以下命令查询:

$ apt-cache madison docker-ce
  • 报没有权限的错误
    如:“Got permission denied while trying to connect to the Docker daemon socket at unix:///var//run/docker.sock: …..”
    从提示可以看出问题在于当前用户的权限不足以连接“/var/run/docker.sock”这个套接字文件,可以将普通用户加入 docker 用户组来解决:
$ sudo gpasswd -a <username> docker  #将普通用户username加入到docker组
$ newgrp docker  #更新docker组
  • 忘记 Ubuntu 用户密码
    1、 关闭 Ubuntu 窗口
    2、 打开 Powershell 或 cmd, 以 root 默认登陆 wsl -u root
    3、 别关,在这个cmd窗口内输入 wsl 进入
    4、 输入 passwd <your_username> ,确认密码
    5、 关闭 WSL exit

  • 更换 docker 镜像源

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://sx1pmhon.mirror.aliyuncs.com"]
}
EOF

sudo service docker restart