背景
去你妈的docker-desktop
在今年寒假的时候,我买了3550h的小主机用作个人服务器搭建一些服务,选择了win+wsl的组合,为了当个懒狗所以用了docker+1panel面板,当时网上的教程包括docker官网的教程都是用docker-desktop,最开始简洁的设置和有ui界面确实很nice,但是用到后面
而且docker-deskto默认且只能装在c盘,这就导致
我c盘红的跟我血压一样
更重要的是docker-desktop就跟半成品一样,基本上稳定一周报一次错,我已经不知道这玩意报错过多少次了
so
docker-desktop,f**k u
在wsl中装docker
卸载所有之前相关的docker
这一步可能会导致所有数据丢失,请一定做好备份
先卸载docker-desktop,建议用geek uninstaller
然后重启wsl
powershell中输入
wsl --shutdown
然后点击你的linux那个exe就可以直接开一个有有Linux的cmd窗口
或者
wsl -d <你的linux名称>
在那里面输入
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get remove docker-ce docker-ce-cli containerd.io
然后删除垃圾数据
rm -r $HOME/.docker/desktop
sudo rm /usr/local/bin/com.docker.cli
sudo apt purge docker-desktop
安装docker
安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
添加gpg key(内容为ubuntu,如果你是debian就自行把链接中的ubuntu改成debian就行)
#添加 Docker 官方gpg key (可能国内现在访问会存在问题)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加源
#Docker官方源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新源
sudo apt update
sudo apt-get update
安装
#docker本体
sudo apt install docker-ce docker-ce-cli containerd.io
#docker-compose
sudo apt install docker-compose
安装Docker 命令补全工具
sudo apt-get install bash-completion
sudo curl -L https://raw.githubusercontent.com/docker/docker-ce/master/components/cli/contrib/completion/bash/docker -o /etc/bash_completion.d/docker.sh
source /etc/bash_completion.d/docker.sh
配置wsl/docker
配置wsl2启动docker
添加文件
sudo touch /etc/fstab
更改网络适配器
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy # for ipv4
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy # for ipv6
启用systemd
用文本编辑器打开*/etc/wsl.conf*(不熟悉Linux直接在windows下进入后用文本文档打开就行)
然后添加
[boot]
systemd=true
然后重启(powershell)
wsl --shutdown
在Linux下使用
systemctl start docker
测试是否支持systemd
如果是直接看下一步
如果否接着看
安装distrod
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
等待安装完成后设置开机自启
sudo /opt/distrod/bin/distrod enable --start-on-windows-boot
重启wsl2
wsl --shutdown
然后测试systemd是否正常
systemctl list-unit-files | grep docker
如果该命令没有输出任何结果,,可能是因为 Docker 服务单元没有正确安装。
您可以尝试重新安装 Docker 引擎,并确保在安装过程中没有出现任何错误。
接下来设置非root账户的docker许可
添加docker账户组
sudo groupadd docker
将当前用户添加到用户组
sudo usermod -aG docker $USER
使权限生效
newgrp docker
测试一下
#查看所有容器
docker ps -a
更新.bashrc文件
编辑 ~/.bashrc文件,并在文件末尾增加如下一行,如果不在.bashrc文件中增加下面这一行命令
#如果没有此行命令,你会发现,当你每次打开新的终端
#你都必须先执行一次 “newgrp docker” 命令
#否则当前用户还是不可以执行docker命令
groupadd -f docker
设置局域网访问
在C:\Users\你的用户名中打开.wslconfig(没有就新建一个)
输入以下配置
[wsl2]
networkingMode=mirrored # 镜像网络模式
dnsTunneling=true #与主机共用dns
autoProxy=true # 与自动与主机共用代理
[experimental]
hostAddressLoopback=true #下面说
这个"hostAddressLoopback"的作用是(转自知乎Memorandum)
默认情况下,loopback的只有127.0.0.1(i.e., localhost),并且强制loopback。也就是说,在wsl2中开启的网络端口(例如通过8022开启ssh登录端口),会通过localhost映射到win11上,可以在win11宿主机使用ssh -p 8022 username@localhost登录,但是通过win11的局域网或公网IP是不能登录的。将这个选项设置为true之后,就可以在宿主机使用局域网或公网IP通过8022端口直接进行wsl2的ssh登录。
如果你有docker服务需要访问的话,在"/etc/docker/daemon.json"中添加如下
{
iptables": false
}
记得关闭防火墙windows/wsl的防火墙
这样子你就可以用windows的局域网ip/公网ip:wls(docker)的port来访问服务了
如果需要内网穿透也可以直接在windows下穿透127.0.0.1:port
或者windows下ddns,然后用v6访问
安装1panel
官网
这个就附一条官方给的命令,没啥好说的
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh
接下来你就可以用
1pctl
来查看1panel面板指令
一些docker的镜像源
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
愿意折腾可以用cfworker自己搭建docker代理,教程挺多的这里就不阐述了
部分参考
Ubuntu 22.04下Docker安装(最全指引)
小萌-docker安装与使用(飞书文档)
知乎Memorandum