在Ubuntu中基于nvidia-container-toolkit建立docker容器

nvidia-container-toolkit可以让docker容器直接访问显卡,方便实验室多人共用一台服务器。

前言

若当前系统已有ssh、docker、nvidia-container-toolkit,可从Block2开始阅读,若是新安装的ubuntu系统,可从Block1阅读。

Block1

首先处于新安装的ubuntu系统中。

1.安装ssh

sudo apt update	
sudo apt install openssh-server

将ssh设置为自启动:

sudo vim ~/.bashrc
# 最后一行添加:
service ssh start

开启ssh:

sudo service ssh start

ssh连接命令:

ssh username@ip -p port

tips:

        username:用户名

        ip:ip地址,可用ifconfig等命令查看

        port:端口号,没有可删除-p port,默认22

再输入ssh连接命令后,会提示输入密码

2. 安装docker

(以下内容不具有时效性,具体最新步骤查看在Ubuntu上安装Docker Engine| Docker插件 --- Install Docker Engine on Ubuntu | Docker Docs):

# Add Docker's official GPG key:

sudo apt-get update

sudo apt-get install ca-certificates curl

sudo install -m 0755 -d /etc/apt/keyrings

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装是否成功:

sudo docker run hello-world

3.安装nvidia-container-toolkit

(以下内容不具有时效性,最新步骤查看Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.14.5 documentation):、

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update

sudo apt-get install -y nvidia-container-toolkit

sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

验证安装是否成功:

sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

若显示显卡信息则成功

 

Block2

若主系统已安装ssh、docker、nvidia-container-toolkit,则可从此处开始。

1.建立docker容器

首先,从docker hub网站上查找需要的docker镜像(nvidia/cuda Tags | Docker Hub),主要关注需要的ubuntu版本,cuda版本,cudnn版本。

此处以ubuntu22.04,cuda12.3,cudnn9为例:

拉取docker镜像:

sudo docker pull nvidia/cuda:12.3.2-devel-ubuntu22.04

tips:

  1. devel预装库较多,占用空间大,相对省事
  2. base无预装,轻便,需要自行安装一些库
  3. runtime版本,介于两者之间

拉去镜像后,可用下面命令查看

sudo docker images -a

第一列是镜像名,第二列是镜像标记,第三列是镜像ID

 

删除镜像:

sudo docker rmi -f REPOSITORY

REPOSITORY:镜像名

 

建立docker容器:

sudo docker run -p port:22 -i -t -v path1:path2 --gpus all --shm-size 64G --restart=always nvidia/cuda:12.3.2-devel-ubuntu22.04 /bin/bash

tips:

  1. port:需要映射的端口,该参数将自定义的端口映射到主机22端口上,以便于ssh时连接到docker容器。
  2. path1:本地需要映射的路径,一般为该使用者的文件夹路径,主机路径
  3. path2:映射到docker容器中的路径,一般为/data,可自己设置,docker容器中自己选定的路径
  4. 64G:--shm-size的参数,指该容器最多可以使用主机多少内存
  5. --restart=always:容器自启动
  6. nvidia/cuda:12.3.2- devel -ubuntu22.04:镜像名称

注意:按上述命令建立的docker容器,当用户在docker中改动path2的内容,path1中的内容也会同步更改

 

上述命令输入后会自动进入docker容器,因为docker用户默认root,因此不需要sudo

注意:root@ID,ID为容器ID,留意此ID,后续有用

首先在容器中安装ssh:

apt update

apt install openssh-server

apt install vim

修改ssh配置文件:

vim /etc/ssh/sshd_config
# 在(#PermitRootLogin prohibit-password)下一行增加:
PermitRootLogin yes

按esc后输入“:wq”退出文档(若不会vim的具体操作,可参考Linux vi/vim | 菜鸟教程 (runoob.com)

重启ssh服务,设置ssh自启动:

service ssh restart

vim root/.bashrc
# 最后一行添加:
service ssh start

设置docker容器密码:

passwd

退出docker:

exit

查看所有docker容器及状态:

sudo docker ps -a

查看STATUS列是否为UP状态,若为UP则成功

 

2.使用SSH连接容器

下载vscode安装remote-ssh插件,或直接在终端使用ssh连接容器

使用ssh连接容器:

ssh root@ip -p port

tips:

  1. ip:主系统ip,不是docker容器的ip!!!不是docker容器的ip!!!不是docker容器的ip!!!
  2. port:创建docker容器时,自己定义的port,不是22!!!不是22!!!不是22!!!

输入上述命令后,提示输入密码,此密码为在docker容器中输入passwd建立的密码!!!

容器ssh自启动:

  1. 先进入当前容器
    sudo docker exec -it 容器ID /bin/bash
  2. 打开.bashrc
    vim root/.bashrc
    # 最后一行添加:
    service ssh start

问题收集:

1.若ssh连接不上容器,并且

sudo docker ps -a

        显示docker容器状态不是up:

        输入下面命令:

sudo docker exec -it 容器ID /bin/bash 

tips:进入指定容器,并且退出容器后,容器仍运行

2.Docker容器中/data路径下文件消失(常发生在主系统重启后):

        在主系统终端中查看自己文件夹位置,检查路径是否改变,若磁盘盘符改变,重新挂载磁盘:

​sudo mount 磁盘名称 挂载路径

sudo systemctl restart docker

3.若在Docker中无法获取显卡信息:

        在主系统终端中,输入下面命令:

sudo systemctl restart docker

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值