Docker架构与核心概念 #

Docker架构 #

整体架构图 #

text
┌─────────────────────────────────────────────────────────────┐
│                        Docker 架构                           │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
│  │   Client    │    │   Client    │    │   Client    │     │
│  │  (docker)   │    │ (Compose)   │    │  (其他工具)  │     │
│  └──────┬──────┘    └──────┬──────┘    └──────┬──────┘     │
│         │                  │                  │             │
│         └──────────────────┼──────────────────┘             │
│                            │                                │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                   Docker Daemon                      │   │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │   │
│  │  │  image   │ │container │ │ network  │ │volume  │ │   │
│  │  │ builder  │ │ runtime  │ │ manager  │ │manager │ │   │
│  │  └──────────┘ └──────────┘ └──────────┘ └────────┘ │   │
│  └─────────────────────────────────────────────────────┘   │
│                            │                                │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                   containerd                         │   │
│  │  ┌──────────────────────────────────────────────┐   │   │
│  │  │                   runc                        │   │   │
│  │  └──────────────────────────────────────────────┘   │   │
│  └─────────────────────────────────────────────────────┘   │
│                            │                                │
│                            ↓                                │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                  Host Operating System               │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

核心组件 #

组件 说明
Docker Client 命令行工具,与Docker Daemon通信
Docker Daemon Docker守护进程,处理API请求
containerd 容器运行时管理器
runc 底层容器运行时

核心概念 #

1. 镜像(Image) #

什么是镜像? #

Docker镜像是一个只读模板,包含创建Docker容器的指令。镜像由多个层(Layer)组成,每层代表Dockerfile中的一条指令。

text
┌─────────────────────────────────┐
│         应用代码层               │  ← 最上层(可读写)
├─────────────────────────────────┤
│         依赖库层                 │
├─────────────────────────────────┤
│         运行时层                 │
├─────────────────────────────────┤
│         基础系统层               │  ← 最底层(只读)
└─────────────────────────────────┘

镜像特点 #

  • 只读性: 镜像构建后不可修改
  • 分层存储: 每层独立,便于复用
  • 版本管理: 通过标签管理不同版本
  • 轻量级: 共享基础层,节省空间

镜像操作 #

bash
# 查看本地镜像
docker images

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 删除镜像
docker rmi nginx:latest

# 查看镜像详情
docker inspect nginx:latest

# 查看镜像层
docker history nginx:latest

2. 容器(Container) #

什么是容器? #

容器是镜像的运行实例。它是一个轻量级、独立的可执行软件包,包含运行应用所需的所有内容。

text
镜像(Image)  ──run──→  容器(Container)
   只读                  可读写
   静态                  动态
   模板                  实例

容器特点 #

  • 隔离性: 进程、网络、文件系统隔离
  • 轻量级: 共享宿主内核,资源占用少
  • 可移植: 在任何Docker环境运行
  • 可扩展: 快速创建和销毁

容器操作 #

bash
# 创建容器
docker create --name mycontainer nginx

# 启动容器
docker start mycontainer

# 运行容器(创建+启动)
docker run -d --name mycontainer nginx

# 停止容器
docker stop mycontainer

# 删除容器
docker rm mycontainer

# 查看容器详情
docker inspect mycontainer

3. 仓库(Registry) #

什么是仓库? #

Docker仓库是存储和分发Docker镜像的服务。Docker Hub是最常用的公共仓库。

text
┌─────────────────────────────────────────────────────┐
│                   Docker Registry                    │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐ │
│  │  nginx      │  │  redis      │  │  mysql      │ │
│  │  ├─latest   │  │  ├─latest   │  │  ├─latest   │ │
│  │  ├─alpine   │  │  ├─7        │  │  ├─8        │ │
│  │  └─1.23     │  │  └─6        │  │  └─5.7      │ │
│  └─────────────┘  └─────────────┘  └─────────────┘ │
│                                                     │
└─────────────────────────────────────────────────────┘

常用仓库 #

仓库 说明
Docker Hub Docker官方公共仓库
Docker Registry 开源私有仓库
Harbor 企业级私有仓库
阿里云容器镜像服务 国内镜像加速

仓库操作 #

bash
# 登录仓库
docker login

# 登出仓库
docker logout

# 推送镜像
docker push myimage:v1.0

# 拉取镜像
docker pull myimage:v1.0

# 标记镜像
docker tag myimage:v1.0 username/myimage:v1.0

4. 数据卷(Volume) #

什么是数据卷? #

数据卷是独立于容器的持久化存储,用于保存容器产生的数据。

text
┌─────────────────────────────────────────────────────┐
│                     容器生命周期                     │
├─────────────────────────────────────────────────────┤
│                                                     │
│  容器创建 ──→ 运行 ──→ 停止 ──→ 删除                │
│     │                                    │          │
│     │         数据卷(持久化)              │          │
│     └────────────────────────────────────┘          │
│                                                     │
└─────────────────────────────────────────────────────┘

