Docker 创建 GPU 容器并配置 SSH 登录教程

本文记录如何创建一个支持 GPU 的 Docker 容器,并配置 SSH 远程登录。该方法适合在服务器上搭建深度学习实验环境。


一、需要自己修改的参数

在执行命令前,需要先确认下面几个参数。

参数 含义 示例
your_container 容器名称 yolo_container
3010 宿主机 SSH 端口,不能和别人重复 30103020
/data/project 宿主机上的代码或数据目录 /data/project
/workspace 容器内的工作目录 /workspace
镜像名称 Docker 镜像名称 pytorch/pytorch:2.1.0-cuda12.1-cudnn8-devel
服务器IP 服务器地址 根据实际服务器填写

最需要自己修改的是下面几个位置:

复制代码
--name your_container
-p 3010:22
-v /data/project:/workspace
镜像名称
服务器IP

二、创建 GPU Docker 容器

执行下面的命令创建容器:

复制代码
docker run -itd \
  --gpus all \
  --name your_container \
  -p 3010:22 \
  -v /data/project:/workspace \
  --shm-size=16g \
  pytorch/pytorch:2.1.0-cuda12.1-cudnn8-devel \
  /bin/bash

其中:

复制代码
--gpus all

表示容器可以使用服务器上的所有 GPU。

复制代码
--name your_container

表示容器名称,可以自己设置。

复制代码
-p 3010:22

表示端口映射。3010 是宿主机端口,22 是容器内部 SSH 端口。

复制代码
-v /data/project:/workspace

表示目录挂载。前面是宿主机目录,后面是容器内目录。

例如,宿主机上的 /data/project 会映射到容器里的 /workspace

复制代码
--shm-size=16g

设置共享内存大小,深度学习训练时比较常用,可以减少 DataLoader 报错。


三、查看容器是否创建成功

执行:

复制代码
docker ps -a

如果能看到刚才创建的容器,说明容器已经创建成功。

如果只想查看正在运行的容器,可以执行:

复制代码
docker ps

四、进入容器

执行:

复制代码
docker exec -it your_container /bin/bash

其中 your_container 换成自己的容器名称。

进入容器后,后面的命令都在容器内部执行。


五、安装 SSH 服务

在容器内执行:

复制代码
apt-get update
apt-get install -y openssh-server vim

其中:

复制代码
openssh-server

用于开启 SSH 登录服务。

复制代码
vim

用于修改配置文件。


六、设置 root 密码

执行:

复制代码
passwd

然后根据提示输入两次密码。

这个密码后面 SSH 登录容器时会用到。


七、修改 SSH 配置

打开 SSH 配置文件:

复制代码
vim /etc/ssh/sshd_config

找到或添加下面两行:

复制代码
PermitRootLogin yes
PasswordAuthentication yes

这两行的作用是允许 root 用户使用密码登录。

修改完成后,在 vim 中按下面步骤保存退出:

复制代码
Esc
:wq

八、启动 SSH 服务

执行:

复制代码
service ssh restart

如果提示服务没有启动,可以执行:

复制代码
service ssh start

九、远程登录 Docker 容器

在本地电脑或服务器外部终端中执行:

复制代码
ssh root@服务器IP -p 3010

其中:

复制代码
服务器IP

换成自己的服务器地址。

复制代码
3010

要和创建容器时 -p 3010:22 中的端口保持一致。

登录时输入前面设置的 root 密码即可。


十、常用 Docker 命令

查看所有容器:

复制代码
docker ps -a

查看正在运行的容器:

复制代码
docker ps

进入容器:

复制代码
docker exec -it your_container /bin/bash

启动容器:

复制代码
docker start your_container

停止容器:

复制代码
docker stop your_container

删除容器:

复制代码
docker rm your_container

查看镜像:

复制代码
docker images

删除镜像:

复制代码
docker rmi 镜像ID

十一、完整示例

假设参数设置如下:

参数 示例值
容器名称 yolo_container
宿主机端口 3010
宿主机目录 /data/project
容器目录 /workspace
镜像 pytorch/pytorch:2.1.0-cuda12.1-cudnn8-devel

创建容器:

复制代码
docker run -itd \
  --gpus all \
  --name yolo_container \
  -p 3010:22 \
  -v /data/project:/workspace \
  --shm-size=16g \
  pytorch/pytorch:2.1.0-cuda12.1-cudnn8-devel \
  /bin/bash

进入容器:

复制代码
docker exec -it yolo_container /bin/bash

安装 SSH:

复制代码
apt-get update
apt-get install -y openssh-server vim

设置密码:

复制代码
passwd

修改 SSH 配置:

复制代码
vim /etc/ssh/sshd_config

加入或修改:

复制代码
PermitRootLogin yes
PasswordAuthentication yes

启动 SSH:

复制代码
service ssh restart

远程登录:

复制代码
ssh root@服务器IP -p 3010

十二、注意事项

如果多人共用一台服务器,-p 3010:22 中的 3010 不能和别人重复。

如果容器重启后无法 SSH 登录,可以先进入容器:

复制代码
docker exec -it your_container /bin/bash

然后重新启动 SSH:

复制代码
service ssh start

如果服务器处于公网环境,不建议长期使用 root 密码登录,更安全的方式是使用普通用户或 SSH key 登录。