Debian WSL 2 安装使用 Docker
Docker 作为目前程序员的必备技能,已经被广泛使用。使用 WSL2 直接安装运行社区版本 Docker ,比安装 Docker Desktop 更加节省空间,且启动速度更快。本文将介绍如何在 Debian WSL2 上安装使用社区版 Docker。
安装 Docker 其实主要关注几个问题:1. 安装源的国内镜像使用。 2. Docker Image 仓储的国内镜像配置。 3. WSL2 启动 Docker 时的兼容性设置。
安装
Docker 的国内软件源有很多,各大镜像站都有,如:
http://mirrors.cloud.tencent.com/docker-ce / http://mirrors.aliyun.com/docker-ce / http://mirrors.ustc.edu.cn/docker-ce
安装时照着官方文档 Install Docker Engine on Debian 来操作就行了,只是将相关网站替换为镜像网址。以阿里云软件源为例,安装的命令行如下:
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
WSL2 兼容性配置
执行了上述命令,你应该已经安装完成了,可是执行 service docker start 应该是会报错的,你还需进行一下兼容性设置。主要是创建 fstab 文件,以及设置 iptables 为 legacy 模式。以使 Docker 能够在 WSL2 上正常启动。
sudo apt install iptables
sudo touch /etc/fstab
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
此时你已经可以通过 root 权限使用 service docker start 启动 Docker 服务,并正常使用。
权限设置
如果你的默认账户不是 root,如果想要不通过 sudo 使用 docker 命令,你还需要将用户加入 docker 用户组。
sudo usermod -aG docker $USER && newgrp docker
在 WSL2 中,docker 发布的服务端口可以正常映射到宿主机的 localhost 的相同端口上,和正常使用 Docker Desktop 一样。
daemon.json 配置
Docker 镜像仓储国内访问速度不佳,国内镜像仓储代理服务有很多,阿里云,daocloud,中科大,网易都有。这里列几个:
https://docker.mirrors.ustc.edu.cn
http://f1361db2.m.daocloud.io
http://hub-mirror.c.163.com
除了镜像加速外,我一般还会设置日志文件的 max-size ,以及 cgroupdriver 。
max-size 配置可以防止日志文件过大
native.cgroupdriver 可选 cgroupfs 和 systemd 两个选项,详见 (Docker 文档的 Options for the runtime 小节)[https://docs.docker.com/engine/reference/commandline/dockerd/#docker-runtime-execution-options]。systemd 用于 cgroup v2 host ,而 wsl 由于目前不兼容 systemd ,只能选择cgroupfs 。在生产环境的服务器上,应优先使用 systemd 选项。虽然 cgroupfs 目前是docker的默认选项,我还是会特别指定它。
sudo mkdir /etc/docker/
MIRROR=https://docker.mirrors.ustc.edu.cn
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["$MIRROR"],
"insecure-registries": ["192.168.196.110:5000"]
}
EOF
至此,本教程结束了,你可以通过 sudo service docker start
启动 docker,enjoy 。
本文采用 知识共享署名 4.0 国际许可协议 进行许可