换电脑不再费心重配环境
背景
受到疫情影响,笔记本内存不够,只得租用服务器进行毕设。
基础配置
- 1 云服务器配置
- 2 dorker环境搭建
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
- 3 anaconda 安装
#搜索镜像
docker search anaconda
#指定安装
docker pull continuumio/anaconda3
#查看已安装镜像
docker images
#启用镜像
docker run -t -i -p 8888 continuumio/anaconda3 /bin/bash
- 4 anaconda 配置
#其中遇到的问题在最后解答
ipython #打开ipython
from notebook.auth import passwd
passwd() #复制生成的密文
Enter password: #输入密码
Verify password: #确认密码
jupyter notebook --generate-config
配置文件在当前用户默认根目录的 .jupyter 文件夹下,例如: /home/zql
vi /root vi /root/.jupyter/jupyter_notebook_config.py
#粘贴方式:
#Shift insert
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha1:...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
c.NotebookApp.allow_remote_access = True
c.NotebookApp.notebook_dir = '/usr/local/mypro/pythonpro' #指定默认打开的文件夹
#启动
jupyter notebook --allow-root
dorker内常见问题
1 容器内使用sudo 报bash: sudo: command not found
apt-get update
apt-get install sudo
2 docker基础容器中bash: vi: command not found问题解决
apt-get update
apt-get install vim
3 docker启动jupyter报错:OSError: [Errno 99] Cannot assign requested address
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
无法从公网ip连接问题
注意jupyter与dorker的端口一致:
查询端口
docker ps
/root$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bcbe20cce11f continuumio/anaconda3 "/bin/bash" 2 minutes ago Up 2 minutes 0.0.0.0:32768->8888/tcp sharp_spence
jupyter notebook --ip 0.0.0.0 --port=8888 --allow-root
端口查询:
sudo netstat -nultp
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 966/sshd
tcp6 0 0 :::21 :::* LISTEN 979/vsftpd
tcp6 0 0 :::22 :::* LISTEN 966/sshd
tcp6 0 0 :::32768 :::* LISTEN 2359/docker-proxy
发现问题:dorker监听的端口都是TCP6,非ipv4端口,因此无法访问。如下设置:
vim /etc/sysctl.conf
net.ipv6.conf.all.forwarding = 1
# 生效配置文件
sysctl -p
大功告成~
访问顺序
#开启dorker
docker run -t -i -p 8888:8888 continuumio/anaconda3 /bin/bash
#开启jupyter
jupyter notebook --ip 0.0.0.0 --port=8888 --allow-root
#退出jupyter
Ctrl +c
#推出dorker
exit
PS:连接软件,winSCP好用
NEW 后台大法
如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器
nohup java -server -Xms128M -Xmx512M -XX:MetaspaceSize=128M -jar test.jar $1 $2 $3 &
(1) nohup
加在一个命令的最前面,表示不挂断的运行命令
(2) &
加载一个命令的最后面,表示这个命令放在后台执行
查看后台应用
(1)jobs命令
jobs -l
或者使用
ps
kill PID
#开启dorker
nohup docker run -t -i -p 8888:8888 continuumio/anaconda3 /bin/bash &
#开启jupyter
jupyter notebook --ip 0.0.0.0 --port=8888 --allow-root
#退出jupyter
Ctrl +c
#推出dorker
exit
更换镜像:
vi /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
question
- 我想重新打开jupyter的ssh,打不
- 每次启动容器都没有sudo,vim
- jupyter 中upload 的文件都没了
1 的解决方法:
screen -ls
screen -r 25450
screen有时候会没保存会话,以至于其子进程无法访问到。
- 解决方案:Tmux
#开启默认
tmux
#指定名称
tmux new -s SESSION-NAME
#查看会话列表
tmux ls
#进入一个已知会话
tmux a -t SESSION-NAME
#离开会话
tmux detach
#关闭会话
tmux kill-session -t SESSION-NAME
#切换tmux会话终端
先按ctrl+b, 放开后再按s
- 终止一个终端窗口(需确认)
快捷键:exit 或 先按ctrl+b, 放开后再按 &
- 在当前窗口的基础上再打开一个新的窗口
快捷键:- 先按ctrl+b, 放开后再按c
- 暂时退出当前会话
快捷键: 先按ctrl+b, 放开后再按 d
- 查看面板编号
快捷键:先按ctrl+b, 放开后再按q
- 关闭所有分屏后的窗口,即合并为一个窗口
快捷键:先按ctrl+b, 放开后再按!
2 的解决方案
docker 镜像保证稳定可重复性,因此是不可变的。如果要对docker镜像进行更新,则需要重新保存镜像。
操作命令:
#查看镜像列表
docker images
#在运行镜像时可见[root@afcaf46e8305 /]#
#记录容器ID,保持镜像运行
#用ID打包镜像
docker commit afcaf46e8305 centos-vim
'''
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
'''
在退出服务器前进行镜像的提交
迁移服务器时可由如下语句进行操作
'''镜像备份(保存为tar文件),docker save -o 容器名.tar 要保存的名字'''
docker save -o mynginx.tar mynginx_backup
'''镜像恢复
docker load -i 打包好的容器的文件名.tar
'''
3 的解决方案
挂载目录及数据卷
数据卷是一个可供使用的特殊目录,它绕过文件系统,解决由于容器无守护进程而退出的容器,数据修改保存的问题。特性 :
1.数据卷可以在容器之间共享和重用
- 对数据卷的修改立马生效
3.对数据卷的更新不会影响镜像
4.卷会一直存在直到没有容器使用 类似于mount挂载
'''#创建数据卷'''
'''A docker run时使用-v参数可以再容器内创建一个数据卷'''
docker run --name data -v /data -t -i centos /bin/bash
'''B. 创建一个宿主机目录作为数据卷:'''
docker run -d -P --name web -v 主机目录:容器目录 -ti centos /bin/bash
'''C. 挂载一个本机单文件作为数据卷:'''
docker run --rm -it -v ~/.bash_history:/.bash_history centos /bin/bash
'''-------------------------------------'''
'''数据卷容器
A.创建数据卷容器/dbdata'''
docker run -ti -v /dbdata --name dbdata centos
'''B.让其他容器db1挂载到此容器:'''
docker run -ti --volumes-from dbdata --name db1 centos
'''删除数据卷容器'''
docker rm dbdata
'''删除数据卷'''
docker rm -v /dbdata
'''------------------------------------------'''
'''数据卷容器迁移数据
备份 '''
docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos
tar -zcvf /backup/backup.tar.gz /dbdata '''---新建容器内部执行
恢复
创建带数据卷的dbdata2容器'''
docker run -v /dbdata --name dbdata2 centos -ti /bin/bash
'''创建一个新的容器挂载到dbdata2'''
docker run --volumes-from dbdata2 --name huifu -v $(pwd):/backup tar zxvf backup.tar.gz
pip 镜像更换:
cd ~/.pip # 运行此命令切换目录
mkdir ~/.pip
cd ~/.pip
touch pip.conf
sudo vi ~/.pip/pip.conf
'''
写入
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn # trusted-host 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任
'''