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

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

deepo镜像内外联通

  • 映射
    https://github.com/ufoym/deepo#Usage
    此处有讲内外联通的方法等。把镜像实例化成容器的时候要指定好这里的设置。
    对云服务器,登录上root@<ip>,通过
    sudo docker run --gpus all -it -v /path/to/data:/data -v /path/to/config:/config ufoym/deepo bash
    进入一个新的deepo镜像。并指定/path/to/data作为容器里的/data,等等。
  • 拷贝
    sudo docker ps -a,复制容器ID
    然后由短ID查询长ID
    sudo docker inspect -f '{{.ID}}' <短ID>
    复制长ID,并用它拷贝文件
    sudo docker cp path/to/file <长ID>:path/to/file
  • 当然,有了映射也可以以映射的文件夹为桥梁,方便地内外拷贝

镜像中git clone

在上节的镜像里面进行适当操作。

Tmux使用

  • 由于git clone下载时间很长,有时中途ssh中断,将导致会话中的进程中断。
    Tmux可以“解绑”窗口和会话,从而可以让一个窗口有多个会话,断网不断进程,等等。
    在镜像之外(按Ctrl+D两次可退出镜像),安装Tmux
    sudo apt-get install tmux
    命令tmux进入tmux窗口。此时下方有一些信息。exit可以退出。
    tmux快捷键都需要先按Ctrl+B.
    例如Ctrl+B之后再按?调出帮助。
  • 常见tmux相关命令(这里说的除了detach,其它都在外部窗口进行,而非在tmux窗口进行)
    实际上,嵌套(nest)时会报警告。轻易不要嵌套。
    tmux new -s <session-name>新建
    tmux detach分离(或Ctrl + BD. 注意区别于tmux窗口中不在跑东西时Ctrl + D的退出。Ctrl + D的退出将导致tmux ls看不到了)
    tmux lstmux list-session列举出会话(或Ctrl + BS
    tmux attach -t 0attach上编号为0的会话(也可以使用会话名称)
    (除了attach外,还有
    tmux kill-session
    tmux switch
    tmux rename-session(或Ctrl + B$
    用法也是-t然后编号或名称)
  • 窗格操作(注意这些命令在tmux窗口中执行)
    tmux split-window
    -h参数变成左右分
    tmux select-pane -U改变光标位置
    tmux swap-pane -U调换窗格
  • 窗口操作(也是在tmux窗口中执行)
    tmux new-window -n <window-name>
    tmux select-window -t <window-name>

总结和问答练习

  1. Q: 梳理tmux相关的各级结构(窗口,窗格……)
    A: ssh连接 - 可能有多个tmux的session - session里可能有多个窗口 - 窗口里可能有多个窗格
    image
  2. Q:
    image
    给出一种可能的解释,使得从这个状态连续按Ctrl + CCtrl + ZCtrl + DCtrl + DCtrl + BDCtrl + DCtrl + D能连续退出六层嵌套达到此状态
    image
    A:
    第一层按Ctrl + C后退出python脚本的执行
    image
    第二层按Ctrl + Z后退出python(如果不默认杀进程的话,这是挂起,不是杀死进程)
    image
    第三层退出docker镜像(需要两次Ctrl + D,原因是之前有进程没被杀死)
    image
    第四层退出tmux窗口
    image
    第五层退出ssh连接
    image
    第六层退出MobaXterm的local terminal,达到待求状态。
    image
  3. Q: tmuxdocker有何不同?
    A: 一个是针对会话,可以理解成用一个会话模拟多个会话。会话的操作结果互相影响。可以同时操作。
    一个是针对机器。可以认为是轻量级虚拟机,用一个机器模拟多个机器。各个虚拟机互不干扰。
  4. Q: 云服务器上github太慢怎么办?
    A: 用gitee之类的。
    同一个公钥,用类似之前给github的方式,分发给多个网站。