一、概述
客户端均为windows系统,基于vs code进行远程环境的开发工作,本文记录ssh连接 linux开发环境和连接容器开发环境。容器开发环境是基于已经运行的远端容器进行的,不在客户端不安装wsl且不运行docker引擎。
-
Remote-SSH:通过 SSH 协议连接远程服务器(物理机、云主机等),直接使用远程主机的系统环境进行开发。
适用于:已有稳定的远程服务器、需直接操作主机资源(如本地硬件受限)、项目依赖少且无需频繁切换环境。
-
DevContainer:将开发环境(依赖、工具、配置)打包成 Docker 容器,可在本地或远程服务器上运行,开发过程完全在容器内进行。
适用于:团队协作开发、多项目环境隔离、需要统一开发标准、依赖复杂易冲突的项目。
二、依赖
1、git(可选)
2、扩展包
VS Code 安装 Remote Development 扩展包插件
3、ssh免密
#客户端生成密钥对(windows可在Git Bash 中执行)
ssh-keygen -t ed25519
#将本地公钥复制到远程服务器或者将本地 SSH 公钥文件追加至git ~/.ssh/authorized_keys
ssh-copy-id -i "C:\Users\Administrator/.ssh/id_ed25519.pub" <远程用户>@<远程服务器IP>
# -i 指定公钥文件
# -p 自定服务器ssh端口
#验证免密连接
ssh <远程用户>@<远程服务器IP>
三、Linux开发环境
通过Remote - SSH 插件,f1执行remote-ssh命令配置连接或者vs code左下角配置remote ssh,连接远端docker的服务器
四、容器开发环境
1、服务端
服务端需要安装docker,确保可以正常运行容器
2、客户端
客户端需要安装docker cli(无需要docker引擎运行容器),通过choco安装docker cli
注意:安装完docker cli后推荐git bash 执行命令 (powershell、cmd执行响应很慢)
#安装choco
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
#缓存位置
#choco config set cacheLocation "D:\custom\download\path"
#包默认安装位置
#choco config set installLocation "D:\custom\install\path"
#注销或重启后使环境变量生效
choco install docker-cli -y
#安装位置 C:\ProgramData\chocolatey\lib
3、代理默认ssh
由于windows默认使用的ssh很慢不利于频繁交互场景,所以通过编写脚本代理ssh命令,划分执行git ssh和window open ssh。编写代理脚本命名为ssh,将该脚本目录设置为环境变量且位置先与windows OpenSSH环境变量,设置环境变量后需要注销或重启后使环境变量生效。
@echo off
set "GIT_SSH=E:\Program Files\Git\usr\bin\ssh.exe"
set "WINDOWS_SSH=C:\Windows\System32\OpenSSH\ssh.exe"
rem 该Host用Git SSH,多个使用空格分割
set "TARGET_HOSTS=192.168.157.118 192.168.157.110"
set "params=%*"
::启用延迟扩展
setlocal enabledelayedexpansion
::遍历参数
for %%i in (%*) do (
set TARGET=%%i
echo %TARGET% | findstr /c:"@" >nul
if not errorlevel 1 (
for /f "delims=@ tokens=2" %%a in ("!TARGET!") do (
set TARGET=%%a
)
)
for /f "tokens=2 delims=@" %%b in ("%ARG1%") do (
set "TARGET=%%b"
)
for %%h in (%TARGET_HOSTS%) do (
echo !TARGET! | findstr /i "%%h" >nul && (
goto git_ssh
)
)
)
::关闭延迟扩展
endlocal
::默认执行
goto windows_ssh
:git_ssh
"%GIT_SSH%" %params%
goto :end
:windows_ssh
"%WINDOWS_SSH%" %params%
goto :end
:end
exit /b
4、配置docker cli
这里docker host可以通过ssh和tcp(tcp://远端引擎IP:2376,远端 Docker 引擎需开启远程访问),以下基于ssh进行通信
#创建设置docker cli上下文(设置ssh免密连接)
docker context create remote-docker --docker "host=ssh://root@192.168.1.100"
docker context use remote-docker
#可以执行docker命令验证
#F1输入:dev containers:attach to running container
5、vs code命令
按F1,输入命令进行选择执行
#远端容器环境
#连接远端,后打开项目
Remote-SSH:connect to Host
#在容器中重新打开项目
Dev Containers: Reopen in Container
Comments NOTHING