数据卷特点 #

  • 持久化: 容器删除后数据不丢失
  • 共享: 多个容器可共享同一数据卷
  • 独立: 独立于容器生命周期

数据卷操作 #

bash
# 创建数据卷
docker volume create myvolume

# 查看数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect myvolume

# 删除数据卷
docker volume rm myvolume

# 使用数据卷
docker run -v myvolume:/app/data nginx

5. 网络(Network) #

什么是Docker网络? #

Docker网络允许容器之间以及容器与外部世界进行通信。

text
┌─────────────────────────────────────────────────────┐
│                   Docker 网络                        │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌─────────────────────────────────────────────┐   │
│  │              bridge 网络                     │   │
│  │  ┌───────┐  ┌───────┐  ┌───────┐           │   │
│  │  │容器 A │  │容器 B │  │容器 C │           │   │
│  │  └───────┘  └───────┘  └───────┘           │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
│  ┌─────────────────────────────────────────────┐   │
│  │              host 网络                       │   │
│  │  ┌───────┐                                  │   │
│  │  │容器 D │  (使用宿主机网络)                 │   │
│  │  └───────┘                                  │   │
│  └─────────────────────────────────────────────┘   │
│                                                     │
└─────────────────────────────────────────────────────┘

网络类型 #

类型 说明
bridge 默认网络,容器间可通过IP通信
host 容器使用宿主机网络
none 无网络
overlay 跨主机网络(Swarm模式)
macvlan 为容器分配MAC地址

网络操作 #

bash
# 查看网络
docker network ls

# 创建网络
docker network create mynetwork

# 查看网络详情
docker network inspect mynetwork

# 删除网络
docker network rm mynetwork

# 连接容器到网络
docker network connect mynetwork mycontainer

# 断开容器网络
docker network disconnect mynetwork mycontainer

Docker底层技术 #

1. Namespaces(命名空间) #

Namespaces提供资源隔离,Docker使用以下命名空间:

Namespace 隔离内容
pid 进程ID
net 网络设备、协议栈
ipc 信号量、消息队列
mnt 文件系统挂载点
uts 主机名和域名
user 用户和用户组

2. Cgroups(控制组) #

Cgroups提供资源限制和监控:

bash
# 查看容器cgroup配置
cat /sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes
cat /sys/fs/cgroup/cpu/docker/<container_id>/cpu.cfs_quota_us

3. UnionFS(联合文件系统) #

UnionFS实现镜像的分层存储:

text
┌─────────────────────────────────────────────────────┐
│                   联合文件系统                       │
├─────────────────────────────────────────────────────┤
│                                                     │
│  ┌─────────────┐                                   │
│  │ Container   │  ← 容器层(可读写)                 │
│  │ Layer       │                                   │
│  ├─────────────┤                                   │
│  │ Image       │  ← 镜像层(只读)                   │
│  │ Layer 3     │                                   │
│  ├─────────────┤                                   │
│  │ Image       │                                   │
│  │ Layer 2     │                                   │
│  ├─────────────┤                                   │
│  │ Image       │                                   │
│  │ Layer 1     │                                   │
│  └─────────────┘                                   │
│                                                     │
└─────────────────────────────────────────────────────┘

Docker工作流程 #

镜像构建流程 #

text
┌─────────────────────────────────────────────────────┐
│                   镜像构建流程                       │
├─────────────────────────────────────────────────────┤
│                                                     │
│  Dockerfile ──→ Docker Client ──→ Docker Daemon    │
│                                      │              │
│                                      ↓              │
│                              执行每条指令           │
│                                      │              │
│                                      ↓              │
│                              创建新的镜像层         │
│                                      │              │
│                                      ↓              │
│                              最终镜像               │
│                                                     │
└─────────────────────────────────────────────────────┘

容器运行流程 #

text
┌─────────────────────────────────────────────────────┐
│                   容器运行流程                       │
├─────────────────────────────────────────────────────┤
│                                                     │
│  docker run ──→ 检查本地镜像                       │
│       │              │                              │
│       │         (不存在)                            │
│       │              ↓                              │
│       │         拉取镜像                            │
│       │              │                              │
│       └──────────────┘                              │
│                      ↓                              │
│                 创建容器层                          │
│                      ↓                              │
│                 配置网络                            │
│                      ↓                              │
│                 挂载存储                            │
│                      ↓                              │
│                 启动容器                            │
│                                                     │
└─────────────────────────────────────────────────────┘

小结 #

本节深入学习了Docker的架构和核心概念,包括:

  • Docker的客户端-服务器架构
  • 镜像、容器、仓库等核心概念
  • 数据卷和网络的原理
  • Docker底层技术:Namespaces、Cgroups、UnionFS

下一步 #

接下来,让我们学习 镜像基础,深入了解Docker镜像的管理操作。