Docker的介绍
Docker支持在具有多个GPU的服务器上有效管理和分配GPU资源,以便容器化程序可以有效利用这些GPU进行计算密集型任务。虽然Docker管理资源分配和隔离,但它不像虚拟机那样将主机机器的物理内存和磁盘分割成独立的部分。Docker容器共享主机内核,并使用轻量级的机制提供隔离和资源管理。以下是Docker管理计算机资源的特点:
0. 资源隔离
Docker容器利用Linux内核的命名空间和控制组功能提供进程隔离。每个容器作为一个独立的进程运行,并与同一主机上的其他容器隔离开来。这种隔离确保容器内的进程无法干扰其他容器或主机系统上的进程。
1. 资源限制
Docker可以在容器上设置资源限制。这些限制可以包括CPU份额、内存使用和磁盘空间。Docker使用控制组(cgroups)来强制执行这些限制,确保容器不会超过分配的资源。
2. 存储
Docker容器使用主机机器的文件系统进行存储,但是通过Docker卷(Docker Volumes)可以将特定目录或存储卷从主机或其他来源挂载到容器中。这使得容器可以访问和修改主机系统或持久存储中的文件,而无需在容器文件系统内部复制它们。
简单理解:Anaconda用于隔离不同的python环境;docker可以理解成在你的机器里面安装了一个独立的系统,因此它可以隔离不同的CUDA环境,还有着独立的文件系统,防止别人删掉你的实验和环境等。参考
Docker的安装
Docker的使用
0. 启动Docker
systemctl start docker # 启动docker,或者使用 service docker start
systemctl stop docker # 关闭docker
systemctl restart docker # 重启docker
systemctl status docker # 查看docker状态
1. Docker拉取镜像
docker search ImageName # 搜索镜像
docker pull ImageName # 拉取镜像
docker rmi ImageName # 删除镜像
docker rm ContainerName # 删除容器(少个i)
示例
docker pull hangvane/cuda-conda-desktop:ubuntu16.04
Docker Hub里有多种镜像源:Docker Hub主页
2. Docker查看镜像和GPUs
docker images
docker run --gpus all ImageName
3. Docker新建容器
docker run --name ContainerName -it --gpu 'device=0,1' ImageName /bin/bash
参数说明:-it = -i -t
- -t 表示在新容器内指定一个终端(terminal)
- -i 表示容器为可交互的(interactive)
- gpu为容器指定特定的显卡
- ContainerID指定容器名,ImageName表示镜像名
- /bash/bin表示在容器内启动bash shell
示例
docker run --name XinxinLi -it --gpu='device=0, 1' dzw001/cuda11.1-cudnn8-python3.6-pytorch1.8.1-ubuntu18.04 /bin/bash
4. Docker进入容器
首先使用docker ps找到Container ID
docker ps
然后执行以下命令
docker attach Container ID
5. Docker退出并关闭容器
exit # 或者使用Ctrl + D
docker stop ContainerID
6. Docker查看容器
docker ps # 查看正在运行的容器
docker container ls # 查看正在运行的容器(list)
docker ps -a # 查看所有容器(all)
7. Docker与宿主机的文件互传
docker cp 宿主机路径 容器ID:容器里的路径 # 本地宿主机往docker容器里传文件
docker cp 容器ID:容器里的路径 宿主机路径# 与上面正好相反
示例
docker cp /home/ubuntu/XinxinLi/downloads/sewer-ml.zip 7df165187730:/home/xinxinli/
# 本地物理机往容器ID为7df165187730的目录/home/xinxinli/传递文件sewer-ml.zip
8. 导入/导出镜像
docker export 容器ID>>文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本