因VSCode中没有IDEA那般优雅地运行Dockerfile,故此便有了这篇技术水贴,感谢各位论坛大佬的分享与解答。
->实现本机无docker环境,远程docker build构建
请教VSCode如何优雅使用Docker - #6,来自 admini
WSL2配置完全指北——手把手教你配置WSL2
彻底摆脱docker-desktop,让你在wsl中没有任何烦恼地使用docker
一键脚本使换源更简单 - LinuxMirrors
https://bsdayo.moe/posts/use-docker-cli-in-windows/
安装Debian
打开PowerShell,安装Linux子系统。
若未安装 Windows Subsystem for Linux 将提示按任意键安装 WSL并开启相应的Windwos功能组件,如 Hyper-V,重启 系统 执行:
wsl --install -d Debian # 按照提示创建非 root 用户以安装 Debian 到 WSL 中
迁移系统安装路径
(可选)迁移Linux子系统安装路径【迁移后系统默认将以root用户作为默认操作】
wsl --export Debian D:\Debian12.tar # 导出系统
wsl --unregister Debian # 取消系统挂载
wsl --import Debian D:\wsl2\Debian D:\Debian12.tar # 导入并重新挂载系统在 D:\wsl2\Debian
优化资源分配
- 优化 WSL 运行占用
wsl # 启动一次 Debian,以便让系统自动初始化创建相关配置文件
exit # 退出回到 Windows 终端
Win + R在输入框中输入%UserProfile%回车,在目录中编辑.wslconfig文件,若无可手动创建同名文件,注意文件编码格式
[wsl2]
# 处理器核心数
processors=4
# 最大运行内存
memory=4GB
# 交换分区大小
swap=4GB
保存关闭,执行 wsl --shutdown 重启WSL
基础配置
- 更新软件源
sudo apt update && sudo apt-get update
- 确保启用
systemd
vi /etc/wsl.conf
文件如下内容:
[boot]
systemd=true
-
确保启用
SSH登录sudo apt install openssh-server systemctl enable ssh systemctl start ssh开启SSH密码、密钥登录
vi /etc/ssh/sshd_config # 逐个放开配置注释并修改如下 PermitRootLogin yes PubkeyAuthentication yes PasswordAuthentication yes -
启用镜像网络,
Debian系统ip即宿主机ip,宿主机可通过localhost访问,局域网可通过宿主机ip直接访问当前Debian,编辑.wslconfig文件,增加下方配置内容
# 启用镜像网络模式
networkingMode=mirrored
# 共用宿主机DNS
dnsTunneling=true
# 自动共用宿主机代理
autoProxy=true
[experimental]
# 端口映射到宿主机
hostAddressLoopback=true
配置完成后再次重启WSL wsl --shutdown
PS:使用 SSH 连接 22 端口,若提示 connect reset 请注意 Windows 防火墙 规则
安装Docker
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
# 将当前用户组添加到Docker账户组
sudo usermod -aG docker $USER
newgrp docker
编辑 ~/.bashrc 文件,在文件末尾增加如下内容
# 避免非root用户每次都需要 newgrp docker 才能执行docker命令
groupadd -f docker
Windows安装Docker Cli
配置上下文实现宿主机在无Docker环境的情况下,一样能够执行docker命令进行拉取、构建镜像,建议与WSL配合实现快速传输
winget install Docker.DockerCLI # 安装完毕后重启终端 docker 命令行生效
打开 WSL 中 Docker 的 TCP 远程访问
vi /lib/systemd/system/docker.service # 找到 [Service] 标签进行编辑
增加一个 -H 选项,指定监听的主机和端口,如下:
# 默认
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 开启tcp访问
[Service]
ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H fd:// --containerd=/run/containerd/containerd.sock
保存并重启 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
配置Windows Docker Cli
# 测试连接
docker -H tcp://127.0.0.1:2375 info # 本机只装了Client,若是输出的Server没有error即连接正常
# 创建 docker 连接上下文 context
docker context create wsl --docker "host=tcp://127.0.0.1:2375"
# 切换到这个 context
docker context use wsl
# 测试
docker info
快捷启动/关闭WSL(隐藏终端窗口)
' 保存为 run_debian_wsl.vbs
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Debian", 0
' 保存为 shutdown_all_wsl.vbs
set ws = CreateObject("wscript.shell")
ws.run "wsl --shutdown", 0
