Sign inSign up

godlovebinlee/cuda-dev-c

By godlovebinlee

Updated almost 2 years ago

Sets up tools for GPU development environment, including SSH, build tools, cmake tools.

Image
Languages & frameworks
0

211

godlovebinlee/cuda-dev-c repository overview

Docker 镜像说明文档

镜像名称: cuda-dev-c

概述

该 Docker 镜像基于 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04,旨在提供一个基础的 CUDA 开发环境,包含 NVIDIA GPU 加速支持和 SSH 远程访问功能。镜像内包含了常用的系统开发工具,适合在需要 GPU 加速的深度学习、科学计算或高性能计算环境中进行开发、调试和部署。特别针对国内用户,镜像源替换为清华源,以提高依赖包的下载速度。


镜像内容与功能

1. 基础镜像:NVIDIA CUDA 11.8 和 cuDNN 8

镜像基于 NVIDIA 提供的 nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04 构建,集成了 CUDA 11.8 和 cuDNN 8,能够为深度学习、科学计算等应用场景提供 GPU 加速支持。

2. 国内源替换

镜像默认使用清华源替换了 Ubuntu 官方源。国内用户可以使用这个镜像来显著提高系统软件和依赖包的安装速度。

命令:

RUN sed -i 's@http://archive.ubuntu.com/ubuntu/@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g' /etc/apt/sources.list
3. 系统工具安装

安装了常用的开发工具和系统工具,以提供一个方便的开发环境。主要包括:

  • openssh-server:用于远程 SSH 访问。
  • build-essential:包含编译器(如 gcc、g++ 等)和构建工具,便于编译和构建应用程序。
  • cmake:C/C++ 项目的构建系统,支持复杂项目的配置和生成。
  • gdb:GNU 调试器,帮助开发者调试 C/C++ 项目。
  • sudo:提供超级用户权限管理,允许用户在容器中运行管理员级别的命令。
  • vim:轻量级文本编辑器,用于编辑代码或配置文件。
  • net-tools:包含 ifconfig 等网络工具,方便进行网络调试和配置。
4. SSH 服务器配置
  • 创建了 SSH 目录 /var/run/sshd,并启动 SSH 服务器,允许通过端口 22 进行远程访问。
  • 允许 root 用户通过密码进行登录,并且默认 root 用户密码为 12356(可根据需要修改)。
  • 修改了 SSH 配置,支持密码认证,且取消了 pam_loginuid.so 的限制,使得容器中的 SSH 服务可以正常运行。

SSH 相关命令:

RUN echo 'root:12356' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
5. 端口暴露

镜像暴露了 22 端口用于 SSH 连接。用户可以通过以下命令远程连接容器:

ssh root@<容器IP地址>

默认 root 密码为 12356,可以通过修改 Dockerfile 中的 chpasswd 命令来更改密码。

6. CMD 启动命令

容器启动时会自动启动 SSH 服务器:

CMD ["/usr/sbin/sshd", "-D"]

镜像使用方法

1. 拉取镜像

首先,从 Docker Hub 拉取该镜像:

docker pull your-dockerhub-username/cuda-dev-base-ssh
2. 启动容器

使用以下命令启动容器并映射 SSH 端口:

docker run -d -p 22:22 your-dockerhub-username/cuda-dev-base-ssh

此时,容器的 22 端口会映射到主机的 22 端口,SSH 服务将自动启动。

3. 连接容器

启动容器后,您可以通过 SSH 连接到容器:

ssh root@<容器IP地址> -p 22

默认 root 密码为 12356,可以根据需要修改 Dockerfile 中的 chpasswd 命令来更改密码。

4. 自定义修改
  • 更改 root 密码:可以在 Dockerfile 中修改以下行来更改 root 用户密码:

    RUN echo 'root:your-password' | chpasswd
    
  • 添加其他工具或软件:可以在 apt-get install 命令中添加其他需要的软件或工具,扩展镜像功能。


适用场景

该镜像适用于需要使用 GPU 加速的开发环境,特别是深度学习、科学计算、机器学习等高性能计算场景。通过 SSH 远程登录功能,开发者可以轻松连接容器,进行代码调试、开发和部署工作。

以下是一些典型应用场景:

  • 在 GPU 上进行深度学习模型的训练和推理。
  • 使用 C/C++ 或其他编程语言进行高性能计算开发。
  • 远程调试 GPU 加速的应用程序。

注意事项

  1. 基础镜像:该镜像为基础开发环境镜像,主要集成了 GPU 加速支持和 SSH 远程登录功能。用户可以根据需要进一步扩展镜像功能,例如安装更多的深度学习框架或工具。

  2. 国内源替换:此镜像替换了默认的 Ubuntu 镜像源为清华源,以提高在国内的包下载速度,特别适用于国内用户。

  3. SSH 配置:为了安全性,建议在生产环境中修改默认的 root 密码,或者关闭 root 用户登录,改为使用非 root 用户进行 SSH 登录。


