Docker 安装及使用 
Docker 是一种轻量级容器化平台,允许开发者将应用及其依赖打包成标准化单元(容器),实现快速部署和跨环境一致运行。与传统虚拟机不同,Docker 容器共享主机操作系统内核,无需模拟完整硬件,因而启动更快、资源占用更低。Docker的核心组件包括镜像、容器、仓库。广泛应用于云计算、DevOps 和持续集成场景,显著提升软件交付效率,已成为现代应用开发的标准工具之一。
下面将详细介绍如何在SonmiHPC上安装Docker。
安装流程 
卸载旧版本软件 
由于SonmiHPC基于Rocky Linux开发,系统自带了podman,因此需要执行下面的命令卸载相关的软件:
dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  podman \
                  runcdnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  podman \
                  runc设置并添加Docker仓库 
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repodnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo安装Docker 相关组件 
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugindnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin启动Docker Engine 
systemctl enable --now dockersystemctl enable --now docker测试 
请重新打开终端。
docker run hello-worlddocker run hello-world疑难解答 
1. 由于网络原因无法拉取Docker镜像? 
由于政策原因,国内目前无法直接从Docker的官方源拉取镜像,国内大部分的镜像源也已经关闭服务。不过可以通过下面的两种方式来解决该问题:
- 设置系统代理
如果用户在本地或者局域网内安装了v2ray/clash等软件,并且允许局域网内通过http代理或者socks5的方式进行连接。可以通过下面的方式来给Docker设置代理。管理员执行下面的命令创建文件夹及相关文件:
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
EOF
systemctl restart docker.servicemkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:10809"
Environment="HTTPS_PROXY=http://127.0.0.1:10809"
EOF
systemctl restart docker.service其中,http://127.0.0.1:10809 为本地的http代理地址,根据自己局域网内的http代理设置进行调整即可。
- 设置镜像源
如果用户有可用的加速镜像的话,可以直接编辑 /etc/docker/daemon.json 设置加速镜像地址:
{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}不过目前国内公开的可用镜像站很少,用户需确认设置的镜像源是否可用。
2. 如何设置 Docker 支持容器内使用GPU? 
要让Docker 容器支持使用GPU要额外安装NVIDIA Container Toolkit 套件,在SonmiHPC中可以按找如下的方式来进安装:
# 配置DNF仓库
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# 安装工具套件
sudo dnf install -y nvidia-container-toolkit# 配置DNF仓库
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
# 安装工具套件
sudo dnf install -y nvidia-container-toolkit之后在启动容器时,添加 --gups 参数指定要分配给容器的GPU编号即可,也可以指定 --gpus all,使用所有GPU。
3. 如何设置所有新建用户自动加入docker组? 
Docker 默认需要 root 权限才能运行,因为它通过绑定 Unix Socket 与 Docker Daemon 通信。出于安全考虑,Docker 在安装时会创建一个名为 docker 的用户组,任何属于该组的用户都将自动获得操作 Docker 的权限。这意味着普通用户只需加入 docker 组即可免密使用 Docker,无需每次都申请 root 权限。
但在集群管理或批量创建用户的场景中,频繁手动执行 usermod -aG docker <用户名> 来添加用户到组会非常低效。为解决这一问题,可以通过修改系统配置,让新创建的用户自动归属到 docker 组中,从而实现权限管理的自动化。
mkdir /etc/shadow-maint/useradd-post.d/ -p
cat > /etc/shadow-maint/useradd-post.d/add-docker-group.sh <<EOF
#!/bin/bash
usermod -a -G docker \$SUBJECT
EOF
chmod u+x /etc/shadow-maint/useradd-post.d/add-groups.shmkdir /etc/shadow-maint/useradd-post.d/ -p
cat > /etc/shadow-maint/useradd-post.d/add-docker-group.sh <<EOF
#!/bin/bash
usermod -a -G docker \$SUBJECT
EOF
chmod u+x /etc/shadow-maint/useradd-post.d/add-groups.sh