docker 操作总结

 

docker相关:

查看docker服务是否启动:
    systemctl status docker

启动docker服务:
    sudo systemctl start docker

停止
    systemctl stop docker

查看状态
    systemctl status docker

设置开机启动
    systemctl enable docker

重启
    systemctl restart docker

 

镜像相关: 

查看
    docker images

搜索
    docker search image_ name

拉取
    docker pull image_name 
    # 指定版本号
    docker pull image_name:version 

删除
    docker rmi image_name or image_id

列出所有镜像的id
    docker images -q

加载 
    docker load -i name

 

容器相关:

 

查看正在运行的容器 docker ps 
    查看容器  docker ps -a

创建容器

    第一种,在远程集群服务器中创建容器
    sudo docker run -id/-it --gpus all -p 8022:22 --name 容器名称 -v 本机的绝对路径:服务器的相对路径 镜像名称:标签

    第二种,在本地docker创建容器,本地测试,这时千万不要挂载目录,会造成代码消失    
	sudo docker run -id --gpus all -p 8022:22 --name 容器名称 镜像名称:标签
    
    第三种,创建完成,直接进入容器(安装不一样,不一定适用,比如我的环境安装就不能用这句话)
    sudo docker run -id --gpus all -p 8022:22 --name 容器名称 镜像名称:标签 /bn/bash

    -it:交互式容器,退出容器后容器自动关闭。t:分配一个伪终端
    -id:守护式容器,退出容器后容器不会关闭    推荐这个
    -p:开放端口 通常 8022:22 意为将容器的22号端口与服务器8022端口绑定
    / bin/bash: 直接进入容器
    -p 8022:22  如果不用pycharm远程连接调试,就不需要端口映射


进入容器 
sudo docker exec -it  容器名称 bash 
推荐这种方法进入容器,退出终端后,不会停止容器

开始
    docker start 容器名称

停止
    docker stop 容器名称

删除
    docker rm 容器名称

查看容器信息
    docker inspect container_name or id 

    

 

数据卷相关:

创建容器时,使用-v参数设置数据卷

docker run -id --name 容器名称 -v 宿主机目录:容器目录 image_name

注意事项 a. 目录必须是绝对路径 b. 如果目录不存在会自动创建 c. 可以挂载多个数据卷 d. 一个数据卷也可以被多个容器挂载


 

镜像制作:

  • 容器转镜像,数据卷挂载的数据不会被打包,其余文件都会
docker commit 容器id  镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker save 镜像名称:版本号 -o /home/myubuntu-save-1204.tar
  • 加载保存的镜像:
docker load -i压缩文件名称 
docker load -i /home/myubuntu-save-1204.tar
  • dockerfile制作镜像
docker build -f dockerfile_path -t image_name 
-f:指定dockerfile路径
-t:指定新的镜像名字
 .:上下文路径。

由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。



conda 基本操作

查看conda环境 
conda conda env list  或  conda info --envs

激活conda环境 
conda activate name

创建虚拟环境

conda create -n name python=3.6 pytorch=1.4 

删除虚拟环境

conda remove -n name --all

清理(conda瘦身)

conda clean就可以轻松搞定!

第一步:通过conda clean -p来删除一些没用的包,这个命令会检查哪些包没有在包缓存中被硬依赖到其他地方,并删除它们。

第二步:通过conda clean -t可以将conda保存下来tar包

conda clean -p      //删除没有用的包
conda clean -t      //tar打包


使用SSH的SCP服务与服务器上传下载文件

 

sudo scp /home/outpainting-wg.tar username@ip:~/


上传文件:
scp [-r] filename username@address:服务器存储位置绝对路径 ,  filename可以为单个文件,也可以为文件夹,如果有文件夹时,必须用-r参数选项(表示递归拷贝整个目录)
下载文件:
scp [-r] username@address:filename 本地路径 。
简单记忆就是:
scp [-r] 源文件或源目录 目标路径


如果同时挂载多个目录

-v 可以多次使用
-v /home/my:/my:ro

-v ./home/ht:ht:rw


千万不能忘记 --gpus all 连接远程服务器需要挂载目录   切记前面目录为集群本机的目录,而不是自己电脑本机的目录了

sudo docker run -id --gpus all -p 8022:22 --name outpainting_wg -v /home/wg/wgg/code/Outpainting-master:/var/Outpainting-master ubuntu:wyt /bin/bash

pycharm调试本地docker时,千万不能挂载目录,否则会造成代码丢失
sudo docker run -id --gpus all -p 8022:22 --name outpainting_wg ubuntu:wyt /bin/bash



将集群本地代码文件夹 传入到docker内部容器内

docker cp /home/wg/wgg/code/Outpainting-master.tar.gz  容器名称:/home/wg/code/outpaint

代码跑起来之后,ctrl+p+q 可以退出容器,但是还保持运行的状态
使用   docker  attach 容器名称    重新进入

 


测试cuda是否可以被使用

1  import torch
2  import torchvision
3  print(torch.cuda.is_available())
 上面的命令只是检测CUDA是否安装正确并能被Pytorch检测到,并没有说明是否能正常使用,要想看Pytorch能不能调用cuda加速,还需要简单的测试一下:
