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 \
runc
dnf 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.repo
dnf -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-plugin
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动Docker Engine
systemctl enable --now docker
systemctl enable --now docker
测试
请重新打开终端。
docker run hello-world
docker 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.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
设置加速镜像地址:
{
"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.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