镜像构建和扩展

你可以基于该 Dockerfile 创建你自己的定制镜像,方法如下:

1. 构建镜像
docker build -t custom-cuda-dev-base-ssh .
2. 扩展功能

你可以根据需要在 Dockerfile 中添加其他开发工具或库。例如,安装特定的深度学习框架(如 TensorFlow 或 PyTorch):

RUN pip install torch torchvision
3. 重新打包镜像

修改 Dockerfile 后,重新构建镜像并推送到 Docker Hub:

docker build -t your-dockerhub-username/custom-cuda-dev-base-ssh .
docker push your-dockerhub-username/custom-cuda-dev-base-ssh

结论:该镜像为基于 CUDA 的开发环境提供了基础工具和 SSH 服务支持,适用于远程开发和调试场景。通过 SSH 连接和 GPU 加速功能,开发者可以在容器中高效地进行代码开发、编译和调试操作。

构建代码如下:

###############################################################################################
# Dockerfile 说明:
#
# 该 Dockerfile 用于构建一个包含 CUDA 开发环境和 SSH 服务的基础 Docker 容器。
# 该环境适合需要使用 NVIDIA GPU 加速的应用程序开发、调试和部署。
# Dockerfile 基于 NVIDIA 的 `nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04` 镜像,
# 该镜像集成了 CUDA 11.8 和 cuDNN 8,适合深度学习和科学计算应用场景。
#
# 功能概述:
# 1. 基础镜像:使用 NVIDIA 提供的 CUDA 和 cuDNN 集成的开发镜像,提供 GPU 加速支持。
# 2. 国内源:使用清华源替换默认的 Ubuntu 镜像源,以提高在国内的包下载速度。
# 3. 系统工具:安装了一些常用的开发工具和系统工具,包括:
#    - `openssh-server`: 提供远程 SSH 访问支持。
#    - `build-essential`: 安装基本的编译工具(如 gcc、g++ 等)。
#    - `cmake`: 用于构建 C/C++ 项目。
#    - `gdb`: 调试工具,适合调试 C/C++ 项目。
#    - `sudo`: 提供超级用户权限。
#    - `vim`: 文本编辑器,用于编辑文件。
#    - `net-tools`: 包含网络工具(如 ifconfig),用于网络配置和调试。
# 4. SSH 配置:配置 SSH 服务器以允许 root 用户通过密码登录,并取消 `pam_loginuid.so` 的限制。
# 5. 端口暴露:暴露 22 端口用于 SSH 远程连接。
#
# 使用方法:
# - 启动容器后,SSH 服务将自动启动,默认的 root 用户密码为 '12356',可以通过 SSH 远程连接。
# - 如果需要更改 root 用户密码,您可以修改 Dockerfile 中的 `chpasswd` 命令。
# - 在启动容器时,可以使用以下命令通过 SSH 连接到容器:
#   ```bash
#   ssh root@<容器IP地址>
#   ```
#   默认密码为 `12356`。
#
# 注意事项:
# 1. 此镜像为基础开发镜像,主要用于包含 CUDA 和 SSH 服务的环境构建,用户可根据需要进一步扩展。
# 2. 提供了国内源替换功能,以加速 Ubuntu 系统包的下载,特别适用于国内用户。
# 3. 通过 Dockerfile 配置了 SSH 服务的相关设置,包括 root 用户登录和密码登录的支持。
#
###############################################################################################

# 使用 nvidia/cuda 镜像作为基础镜像
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04

# 切换为清华源
RUN sed -i 's@http://archive.ubuntu.com/ubuntu/@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g' /etc/apt/sources.list

# 更新包管理器并安装所需的工具
RUN apt-get update && apt-get install -y --no-install-recommends \
    openssh-server \
    build-essential \
    cmake \
    gdb \
    sudo \
    vim \
    net-tools \
    && rm -rf /var/lib/apt/lists/*

# 创建 SSH 目录
RUN mkdir /var/run/sshd

# 设置 root 用户密码(可根据需要更改)
RUN echo 'root:12356' | chpasswd

# 允许 root 登录
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# 允许 SSH 密码登录
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

# 取消 pam_loginuid.so 限制
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

# 开启 SSH 服务端口
EXPOSE 22

# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]

Tag summary

Content type

Image

Digest

sha256:aaad656f2

Size

6.4 GB

Last updated

almost 2 years ago

docker pull godlovebinlee/cuda-dev-c