a = torch.Tensor(5,3)
a=a.cuda()
print(a)

 


查看当前使用pytorch的版本

import torch
print(torch.__version__)  #注意是双下划线

 


流程:

1. 本机电脑拉取镜像,或者加载已有镜像
2. 创建容器,使用端口映射,便于pycharm调试,使用GPU, 但是切记不挂载目录,否则会造成代码消失
   docker run -id --gpus all -p 8022:22 --name 容器名称 镜像名称:标签 /bin/bash
3. 进入容器。在创建容器时 加了/bin/bash 会直接进入容器,没加的话,也不要紧。用exec进入,容器关闭时,也不会消失
  docker exec -it 容器名称 bash
4. 在容器内安装需要的环境
5. 将本地代码文件夹 传入到docker内部容器内,使用 python train.py 测试
  docker cp /home/wg/wgg/code/Outpainting-master.tar.gz  容器名称:/home/wg/code/outpaint
6. 在容器内安装ssh服务,为了pycharm远程调试
7. 在容器内修改密码
   passwd
8. 重启ssh服务
   service ssh restart
9. 退出容器
10. 打开pycharm进行设置,连接本地docker进行代码调试,直到测试无误,环境都配置好
11. 将容器保存为镜像
  docker commit 容器id  镜像名称:版本号
  docker save 镜像名称:版本号 -o /home/outpainting-wg.tar
12. 连接集群
  ssh kWang1@172.31.151.24
13. 使用ssh的scp服务,将保存的镜像和代码,数据集传输到集群上
  scp /home/outpainting-wg.tar kWang1@ip:~/wg/

  scp -r /home/wg/wgg/code/Outpainting-master kWang1@ip:~/wg/code/

  scp -r /home/wg/wgg/code/Outpainting-master/train kWang1@ip:/public_datasets/outpainting
  scp -r /home/wg/wgg/code/Outpainting-master/val kWang1@ip:/public_datasets/outpainting
  scp -r /home/wg/wgg/code/Outpainting-master/test kWang1@ip:/public_datasets/outpainting
14. 在集群上,加载镜像
  docker load -i ~/wg/镜像名称
15. 在集群上,镜像内创建容器
 docker run -id --gpus all -p 8022:22 --name outpainting -v 集群上代码的本机目录:集群上容器内代码的目录 -v 集群上数据集的本机目录:集群上容器内数据集的目录 outpaint:wg 
 例如:docker run -id --gpus all -p 8022:22 --name outpainting -v ~/wg/code/Outpainting-master:/home/wg/Outpainting-master -v /public_datasets/outpainting/train:/home/wg/Outpainting-master/train -v /public_datasets/outpainting/val:/home/wg/Outpainting-master/val -v /public_datasets/outpainting/train:/home/wg/Outpainting-master/test  outpaint:wg /bin/bash
16.进入容器
 docker exec -it 容器名称 bash
17.进入挂载的目录
18.运行代码
  python train.py


exec与attach区别

docker exec -it  容器名称 bash 
docker attach 容器名称 
他们的区别:
exec 进入容器时,是在容器内新开启了一个线程
attach进入容器时,是进入容器当前运行的线程

对我自己来说,我创建完容器,docker exec -it  容器名称 bash进入容器,运行代码,开始训练。ctrl+P+Q 使其退出但是不关闭容器,再次进入时,按道理应该docker attach 容器名称  进入当前运行的线程,也就是应该回到原先退出时的界面,但是每次我这样操作就会卡死掉。
但是拿 docker exec -it  容器名称 bash 再次进入就没有问题,原因就是上述说的,exec 进入容器时,是在容器内新开启了一个线程

 

查看线程命令   ps -aux
杀死线程命令   kill  pid  

但是如果ctrl+P+Q 不好使,又需要查看输出的信息或者查看运行的进度的话,可以在代码中添加日志进行查看进度

创建容器时,最后/bin/bash ,就是一直保持容器运行的意思,所以我现在的做法就是,在代码中添加日志,创建完容器运行后,直接关掉远程连接就可以。


统计文件夹下文件个数,包括子文件

ls -lR | grep "^-"| wc -l

统计文件夹中目录个数

ls -l ./|grep "^d"|wc -l

 

 


容器内部安装miniconda


直接在容器内部联网下载 wget -c https://.....................,然后安装
https://www.jianshu.com/p/0511decff9f8
 


如果找不到合适拉取的镜像

可以如下操作:
1. 拉取miniconda的镜像
2. 创建容器
3. 使用miniconda创建虚拟环境
4. 激活需要使用的环境
5. 配置你需要的环境


conda 更换源

更换conda源
更换pip源
临时使用  pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas


# 豆瓣
https://pypi.doubanio.com/simple/
# 阿里云    
https://mirrors.aliyun.com/pypi/simple/
# 清华大学
https://pypi.tuna.tsinghua.edu.cn/simple/
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

临时使用
pip install some-package -i https://mirrors.aliyun.com/pypi/simple/


设为默认#
升级 pip 到最新的版本后进行配置
pip install pip -U
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值