ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Ubuntu 24.04 安装 Docker 与配置 GPU 容器完整指南

Ubuntu 24.04 安装 Docker 与配置 GPU 容器完整指南 这次我们来看一个很常见的场景手上有一台 Ubuntu 24.04 的设备比如 170hx 这类驱动相关平台系统装好、硬件驱动装完之后紧接着就要把 Docker 环境配起来。很多人卡在这一步不是因为 Docker 命令难而是 Ubuntu 24.04 和旧版本在 apt 源格式、官方仓库配置、GPU 容器运行时上有几处细节不一样。这篇文章会把从零到能跑 GPU 容器的完整流程记录下来适合刚接触 Linux 容器也适合需要在一台已经装好驱动的 Ubuntu 24.04 设备上继续做开发环境的读者。Docker 本身不是新东西但 Ubuntu 24.04 有它的特殊性默认源使用了新的 deb822 格式官方 Docker 仓库需要手动添加 GPG key镜像加速器和 NVIDIA 容器运行时也需要单独配置。如果用的是 NVIDIA 独立显卡或者计算卡驱动装完之后还不算完要让 Docker 容器里能调用 GPU必须安装nvidia-container-toolkit并把 runtime 写进 Docker 配置。这一套流程如果不理顺后面跑 CUDA 容器、视觉类应用、模型推理服务时就会反复踩坑。这篇内容会按实际部署顺序来写先做环境检查再安装 Docker Engine、Docker Compose 插件然后配置国内镜像加速和 apt 源接着处理 GPU 容器运行环境最后给出一批常用命令、常见问题和最佳实践。所有命令都按 Ubuntu 24.04 适配过复制到终端里可以直接执行只要替换掉明显的路径、用户名和端口即可。建议收藏备用部署的时候照着走会省不少事。1. 核心能力速览能力项说明目标系统Ubuntu 24.04 LTS适用于 x86_64 和 arm64 架构安装方式Docker 官方 apt 仓库安装 docker-ce、containerd.io、docker-compose-pluginGPU 容器支持通过 NVIDIA Container Toolkit 将 GPU runtime 接入 Docker驱动前置条件平台硬件驱动已安装NVIDIA 设备需先确认 nvidia-smi 可用镜像加速支持阿里云、中科大、网易、DaoCloud 等 registry mirrorCompose 支持Docker Compose v2 插件可直接管理多容器服务启动方式systemd 管理开机自启适合场景本地开发、服务器容器化部署、GPU 加速推理环境、视觉任务环境不适合场景需要严格图形界面管理的小白用户可改用 Docker Desktop for Linux2. 适用场景与使用边界这套环境最适合的是已经完成驱动安装、准备用容器跑业务的 Ubuntu 24.04 机器。比如 170hx 平台在驱动装完之后经常要接图像采集、视觉处理、模型推理这类任务直接往宿主机里装库很容易把系统环境搞乱用 Docker 把应用和依赖隔离起来会更干净。Docker 能解决的问题很明确第一环境隔离不同项目可以用不同版本的 Python、CUDA、OpenCV互不干扰第二快速交付写好的 Dockerfile 或 compose 文件换一台机器也能复现第三资源管理可以限制容器 CPU、内存、GPU 使用量避免某个任务把整机拖垮第四方便验证容器删了重建成本低。但也有不适合的场景。如果只是跑一个非常轻量的脚本直接用 systemd 管理进程可能更简单如果要存储大量数据容器内数据必须外挂 volume否则容器删除后数据就没了如果业务涉及敏感数据、版权模型或生产库必须评估容器安全边界不能随意 pull 不受信任的镜像也不能把密钥明文写进 Dockerfile 或 compose 文件。涉及 GPU、多人脸识别、声音处理等能力时还要特别注意数据授权和合规使用。3. Ubuntu 24.04 环境准备与前置条件3.1 检查系统版本先确认当前系统是不是 Ubuntu 24.04避免用错仓库源。打开终端执行cat /etc/os-release lsb_release -a正常会看到VERSION_ID24.04代号是noble。Ubuntu 24.04 的默认源配置文件位置和旧版不同旧版一般是/etc/apt/sources.list而 24.04 默认可能是/etc/apt/sources.list.d/ubuntu.sources这个细节会在后面配置阿里源时用到。3.2 确认驱动已经装好因为标题是“170hx 平台安装驱动之后”所以默认你已经完成了驱动安装。如果是 NVIDIA 平台先执行nvidia-smi能正常输出显卡型号、驱动版本、CUDA 版本说明驱动没有问题。如果这里报错先不要继续装 Docker 的 GPU 部分回去把驱动解决。没有独立显卡的机器可以直接跳过第 7 节不影响 Docker Engine 本身的使用。3.3 卸载可能存在的旧版 Docker有些 Ubuntu 镜像预装了旧版 Docker 包比如docker.io、docker-engine它们会和官方docker-ce冲突。安装前先清理sudo apt remove docker docker-engine docker.io containerd runc执行后如果没有安装过这些包会提示没有可移除的包直接继续即可。注意这个命令不会删除/var/lib/docker里的既有数据如果你想要完全干净的环境后面手动处理。3.4 安装基础依赖sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release这些包用于下载 GPG key 和解析系统架构。ca-certificates缺少时curl 从 HTTPS 拉取仓库 key 很容易失败gnupg在旧版系统上也是必装项。4. 安装 Docker Engine4.1 添加 Docker 官方 GPG key推荐用官方仓库方式安装这样以后可以直接通过 apt 升级 Docker 版本。首先创建密钥目录sudo install -m 0755 -d /etc/apt/keyrings然后下载并保存 Docker 的 GPG keysudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod ar /etc/apt/keyrings/docker.asc如果这一步卡住通常是网络到download.docker.com不稳定。可以先配置好 DNS或者晚点重试不要跳过 GPG key否则后面 apt update 会报签名错误。4.2 添加 Docker 官方 apt 仓库Ubuntu 24.04 的代号是 noble下面的命令会自动读取系统代号echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null添加后先更新索引sudo apt update如果输出里包含docker.com/linux/ubuntu noble stable并且没有签名错误仓库就生效了。4.3 安装 Docker 组件sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin这里一次把docker-compose-plugin也装好后面可以用docker compose命令不需要再单独装 Python 版本的 docker-compose。docker-buildx-plugin用于多架构镜像构建看实际需求。4.4 启动 Docker 并设置开机自启sudo systemctl enable --now docker sudo systemctl status docker看到active (running)说明服务已经起来。如果没起来执行journalctl -u docker -n 50查看日志常见原因是网络、iptables 或 containerd 启动异常。4.5 验证 hello-worldsudo docker run hello-world第一次运行需要拉取镜像如果本机网络访问 Docker Hub 比较慢可以先跳到第 5 节配置镜像加速再回来执行。能输出Hello from Docker!说明整个 Docker 引擎工作正常。5. 配置镜像加速与国内 apt 源5.1 配置 Docker registry mirrorUbuntu 24.04 安装 Docker 之后直接拉镜像经常遇到超时尤其是library/下的公共镜像。可以通过/etc/docker/daemon.json配置镜像加速源。先创建配置文件sudo mkdir -p /etc/docker sudo nano /etc/docker/daemon.json常见配置{ registry-mirrors: [ https://docker.m.daocloud.io, https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ], log-driver: json-file, log-opts: { max-size: 20m, max-file: 3 } }注意镜像加速源是否稳定会随时间变化如果某个地址拉取仍然很慢可以搜索当期的可用地址替换。这份配置同时还加了日志切割避免容器日志无限膨胀占满磁盘。修改后重启 Dockersudo systemctl daemon-reload sudo systemctl restart docker验证镜像加速是否生效sudo docker info在输出里找Registry Mirrors能看到配置的地址就说明生效。5.2 将 apt 源切换为阿里源Ubuntu 24.04 很多默认源在国外apt update和安装软件包都比较慢。热搜里也常出现“ubuntu 24.04 阿里源”这里要注意 24.04 的源文件已经不是简单的/etc/apt/sources.list。先确认ls -l /etc/apt/sources.list.d/ubuntu.sources如果存在这个文件就用 sed 替换源地址sudo sed -i \ s|http://archive.ubuntu.com/ubuntu|https://mirrors.aliyun.com/ubuntu|g \ /etc/apt/sources.list.d/ubuntu.sources sudo apt update如果你仍然使用老式的/etc/apt/sources.list替换方式相同只是文件路径不一样。执行完 apt update 后注意检查输出中是否有 404如果出现 404说明源地址和 Ubuntu 24.04 代号不匹配需要改回官方源。5.3 检查 Docker 与 apt 源是否都正常配置完镜像加速和系统源之后重新执行一组验证sudo apt update sudo apt upgrade sudo docker run --rm hello-world如果 Ubuntu 源和 Docker Hub 镜像都能正常访问接下来就可以正式创建项目容器了。6. 非 root 用户与 Docker Compose 配置6.1 让当前用户免 sudo 使用 Docker每次执行 docker 命令都加 sudo 比较麻烦。把当前用户加入 docker 组sudo usermod -aG docker $USER执行后需要重新登录或者刷新组权限newgrp docker再次运行docker ps确认不需要 sudo。注意加入 docker 组等同于授予该用户 root 级别的容器管理权限因为用户可以通过 docker 挂载宿主机目录、执行特权容器。在多人服务器上要谨慎管理 docker 组用户。6.2 确认 Docker Compose 插件Ubuntu 24.04 下安装 Docker 后推荐直接使用 compose v2 插件docker compose version正常会输出类似Docker Compose version v2.x.x的信息。如果提示命令不存在说明docker-compose-plugin没有装成功重新执行sudo apt install -y docker-compose-plugin6.3 用 Compose 启动一个 MySQL 示例装好 Docker 后很多人的下一步就是部署数据库。这里给一个最小可用的compose.yaml示例用于验证 Compose 插件工作是否正常services: mysql: image: mysql:8.0 container_name: mysql8 restart: unless-stopped ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: change_me MYSQL_DATABASE: app volumes: - ./mysql_data:/var/lib/mysql启动docker compose up -d docker compose ps这个示例只是演示生产环境必须改密码、加数据备份、限制容器资源并且不要把MYSQL_ROOT_PASSWORD直接写进仓库文件。验证完可以docker compose down删掉测试容器。7. 170hx 平台驱动之后的 GPU 容器配置第 7 节是整个流程里最容易出问题的地方驱动装好了宿主机上nvidia-smi正常但 Docker 容器里执行nvidia-smi却提示找不到。原因是容器默认没有宿主机的 GPU 设备节点也没有对应 runtime。要在 Docker 里使用 NVIDIA GPU必须装nvidia-container-toolkit。7.1 确认宿主机的 nvidia-sminvidia-smi如果这一步都不通后面都没法做。先确认驱动、显卡型号和 CUDA 版本再继续安装 toolkit。7.2 添加 NVIDIA Container Toolkit 官方仓库下面这套命令来自 NVIDIA 官方安装流程适用于 Ubuntu 24.04 的 apt 安装curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \ sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg然后把官方仓库写入 apt 源列表curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed s#deb https://#deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list更新并安装sudo apt update sudo apt install -y nvidia-container-toolkit如果访问nvidia.github.io不稳定apt update 时可能看不到这个仓库可以稍后重试或者从官方发布页下载 deb 包离线安装这个根据实际网络环境决定。7.3 配置 Docker runtime安装完 toolkit 后需要执行一次运行时配置。这一步会自动往/etc/docker/daemon.json里添加 nvidia runtimesudo nvidia-ctk runtime configure --runtimedocker然后重启 Dockersudo systemctl restart docker检查 runtime 是否生效sudo docker info | grep -i runtime正常输出会包含runc和nvidia。如果这里看不到 nvidia说明daemon.json没有写进去可以手动打开看一下。7.4 验证 GPU 容器先跑一个轻量镜像测试sudo docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi注意这个命令会把镜像标签里的 CUDA 版本替换成和你宿主机驱动匹配的版本。如果驱动较新可以直接用nvidia/cuda:12.4.1-base-ubuntu22.04如果驱动版本偏旧建议先查一下 CUDA 与驱动的对应关系。容器里能输出 GPU 信息就说明 170hx 平台驱动之后的 GPU 容器链路已经打通了。后面再跑其他 AI 镜像时只要在docker run里加--gpus all或者在 compose 文件里声明gpus: all容器就能正常使用显卡。如果不加这个参数容器内无法访问 GPU这是 GPU 容器最常见的失败原因。8. Docker 常用命令与容器管理Docker 安装完成后日常使用频率最高的命令集中在下面这张表命令作用docker ps查看运行中的容器docker ps -a查看所有容器包括已退出容器docker images查看本地镜像docker pull拉取镜像docker run --name test -it ubuntu:24.04 bash启动交互式容器docker exec -it bash进入运行中的容器docker logs -f跟踪容器日志docker stats查看容器 CPU、内存、网络占用docker inspect查看容器详细配置docker stop/start/restart启停容器docker rm删除容器docker rmi删除镜像docker system prune清理悬空镜像和停止的容器docker system df查看磁盘占用批量管理多个容器时可以先列出容器 ID再配合 xargs 操作# 停止所有运行中的容器 docker ps -q | xargs docker stop # 删除所有已停止容器 docker ps -a -q | xargs docker rm这组命令适合清理测试环境生产环境要谨慎避免误删有状态服务。如果容器里跑的是 MySQL、Redis、MinIO 这类有状态应用数据一定要放在宿主机 volume 里并定期备份。观察容器资源占用时docker stats是最直接的手段。它会实时刷新 CPU、内存、网络 I/O 和磁盘 I/O。如果某个容器内存一直上涨优先检查应用本身是否有内存泄漏不要只靠重启解决。Docker 也支持通过参数限制资源比如docker run -d --name myapp --memory2g --cpus2 nginx:latest这样可以防止某个容器吃光整台机器内存导致宿主机卡死。9. 常见问题与排查方法Ubuntu 24.04 安装 Docker 的过程中问题和坑主要集中在网络、权限、GPU runtime 三块。下面这张排查表是我整理出来的通用排查顺序。问题现象可能原因排查方式解决方案apt update 报 Docker 仓库签名错误GPG key 未正确保存或权限不对ls -l /etc/apt/keyrings/docker.asc重新下载 key并 chmod arapt update 报 404Ubuntu 24.04 代号没对上检查源里是否出现 noble用 VERSION_CODENAME 重新生成源docker run 权限 denied当前用户不在 docker 组groups 命令查看用户组sudo usermod -aG docker $USERhello-world 拉镜像超时访问 Docker Hub 慢docker pull hello-world 看报错配置 registry-mirrors 后重启 Docker/var/run/docker.sock 权限不足socket 文件权限问题ls -l /var/run/docker.sock加用户到 docker 组或修复 socket 权限容器内 nvidia-smi 找不到没装 nvidia-container-toolkitdocker info 看 runtime安装 toolkit 并执行 nvidia-ctk runtime configureDocker 启动失败iptables 或 nftables 冲突journalctl -u docker -n 50检查防火墙规则或者临时切换存储驱动端口被占用容器端口和宿主机端口冲突sudo ss -lntp 查端口修改 -p 映射的宿主机端口磁盘被容器日志占满没有配置日志切割docker system df 检查配置 log-opts清理历史日志如果apt update后 Docker 仓库一直不出现可以手动查看源文件cat /etc/apt/sources.list.d/docker.list确认里面是否有deb [archamd64 signed-by/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable。如果架构不对、路径不对、codename 不对都会导致仓库不可用。GPU 容器里如果出现could not select device driver with capabilities: [[gpu]]说明 Docker 没有识别到 nvidia runtime。依次做三步检查docker info | grep -i runtime cat /etc/docker/daemon.json systemctl status docker确认daemon.json里有nvidia运行时配置且 Docker 服务没有报错。如果改了配置后没重启 Docker也会出现 runtime 不存在。10. 最佳实践与安全建议Docker 装好只是第一步真正稳定使用还需要做好工程化配置。第一建议把数据目录和代码目录分开。容器是临时的数据要放 volume 或 bind mount。比如 MySQL 数据放宿主机./mysql_data日志放单独目录这样容器删了重建数据不会丢。第二建议所有容器显式命名。不带--name启动的容器会得到随机字符串日志、日志清理、批量操作都不方便。生产环境建议命名规则包含项目名和服务名例如project-api、project-mysql。第三建议尽早限制容器资源。在docker run或 compose 里声明内存、CPU、重启策略避免单容器异常拖垮整机。Compose 里可以这样写services: app: image: your-image deploy: resources: limits: memory: 2g cpus: 1.5第四建议开好日志切割。容器日志默认写在 json-file 里如果不限制大小长时间跑的服务日志可能占用几十 GB 磁盘。可以统一在/etc/docker/daemon.json配置全局日志上限也可以对单个容器单独限制。第五注意安全合规。不要用 root 用户运行不受信任的容器镜像不要往 Dockerfile 或 compose 文件里写数据库密码、API key如果容器需要挂载宿主机目录尽量使用只读模式对外暴露端口前要先确认服务本身的鉴权方式。涉及人脸、声音、版权素材或企业内部数据时必须确认数据来源合法、授权清晰再放到容器里处理。第六定期更新和清理。容器镜像和系统补丁都要定期升级。docker system prune可以清理停止容器、悬空镜像和构建缓存但要注意先确认没有需要保留的容器。建议每周检查一次磁盘占用尤其是docker system df的结果。11. 总结与下一步这篇内容从 Ubuntu 24.04 的 Docker 官方仓库安装到镜像加速、GPU 容器、Compose 编排和问题排查基本覆盖了 170hx 平台驱动安装之后的那段路程。最容易踩的坑有三个Ubuntu 24.04 源格式变化、GPG key 添加方式错误、以及 GPU 容器缺少 nvidia runtime。先把这三个点理顺后面的容器部署就会很顺。如果你手里的环境刚装完驱动下一步建议按这个顺序验证先跑sudo docker run hello-world确认 Docker 引擎正常再跑docker compose version确认 Compose 插件可用如果有 NVIDIA 设备再跑一次docker run --rm --gpus all nvidia/cuda:合适版本-base-ubuntu22.04 nvidia-smi确认容器内 GPU 可用。全部通过之后就可以放心把自己的应用镜像编排起来继续做模型推理、视觉处理或者服务化部署了。
返回列表