用于炼丹的docker常用命令

用于炼丹的docker常用命令

  • 环境配置
    • 镜像的选择
    • 使用Docker创建新容器
    • 安装Anaconda
    • 容器与宿主机之间文件迁移
  • 开发
    • 使用vscode连接远程服务器中的容器
    • vscode在本地安装Remote Development插件连接远程服务器
    • vscode在远程服务器安装Docker插件管理image和container
    • vscode在远程服务器的container中安装Python插件运行调试容器中代码
  • 镜像快速迁移与部署
    • 用容器生成镜像
    • 删除旧的镜像
    • 删除旧的容器
    • 线下

环境配置

镜像的选择

这里坑点很多,首先需要搞懂nvidia driver, cuda和docker之间的关系,

  1. driver是gpu的驱动程序,一般装在宿主机上,而容器里面必须装有cuda,才能调用driver(容器里面不能装driver)
  2. 既然宿主机的driver已经确定了,而cuda的版本和driver的版本互有牵连,所以cuda的版本能选择的也几乎确定了(和我一样,瞎选版本就等着重装吧)
  3. 所以就用宿主机nvidia driver和cuda的版本最合适
  4. docker hub里面有nvidia自己做好的镜像,可以直接拉下来用,我这选择的就是同版本,同系统型号nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04

使用Docker创建新容器

先拉取一个镜像(因为我在使用的过程中会经常用到anaconda,所以我这拉一个带有anaconda3的image,这里的pnet换自己喜欢的名字,它是根据anaconda3镜像生成容器名)

docker pull nvidia/cuda:11.7.1-cudnn8-devel-ubuntu18.04

然后就是从拉下来的这个镜像开始创建容器了

docker run -idt -p 30001:22 --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all -v /home/yis22/code/share:/home/share --name=dm-pnet nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04 /bin/bash

-idt: 是常见的参数表示用交互式,退出后后台运行的样式创建容器
-p 30001:22 表示把容器的22端口映射到宿主机的30001端口上
--gps all 表示可以看见宿主机的所有gpu
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility utility代表可以做utility的事情,只有加上compute才能够使用cuda计算
-v /home/yis22/code/share:/home/share 表示把宿主机的/home/yis22/code/share目录映射到容器的/home/share目录
--name=dm-pnet 其中dm-pnet表示我起的容器名字.

进入容器

docker exec -it dm-pnet /bin/bash

输入以下命令验证是否可以使用gpu

nvidia-smi

nvcc -V

# 以上只是可以看nvidia-smi而已,不一定可以计算,
# 安装好pytorch后,先使用`python`进入解释器,
# 再使用以下命令,如果返回true则是可以调用了.
import torch
torch.cuda.is_available()

安装Anaconda

先下载联网下载工具wget

apt-get update
apt-get install wget

下载anaconda3

# 进入home目录
cd /home

# 下载anaconda文件, 只是用wget被拒绝了,所以使用用户代理
wget --user-agent="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12" -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh

# 安装anaconda
bash Anaconda3-2022.10-Linux-x86_64.sh

容器与宿主机之间文件迁移

宿主机 -> 容器

# docker cp 宿主机文件/路径 容器名:容器内路径
docker cp /home/yis22/softwares/anconda3/envs/pnet_pytorch dm-pnet:/home/anaconda3/envs/pnet_pytorch

容器 -> 宿主机

# docker cp 容器名:文件/路径 宿主机路径 
docker cp wordpress-lee:/root/example.sh /root

开发

使用vscode连接远程服务器中的容器

vscode在本地安装Remote Development插件连接远程服务器

vscode在远程服务器安装Docker插件管理image和container

vscode在远程服务器的container中安装Python插件运行调试容器中代码

镜像快速迁移与部署

用容器生成镜像

docker commit -a "yisnsiy" -m "code and environment for dm-pnet" dm-pnet yisnsiy/img-dm-pnet:v0.1

-a "yisnsiy" 表示作者信息
-m "code and environment for dm-pnet" 表示注释信息
dm-pnet 用来生成镜像的容器名
yisnsiy/img-dm-pnet:v0.1 :之前时镜像名,用作者/名字的形式来代表,:之后的v0.1表示标签,一般表示版本号

删除旧的镜像

# 查看所有镜像
docker images
# 删除镜像
docker rmi yisnsiy/dm-pnet:v0.1

yisnsiy/dm-pnet:v0.1 表示镜像名的全称

删除旧的容器

#  查看所有容器
docker ps -a
# 产看正在运行的容器
docker ps
# 停止容器的运行, dm-pnet是正在运行的容器名
docker stop dm-pnet
# 删除容器
docker rm dm-pnet

线下

# 压缩镜像
docker save yisnsiy/dm-pnet:lastest > /home/yis22/code/dm-pnet:lastest.tar

# 加载镜像
docker load < /home/yis22/code/dm-pnet:lastest.tar

yisnsiy/dm-pnet:lastest 是镜像名
/home/yis22/dm-pnet:lastest.tar 是路径加文件名

你可能感兴趣的:(docker,容器,运维)