Skip to content

Docker 安装及使用

Docker 是一种轻量级容器化平台,允许开发者将应用及其依赖打包成标准化单元(容器),实现快速部署和跨环境一致运行。与传统虚拟机不同,Docker 容器共享主机操作系统内核,无需模拟完整硬件,因而启动更快、资源占用更低。Docker的核心组件包括镜像、容器、仓库。广泛应用于云计算、DevOps 和持续集成场景,显著提升软件交付效率,已成为现代应用开发的标准工具之一。

下面将详细介绍如何在SonmiHPC上安装Docker。

安装流程

卸载旧版本软件

由于SonmiHPC基于Rocky Linux开发,系统自带了podman,因此需要执行下面的命令卸载相关的软件:

shell
dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  podman \
                  runc
dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine \
                  podman \
                  runc

设置并添加Docker仓库

shell
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

安装Docker 相关组件

shell
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动Docker Engine

shell
systemctl enable --now docker
systemctl enable --now docker

测试

请重新打开终端。

shell
docker run hello-world
docker run hello-world

疑难解答

1. 由于网络原因无法拉取Docker镜像?

由于政策原因,国内目前无法直接从Docker的官方源拉取镜像,国内大部分的镜像源也已经关闭服务。不过可以通过下面的两种方式来解决该问题:

  • 设置系统代理

如果用户在本地或者局域网内安装了v2ray/clash等软件,并且允许局域网内通过http代理或者socks5的方式进行连接。可以通过下面的方式来给Docker设置代理。管理员执行下面的命令创建文件夹及相关文件:

shell
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.service
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.service

其中,http://127.0.0.1:10809 为本地的http代理地址,根据自己局域网内的http代理设置进行调整即可。

  • 设置镜像源

如果用户有可用的加速镜像的话,可以直接编辑 /etc/docker/daemon.json 设置加速镜像地址:

shell
{
    "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中可以按找如下的方式来进安装:

bash
# 配置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 组中,从而实现权限管理的自动化。

shell
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.sh
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.sh

参考链接

  1. 官方安装教程
  2. Docker 代理及镜像设置
  3. NVIDIA Container Toolkit 安装教程

本站内容未经授权禁止转载
联系邮箱: [email protected]