Docker容器技术已经成为不可阻挡的技术主流。然而开发者们的好帮手windows中直接安装docker,部署起来的项目却慢的要死。

究其原因或许还是windows文件系统与Docker 容器之间复杂的挂载关系。而解决方案则是将全套环境移入wsl2中。

环境部分

wsl2 环境:Ubuntu

  • windows功能中打开:
    • 适用于Linux的Windows子系统
    • 虚拟机平台
    • Windows虚拟机监控程序平台
  • 点击确定,点击立即重新启动
  • 打开微软的Microsoft Store,搜索Ubuntu,选择一款安装。
  • 安装完成后打开Ubuntu,稍等几分钟后提示:
    • Enter new UNIX username:
  • 输入要创建的用户名和密码即可完成Ubuntu的安装。不过此时还有另一种操作方式:
  • 不输入用户名,直接关闭Ubuntu窗口,再次打开就会以无密码的root用户进入Ubuntu系统。
  • 从此以后所有使用此Ubuntu终端时都不需要密码与sudo。代价是相应的用户权限管理用户分组之类的自然也没了。

iptables

  • wsl2中安装的docker还存在iptables问题,需要替换成iptables-legacy
  • Ubuntu中运行以下命令
    • iptablesiptables-legacy替换:
1
update-alternatives --set iptables /usr/sbin/iptables-legacy
  • 开启 ipv4 的包转发功能:
1
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
  • 用管理员模式启动PowerShell,重启wsl2
1
wsl --shutdown

docker

  • 虽然系统是新装的,为了以防万一还是先卸载一下旧版本的docker
1
apt-get remove docker docker-engine docker.io containerd runc
  • 设置存储库
    • 更新软件包索引并安装软件包以允许使用基于 HTTPS 的存储库:
1
2
apt-get update

1
2
3
4
5
apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
  • 添加Docker的官方GPG密钥:
1
mkdir -p /etc/apt/keyrings
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  • 使用以下命令设置存储库:
1
2
3
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • 更新包索引
1
apt-get update
  • 若运行时遇到GPG错误,可能是默认掩码配置的不正确,需要执行一下命令更新公钥文件
1
chmod a+r /etc/apt/keyrings/docker.gpg
1
apt-get update
  • 安装
1
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  • 启动
1
service docker start
  • 登录(可选)
1
docker login

按要求写入用户名与密码即可。注意是用户名,写邮箱无效。若还没有Docker账户,点击注册

  • 验证(可选)
    • 通过运行hello-world映像验证Docker安装是否成功:
1
docker run hello-world