Docker学习路径——2、安装

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):

  1. 用户执行 docker run hello-world
  2. Client 通过 Unix Socket(或 TCP)连接 Daemon
  3. Daemon 检查本地无 hello-world 镜像 → 从 Docker Hub 拉取
  4. Graph Driver 将镜像以分层方式存入 /var/lib/docker/overlay2/
  5. Network Driver 创建默认 bridge 网络
  6. containerd + runc 启动新容器进程
  7. 输出结果返回 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 用户组

  • 解决

    bash 复制代码
    sudo usermod -aG docker $USER
    newgrp docker  # 刷新组权限

Q3:拉取镜像超时

  • 解决:配置镜像加速器(见上文)

七、总结

阶段 操作
准备 确认系统满足要求(64 位,内核 ≥ 3.8)
安装 配置源 → 安装 docker-ce → 启动服务
验证 docker run hello-world
优化 配置镜像加速、用户组权限
维护 掌握启停、卸载、清理命令

Docker 的安装只是第一步,真正的价值在于如何用它构建、交付和运行应用。在接下来的文章中,我们将学习:

  • 编写 Dockerfile 构建自定义镜像
  • 使用 docker-compose 编排多容器应用
  • 将应用部署到 Kubernetes 集群

现在,你的容器之旅正式启航!

🔗 官方资源

相关推荐
豆包公子2 小时前
程序流监控:AUTOSAR CP 功能安全在裸机 MCU 上的实现(理论篇)
运维·单片机·嵌入式硬件·安全·车载系统·autosar
SteveSenna2 小时前
Trossen Arm MuJoCo自定义1:改变目标物体
人工智能·学习·算法·机器人
添砖java‘’2 小时前
NAT代理、内网打洞和内网穿透
linux·服务器·网络
SilentSamsara2 小时前
Linux 文件系统入门:目录结构不是随便画的
linux·运维·服务器
U盘失踪了3 小时前
go 环境配置
学习
0vvv03 小时前
linux-操作系统(基础
linux
陳10303 小时前
Linux:进程状态和优先级
linux·运维·服务器
网络小白不怕黑3 小时前
二、初识rocky linux
linux·运维
Stella Blog3 小时前
狂神Java基础学习笔记Day03
java·笔记·学习