在服务器容器中实现python远程开发调试的方法:vscode篇

链接

本系列教程会讨论基于vscode和jupyterlab工具,在服务器容器中的远程开发方式。
vscode: 在服务器容器中实现python远程开发调试的方法:vscode篇
jupyterlab: 在服务器容器中实现python远程开发调试的方法:jupyterlab篇
端口受限: 在服务器容器中实现python远程开发调试的方法:端口受限篇
常见问题: 在服务器容器中实现python远程开发调试的方法:常见问题篇

准备工作

docker相关(服务器端)

  • 确保 docker 已经安装,且已经创建相关容器(比如基于nvidia/cuda镜像创建的cuda环境)。
  • Manage Docker as a non-root user(不用每次输入 sudo)
    #Step1: 
    $ sudo groupadd docker
    #Step2: 
    $ sudo usermod -aG docker $USER
    #Step3: 
    $ newgrp docker
    
  • Configure Docker to start on boot with systemd. On Debian and Ubuntu, the Docker service starts on boot by default. Below is for other Linux distributions using systemd.
    $ sudo systemctl enable docker.service
    $ sudo systemctl enable containerd.service
    $ sudo systemctl disable docker.service
    $ sudo systemctl disable containerd.service
    

vscode 相关

  • 已安装vscode
  • vscode需要安装的插件:
    • Dev Containers
    • Remote-SSH
    • Python
  • 调试用config文件后面会单独说明
  • 远端服务器和或服务器容器内需要装 vscode-server,第一次使用 vscode 连接时会自动安装(确保网络正常连接即可)。

ssh相关

  • 确保已经安装 ssh
    $ ssh -V
    OpenSSH_9.0p1, OpenSSL 1.1.1q  5 Jul 2022
    
  • ssh 免密登录:服务器A要免密登录服务器B,则要把服务器A的公钥存到服务器B的授权公钥文件中;先在服务器A上生成一对秘钥(ssh-keygen),然后将公钥拷贝到服务器B的authorized_keys文件中
    # 客户机端:远程登录方式
    PS ssh -p xxxx user@remote  # 比如 ssh user1@192.168.10.1
    # 客户机端:生成密钥{id_rsa(私钥文件)   id_rsa.pub(公钥文件)}
    PS ssh-keygen -t rsa # 三个回车(默认)
    	# 第一?询问你保存在什么位置, Enter  file in which to save  the key(.ssh/id_rsa)
    	# 第二?询问你密钥保护, Enter passphrase
    	# 第三?再次输入相同的密码, Enter  same passphrase again
    # 客户机端复制公钥id_rsa.pub的内容到 远端服务器 user1 用户(authorized_keys), 不再需要输入密码 
    PS ssh-copy-id  user1@192.168.10.1   
    # 如果客户端是 windows, ssh-copy-id不可用,则需要先对其进行定义,然后再执行上一句
    PS
    >>	function ssh-copy-id([string]$userAtMachine, $args){   
    >>	    $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
    >>	    if (!(Test-Path "$publicKey")){
    >>	        Write-Error "ERROR: failed to open ID file '$publicKey': No such file"            
    >>	    }
    >>	    else {
    >>	        & cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"      
    >>	    }
    >>	}
    # 或者直接将id_rsa.pub 拷贝到 服务器和/或容器的 authorized_keys中
    

vscode 访问容器的方式

M1. 客户机A通过 vscode 连接服务器B,再连接容器C

  • 配置vscode的ssh配置文件:~.ssh\config(当需要多个不同的连接时,使用 IdentityFile 指定公钥位置)
    Host server_B
    HostName 192.168.10.1
    Port 22
    User user1
    ForwardAgent yes
    IdentityFile "~\.ssh\id_rsa"
    
  • 登录服务器B:按下图顺序点击后进入服务器B
    在这里插入图片描述
  • 登录相关容器C:将2处切换到 Dev Containers ,3处 start(若没有开启)并 attach 相关容器。
    • Dev Containers 目录下为服务器当前用户拥有的容器
    • other Containers 目录下为其他用户拥有的容器
      在这里插入图片描述
  • 打开相关目录进行开发:按 vscode 的使用方式打开即可

M2. 客户机A通过 vscode 直接连接容器C

  • 创建容器C时,加一个端口映射(比如C的ssh使用的22端口映射到B的30022。即加一个 -p 30022:22)
  • 配置vscode的ssh配置文件(与上面的方法不太一样,端口号为映射后的端口号,用户名为容器的用户名)
    Host container_C
    HostName 192.168.10.1
    Port 30022
    User root
    ForwardAgent yes
    IdentityFile "~\.ssh\id_rsa"
    
  • 启动容器 C ,通过ssh登录到服务器B端使用docker container start 命令启动容器C
  • 连接到容器C,按下图操作
    在这里插入图片描述

M1和M2的区别

  • M1需要通过ssh连接到服务器B,然后通过服务器B启动并连接到容器C;而M2直接连接容器C(需要C已经开启)。如果M2方法前面已经使用过,则vscode的welcome–>recent里面会用记录,直接点击记录可以直接进入容器C(可能会提示start 容器)
  • M1可以访问其他的容器(B上所有的容器都可以访问);M2只能访问映射端口(比如30022)的容器
  • M1不需要额外的端口号,M2需要额外的端口号

vscode 调试 python 程序的方式

使用 vscode 默认的 run and debug

使用debugpy

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值