Docker 安装配置与基础操作指南
在现代 AI 开发中,环境配置往往是令人头疼的第一道门槛。你是否曾为 PyTorch 版本不兼容、CUDA 驱动错配或依赖包冲突而耗费数小时?Docker 的出现正是为了终结这种“在我机器上能跑”的窘境。
作为一款开源的应用容器引擎,Docker 允许开发者将应用及其完整依赖打包进一个可移植的镜像中,真正做到“一次构建,处处运行”。它基于 Linux 内核的cgroups和namespaces技术实现资源隔离,在操作系统层面完成轻量级虚拟化——相比传统虚拟机,启动更快、占用更少、部署更灵活。
本文将以实战为导向,带你从零搭建 Docker 环境,并结合一个真实 AI 项目:YOLOFuse 多模态目标检测社区镜像,演示如何利用预配置容器快速开展推理与训练任务,跳过繁琐的环境折腾,直接进入核心开发环节。
支持平台与系统要求
Docker 拥有广泛的平台支持,涵盖主流操作系统:
- Linux:CentOS、Ubuntu、Debian、Fedora、RHEL
- macOS
- Windows 10/11(需启用 WSL2)
对于 Linux 用户,内核版本需不低于 3.10。可通过以下命令确认当前系统版本:
uname -r示例输出:
5.4.0-91-generic
若版本过低,建议优先升级内核或更换发行版。尤其在 CentOS 7 上部署时,注意其默认内核可能较旧,容易导致兼容性问题。
Docker CE vs EE:版本选择建议
自 2017 年起,Docker 推出两个主要版本线:
| 类型 | 全称 | 适用场景 |
|---|---|---|
| CE | Community Edition(社区版) | 个人开发、学习、测试 |
| EE | Enterprise Edition(企业版) | 生产环境,含商业支持 |
两者均按YY.MM格式命名稳定版本(如24.06表示 2024 年 6 月发布),更新频率均为每季度一次。
| 版本类型 | 更新频率 | 安全维护周期 |
|---|---|---|
| CE | 每季度一次 | 4 个月 |
| EE | 每季度一次 | 1 年 |
对于绝大多数开发者而言,Docker CE 已完全够用。只有在需要高可用编排、安全审计和长期支持的企业级场景下才考虑 EE。
📌 补充知识:Docker 的上游开源项目是 Moby,它提供了构建容器系统的模块化工具集。
如果你计划将 Docker 与 Kubernetes 集成,请务必参考 k8s 官方文档中的运行时兼容性列表,避免因版本不匹配引发调度异常。
CentOS 安装方式一:通过 YUM 添加阿里云源(推荐)
在 CentOS 7/8 环境中,推荐使用 yum 包管理器配合国内镜像源安装,速度远超官方源。
# 安装必要工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加阿里云 Docker CE 仓库 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新缓存并安装最新版 Docker CE sudo yum makecache fast sudo yum -y install docker-ce # 启动服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker✅ 验证安装成功:
执行docker version应同时显示 Client 和 Server 的版本信息。
如何查看可安装版本?
yum list docker-ce.x86_64 --showduplicates | sort -r输出示例:
docker-ce.x86_64 3:24.06.1-1.el7 @docker-ce-stable docker-ce.x86_64 3:24.05.0-1.el7 @docker-ce-stable ...你可以指定版本进行安装,例如:
sudo yum -y install docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io这在生产环境中尤为重要——确保集群节点版本一致,防止意外升级破坏稳定性。
Ubuntu 安装步骤详解(18.04+ LTS 推荐)
适用于 Ubuntu 18.04、20.04、22.04 等长期支持版本。
# 卸载旧版本(如有) sudo apt-get remove docker docker-engine docker.io containerd runc # 更新索引并安装依赖 sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common # 添加阿里云 GPG 密钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # 添加阿里云 APT 源 sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" # 安装 Docker CE sudo apt-get update sudo apt-get -y install docker-ce docker-ce-cli containerd.io查看可用版本
apt-cache madison docker-ce输出类似:
docker-ce | 5:24.06.1~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages同样支持指定版本安装。
启动与验证
sudo systemctl start docker sudo systemctl enable docker最后运行docker version确认客户端和服务端均已正常启动。
常见问题修复:Python 软链接缺失
在某些精简系统或定制镜像中,可能会遇到如下错误:
/usr/bin/python: No such file or directory这是因为系统只安装了python3,但未创建通用的python命令软链接。解决方法很简单:
ln -sf /usr/bin/python3 /usr/bin/python⚠️ 注意:该操作仅对当前会话有效。若需永久生效,建议将其写入初始化脚本(如.bashrc或容器启动脚本)。
解读docker info输出信息
执行docker info可获取引擎详细状态,是排查问题的重要依据。以下是关键字段解析:
Containers: 1 Running: 1 Paused: 0 Stopped: 0 Images: 3 Server Version: 24.06.1 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: v1.6.21 runc version: 1.1.12 Kernel Version: 5.4.0-91-generic Operating System: Ubuntu 20.04.6 LTS Architecture: x86_64 CPUs: 4 Total Memory: 15.6GiB Name: host-machine ID: ABCD:EFGH:IJKL:MNOP:QRST:UVWX:YZAB:CDEF:GHIJ:KLMN:OPQR:STUV Docker Root Dir: /var/lib/docker Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Registry Mirrors: https://xxx.mirror.aliyuncs.com/ Live Restore Enabled: false| 字段 | 说明 |
|---|---|
Storage Driver | 推荐使用overlay2,性能最优且广泛支持 |
Supports d_type | 必须为true,否则无法正确处理联合文件系统 |
Docker Root Dir | 所有镜像、容器数据存储位置,注意磁盘空间规划 |
Registry Mirrors | 镜像加速地址,直接影响 pull 效率 |
如果发现Supports d_type: false,通常意味着底层文件系统不是 ext4/xfs,可能导致容器启动失败。
配置镜像加速器(国内用户必做)
由于网络原因,直接从 Docker Hub 拉取镜像往往非常缓慢。强烈建议配置国内镜像加速服务,尤其是阿里云用户提供专属加速地址。
获取加速地址
登录 阿里云容器镜像服务控制台,即可看到你的专属 HTTPS 加速地址(形如https://xxxx.mirror.aliyuncs.com)。
配置 daemon.json
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://jcmwo9z2.mirror.aliyuncs.com"] } EOF # 重载配置并重启 sudo systemctl daemon-reload sudo systemctl restart docker✅ 验证是否生效:
再次运行docker info,检查Registry Mirrors是否已加载你配置的地址。
镜像管理常用命令
Docker 镜像是静态模板,用于创建容器实例。掌握基本的镜像操作是日常开发的基础。
搜索镜像
docker search alpine返回结果包括名称、描述、星标数及是否为官方镜像(OFFICIAL=OK)。
下载镜像
# 拉取指定标签 docker pull nginx:1.16.1 # 拉取最新版 docker pull ubuntu:latest查看本地镜像
docker images输出列含义:
| 列名 | 说明 |
|---|---|
| REPOSITORY | 镜像仓库名 |
| TAG | 版本标签 |
| IMAGE ID | 唯一标识符 |
| CREATED | 创建时间 |
| SIZE | 镜像大小 |
导出与导入镜像(跨主机迁移)
# 导出为 tar.gz 文件 docker save nginx:1.16.1 -o /opt/nginx.tar.gz docker save alpine | gzip > /opt/alpine.tar.gz # 从文件加载 docker load -i /opt/nginx.tar.gz gunzip -c /opt/alpine.tar.gz | docker load这个技巧非常适合离线部署或 CI/CD 中缓存中间镜像。
删除镜像
# 按 ID 或名称删除 docker rmi a187dde48cd2 docker rmi alpine:latest # 强制删除(即使被容器引用) docker rmi -f nginx❗ 注意:正在运行的容器所使用的镜像不能直接删除,必须先停止并移除相关容器。
实战案例:YOLOFuse 多模态目标检测镜像使用指南
现在我们进入实际应用场景。假设你要参与一个红外与可见光融合的目标检测项目,传统的做法是从头配置 CUDA、PyTorch、Ultralytics 框架……但现在,只需一条命令即可拥有完整环境。
欢迎使用YOLOFuse 社区镜像!这是一个基于 Ultralytics YOLO 构建的预配置容器,专为 RGB + 红外双流检测设计,开箱即用,无需任何环境配置。
核心优势
- ⚡️ 零依赖配置:PyTorch、CUDA、OpenCV 等全部预装,代码位于
/root/YOLOFuse - 🛠 多种融合策略:支持决策级、特征级(早期/中期)等多种融合方式
- 📊 性能优越:在 LLVIP 数据集上表现优异,尤其适合低光照、烟雾等复杂场景
目录结构说明
进入容器后,主要工作路径如下:
| 路径/文件 | 功能说明 |
|---|---|
/root/YOLOFuse/ | 项目根目录 |
train_dual.py | 双流训练脚本 |
infer_dual.py | 推理测试脚本 |
runs/fuse | 训练输出目录(权重、日志、曲线图) |
runs/predict/exp | 推理结果保存路径(带框标注图片) |
快速开始三步走
第一步:修复 Python 软链接(首次运行)
若提示找不到python命令,请执行:
ln -sf /usr/bin/python3 /usr/bin/python第二步:运行推理 Demo
立即体验效果:
cd /root/YOLOFuse python infer_dual.py运行结束后,前往/root/YOLOFuse/runs/predict/exp查看生成的检测图像,直观感受融合模型的能力。
第三步:启动训练
使用内置 LLVIP 数据集直接训练:
cd /root/YOLOFuse python train_dual.py训练过程的日志和最佳权重将自动保存至runs/fuse目录,便于后续分析和调优。
如何训练自己的数据集?
虽然镜像已包含 LLVIP 数据集,但你当然也可以用自己的数据进行训练。
1. 数据组织格式
请按照以下结构整理数据(建议上传至/root/YOLOFuse/datasets/your_dataset):
your_dataset/ ├── images/ # 存放 RGB 图像 │ └── 001.jpg ├── imagesIR/ # 存放红外图像(必须与RGB同名) │ └── 001.jpg └── labels/ # YOLO 格式 txt 标注文件 └── 001.txt⚠️ 关键点:RGB 与 IR 图像必须一一对应且文件名相同!
2. 修改配置文件
找到项目的配置文件(通常在cfg/data.yaml或data/目录下),更新path、train、val等路径指向你的数据集。
3. 再次运行训练脚本
python train_dual.py即可开始训练专属模型。
不同融合策略性能对比(LLVIP 基准)
| 策略 | mAP@50 | 模型大小 | 特点 |
|---|---|---|---|
| 中期特征融合 | 94.7% | 2.61 MB | ✅ 推荐:参数最少,效率最高 |
| 早期特征融合 | 95.5% | 5.20 MB | 精度略高,适合小目标检测 |
| 决策级融合 | 95.5% | 8.80 MB | 鲁棒性强,计算开销较大 |
| DEYOLO | 95.2% | 11.85 MB | 学术前沿实现,资源消耗大 |
根据你的硬件条件和精度需求合理选择策略。一般情况下,“中期融合”已是性价比极佳的选择。
常见问题解答(FAQ)
Q:终端报错/usr/bin/python: No such file or directory?
A:执行ln -sf /usr/bin/python3 /usr/bin/python即可修复。
Q:我只有 RGB 图片,没有红外数据怎么办?
A:YOLOFuse 是专为双模态设计的。若仅有单模态数据,建议改用原版 YOLOv8;若仅为测试流程,可复制一份 RGB 数据到imagesIR目录(仅形式上满足结构,无实际融合意义)。
Q:推理结果图片保存在哪里?
A:请查看/root/YOLOFuse/runs/predict/exp目录。
如果你觉得这个镜像对你有所帮助,欢迎访问 GitHub 给作者点个 Star ⭐️
https://github.com/WangQvQ/YOLOFuse
这种以预构建镜像为核心的开发模式,正在成为 AI 工程化的标准实践之一——把环境问题交给容器,把创造力留给算法。