时效性
本篇撰写时间为2021.12.9,由于计算机技术日新月异,博客中所有内容都有时效和版本限制,具体做法不一定总行得通,链接可能改动失效,各种软件的用法可能有修改。但是其中透露的思想往往是值得学习的。
本篇前置:

本篇是手动构建docker镜像所需技术总结之2

对容器ssh

配置设置

  • 设置密码
    passwd
    然后输入两次密码
  • 补包
    apt install openssh-server
  • vim /etc/ssh/sshd_config
    把下面这三行相关的选项改了(#去掉,且改键值)
Port 22
PermitRootLogin yes
PubkeyAuthentication yes
  • 重启服务
    service ssh restart
  • 开机启动
    /root/.bashrc下增加
    service ssh start

保存镜像并复用

  • 退出容器
  • 在宿主机commit镜像
    sudo docker commit -m '提交的说明信息' <原容器名> <新镜像名>
    这会返回镜像ID
    之后sudo docker images可以查看镜像列表,进行确认
  • 重新启动镜像,并加上端口映射选项-p <端口号>:22,这样ssh使用这个端口号相当于使用容器的22端口。
    比如
    sudo docker run -it --gpus all --name <名称> -v <目录>:<目录> -p <端口号>:22 --shm-size=8gb <刚刚保存的镜像名>
    • 其中-it是常用的设置。具体是“interactive”和“pseudo TTY”,参见
      https://docs.docker.com/engine/reference/commandline/run/
    • --gpus表示使用的GPU
    • --name表示容器名
    • -v表示目录映射(左边写宿主,右边写容器)
    • -p表示端口映射(左边写宿主,右边写容器)(验证:宿主机sudo docker ps -a可以看到端口映射信息)
    • 手动设大--shm-size(共享内存),防止pytorch等框架多进程跑时爆掉。(验证:进了容器之后df -k /dev/shm看输出,确实有\(8*2^{20}=8388608\)1K-blocks

指定端口连接ssh

ssh -p <之前映射的端口号> root@<ip>
然后使用之前设置了的密码登录即可。

VSCode远程编辑和调试

配置

安装VSCode插件Remote - SSH
时效性:版本如下
image
左侧这个图标
image
上面选SSH Targets,齿轮(Configure),选择Config File
image
这里如果原来不存在会自动创建文件,如上图
我们改写成需要的
image
Host:自己起名
HostName:ip
User:用户名
IdentityFile:当使用私钥登录时需要指定
PasswordAuthentication yes:当使用密码登录时需要写这个
Ctrl + s保存后,左侧自动更新image

连接

image
界面左侧,上图所示位置,下方那排那个按钮
image
允许通过防火墙,然后按照提示操作,输入密码等,即可

  • 左侧点击Open Folder,image
    选择文件夹打开
    image
    我们看到了文件夹中内容
  • 可以和一般的本地文件一样用VSCode编辑,非常方便
  • Ctrl + `可以打开终端并用终端输入命令执行。
  • 搜索并安装插件后,也可以调试
    image
    注:下方选解释器
    image