Docker 安装与核心架构详解:从零搭建容器运行环境
在上一篇《Docker 入门全解析》中,我们了解了容器技术的优势与应用场景。本文将带你手把手安装 Docker,并深入剖析其核心组件(镜像、容器、仓库)与内部架构,为后续的容器化开发打下坚实基础。
适用环境:
- 操作系统:CentOS 7/8、Rocky Linux、AlmaLinux 等 RHEL 系发行版
- 架构:x86_64(64 位)
- 内核版本:≥ 3.8(推荐 ≥ 4.0)
一、Docker 核心概念三要素
1. 镜像(Image)
- 定义:只读模板,包含运行应用程序所需的所有内容(代码、运行时、库、环境变量、配置文件)。
- 特点 :
- 基于 UnionFS(联合文件系统),采用分层存储结构
- 可通过
Dockerfile构建,也可从仓库拉取 - 最小镜像(如
scratch)仅几 KB,完整 OS 镜像(如 Ubuntu)约 70--200 MB
- 类比 : 镜像 ≈ 虚拟机的"快照" 或 Java 中的"Class"
2. 容器(Container)
- 定义 :镜像的运行实例,是轻量级、可执行的独立软件包。
- 特点 :
- 启动时在镜像顶层创建可写层(Container Layer)
- 拥有独立的进程空间、网络接口、用户 ID 空间
- 生命周期短暂(可随时销毁重建)
- 类比 : 容器 ≈ 虚拟机的"运行实例" 或 Java 中的"Object"
3. 仓库(Repository)
- 定义:集中存储和分发镜像的服务。
- 主流仓库 :
- Docker Hub:官方公共仓库(https://hub.docker.com)
- 私有仓库:Harbor、Nexus、AWS ECR、阿里云 ACR
- 类比 :
- Docker Hub ≈ GitHub(代码托管)
- 私有仓库 ≈ GitLab(企业内源码管理)
📌 关系总结 :
仓库 → 存放 → 镜像 → 运行 → 容器
二、Docker 架构解析(C/S 模型)
Docker 采用客户端-服务器(Client-Server)架构,各模块松耦合协作:

核心组件说明:
| 组件 | 作用 |
|---|---|
| Docker Client | 用户交互入口(docker 命令行工具) |
| Docker Daemon | 后台守护进程(dockerd),接收 Client 请求 |
| Docker Engine | 核心引擎,将请求拆解为 Job 任务 |
| Graph Driver | 管理镜像分层存储(如 overlay2、aufs) |
| Network Driver | 配置容器网络(bridge、host、overlay 等) |
| Exec Driver | 执行容器内命令(现已被 containerd + runc 替代) |
| Libcontainer | 底层容器运行时库(现演进为 runc,符合 OCI 标准) |
工作流程示例(docker run hello-world):
- 用户执行
docker run hello-world - Client 通过 Unix Socket(或 TCP)连接 Daemon
- Daemon 检查本地无
hello-world镜像 → 从 Docker Hub 拉取 - Graph Driver 将镜像以分层方式存入
/var/lib/docker/overlay2/ - Network Driver 创建默认 bridge 网络
- containerd + runc 启动新容器进程
- 输出结果返回 Client 并显示在终端
🔧 关键目录:
- 镜像/容器数据:
/var/lib/docker/- 配置文件:
/etc/docker/daemon.json
三、Docker 安装实战(CentOS/RHEL)
步骤 1:配置系统环境(推荐使用国内镜像加速)
bash
# 使用自动化脚本配置 yum 源、内核参数、关闭防火墙等
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
✅ 该脚本自动完成:
- 替换为国内源
- 升级内核(如需)
- 关闭 SELinux 和 firewalld(生产环境请按需调整)
- 安装必要依赖(
yum-utils,device-mapper-persistent-data)- 安装dockerce
步骤 2:安装 Docker Engine(手动时)
bash
# 安装社区版(CE)
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 验证安装包
rpm -qa | grep docker
💡 版本说明:
docker-ce:Docker 引擎docker-ce-cli:命令行工具containerd.io:容器运行时(CNCF 毕业项目)
步骤 3:启动并验证
bash
# 启动服务 & 设置开机自启
sudo systemctl enable --now docker
# 查看版本信息
docker version
# 运行测试容器
docker run hello-world
预期输出:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
🌐 若拉取镜像慢?配置国内镜像加速器:
json// /etc/docker/daemon.json { "registry-mirrors": ["https://docker.xuanyuan.me"] }重启生效:
systemctl restart docker
四、常用管理命令速查
| 场景 | 命令 |
|---|---|
| 查看状态 | systemctl status docker |
| 查看信息 | docker info |
| 列出镜像 | docker images |
| 列出容器 | docker ps -a |
| 删除容器 | docker rm <container-id> |
| 删除镜像 | docker rmi <image-id> |
五、卸载 Docker(彻底清理)
bash
# 停止服务
sudo systemctl stop docker
# 卸载软件包
sudo yum remove -y docker-ce docker-ce-cli containerd.io
# 删除数据目录(⚠️ 慎用!会丢失所有镜像、容器、卷)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 清理残留配置
sudo rm -rf /etc/docker
⚠️ 警告 :
/var/lib/docker包含所有容器数据,删除后无法恢复!
六、常见问题排查
Q1:docker: command not found
- 原因:未安装或 PATH 未包含
- 解决 :确认
docker-ce-cli已安装,或使用which docker
Q2:权限错误(Permission denied)
-
原因 :非 root 用户未加入
docker用户组 -
解决 :
bashsudo usermod -aG docker $USER newgrp docker # 刷新组权限
Q3:拉取镜像超时
- 解决:配置镜像加速器(见上文)
七、总结
| 阶段 | 操作 |
|---|---|
| 准备 | 确认系统满足要求(64 位,内核 ≥ 3.8) |
| 安装 | 配置源 → 安装 docker-ce → 启动服务 |
| 验证 | docker run hello-world |
| 优化 | 配置镜像加速、用户组权限 |
| 维护 | 掌握启停、卸载、清理命令 |
Docker 的安装只是第一步,真正的价值在于如何用它构建、交付和运行应用。在接下来的文章中,我们将学习:
- 编写
Dockerfile构建自定义镜像 - 使用
docker-compose编排多容器应用 - 将应用部署到 Kubernetes 集群
现在,你的容器之旅正式启航!
🔗 官方资源: