时效性
本篇撰写时间为2021.12.6,由于计算机技术日新月异,博客中所有内容都有时效和版本限制,具体做法不一定总行得通,链接可能改动失效,各种软件的用法可能有修改。但是其中透露的思想往往是值得学习的。
本篇前置:
- ExpRe[12] Docker[1] 镜像修改、保存、复用。附:ssh连接物理机
https://www.cnblogs.com/minor-second/p/15580819.html - 大致了解
git clone
命令
本篇是手动构建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
在上节的镜像里面进行适当操作。
ssh
相关:
apt update
apt install openssh-client
apt install git
- 生成和添加密钥
- https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys
(可能要梯子)
查看是否已经有密钥(肯定是没有的)
ls -al ~/.ssh
- 所以我们需要
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
按上面这个生成密钥对
ssh-keygen -t ed25519 -C "your_email@example.com"
不断回车 - 然后
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
- 添加密钥给github(即让github信任那个
deepo
镜像)
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account
我们打开文件
vim ~/.ssh/id_ed25519.pub
复制其中内容。 - 到github,右上角,Settings
左侧SSH and GPG keys
New SSH key
- 把内容粘贴进文本框并确认(Title可以自定)
- 确认完密码之后,发现我们多了一个SSH key
- https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys
- 现在在想要的地方可以
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 + B
后D
. 注意区别于tmux
窗口中不在跑东西时,Ctrl + D
的退出。Ctrl + D
的退出将导致tmux ls
看不到了)
tmux ls
或tmux list-session
列举出会话(或Ctrl + B
后S
)
tmux attach -t 0
attach上编号为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>
总结和问答练习
- Q: 梳理tmux相关的各级结构(窗口,窗格……)
A: ssh连接 - 可能有多个tmux
的session - session里可能有多个窗口 - 窗口里可能有多个窗格
- Q:
给出一种可能的解释,使得从这个状态连续按Ctrl + C
,Ctrl + Z
,Ctrl + D
,Ctrl + D
,Ctrl + B
,D
,Ctrl + D
,Ctrl + D
能连续退出六层嵌套达到此状态
A:
第一层按Ctrl + C
后退出python
脚本的执行
第二层按Ctrl + Z
后退出python
(如果不默认杀进程的话,这是挂起,不是杀死进程)
第三层退出docker
镜像(需要两次Ctrl + D
,原因是之前有进程没被杀死)
第四层退出tmux
窗口
第五层退出ssh
连接
第六层退出MobaXterm
的local terminal,达到待求状态。
- Q:
tmux
和docker
有何不同?
A: 一个是针对会话,可以理解成用一个会话模拟多个会话。会话的操作结果互相影响。可以同时操作。
一个是针对机器。可以认为是轻量级虚拟机,用一个机器模拟多个机器。各个虚拟机互不干扰。 - Q: 云服务器上github太慢怎么办?
A: 用gitee之类的。
同一个公钥,用类似之前给github的方式,分发给多个网站。