#Docker组件

##Docker源码架构

┌──────────────────────────────────────────────────────────┐
│                    Docker CLI (docker)                       │
│                   github.com/docker/cli                      │
│                      (Cobra 框架)                            │
└───────────────────────┬──────────────────────────────────┘
                        │ HTTP/REST API
┌───────────────────────▼──────────────────────────────────┐
│                 Docker Daemon (dockerd)                      │
│                  github.com/moby/moby                        │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │   API层     │  │  镜像管理    │  │     容器管理        │  │
│  └──────┬──────┘  └──────┬──────┘  └──────────┬──────────┘  │
│         └─────────────────┴────────────────────┘             │
│                         │                                    │
│         ┌───────────────▼───────────────┐                    │
│         │      containerd (gRPC)        │                    │
│         │   github.com/containerd/...   │                    │
│         └───────────────┬───────────────┘                    │
│                         │                                    │
│    ┌────────────────────┼────────────────────┐               │
│    │                    │                    │               │
│    ▼                    ▼                    ▼               │
│ containerd-shim    containerd-shim      containerd-shim      │
│    │                    │                    │               │
│    ▼                    ▼                    ▼               │
│   runC               runC                 runC               │
│ (OCI Runtime)    (OCI Runtime)       (OCI Runtime)           │
└──────────────────────────────────────────────────────────┘

##Docker的核心组件

1. Docker Engine 守护进程、API、运行时管理

2. Docker CLI 命令行客户端

3. Containerd 核心运行时

4. Runc           OCI运行时

5. BuildKit      镜像构建引擎

6. Docker Compose   多容器编排工具

7. Docker Swarm     原生集群编排

#Docker原理

##容器运行时组件

┌─────────────────────────────────────────┐
│           containerd (daemon)            │
│  ┌─────────┐ ┌─────────┐ ┌───────────┐  │
│  │  Metadata │ │  Content │ │  Snapshot │  │
│  │  (BoltDB) │ │  Store   │ │   (存储)   │  │
│  └─────────┘ └─────────┘ └───────────┘  │
│  ┌─────────┐ ┌─────────┐ ┌───────────┐  │
│  │  Runtime  │ │   Task   │ │   Image   │  │
│  │  (运行时)  │ │ (任务管理) │ │  (镜像服务) │  │
│  └─────────┘ └─────────┘ └───────────┘  │
└─────────────────┬───────────────────────┘
                  │ gRPC / ttrpc
┌─────────────────▼───────────────────────┐
│         containerd-shim                │
│    (每个容器一个 shim 进程,保活作用)      │
└─────────────────┬───────────────────────┘
                  │
┌─────────────────▼───────────────────────┐
│              runC                      │
│    (OCI Runtime,实际创建容器命名空间)      │
└─────────────────────────────────────────┘

##容器间的通信方式

| 方式                      | 通信范围  | DNS 支持  | 隔离性      | 性能          | 适用场景       |
| ------------------------| ------------- | -------------- | ------------------ | ----------- | -------------------- |
| **默认 Bridge**     | 单主机      | ❌ 仅 IP  | 差(全容器互通) | 中           | 快速测试       |
| **自定义 Bridge** | 单主机       | ✅ 服务名   | 好(网络隔离)  | 中           | **生产环境首选** |
| **Host**                | 主机+外部 | 宿主机 DNS | 无        | 最高          | 高性能网络应用    |
| **Container**        | 共享栈       | 共享      | 无        | 高           | Sidecar 模式 |
| **Overlay**            | 多主机       | ✅ 服务名   | 好        | 中(VXLAN 开销) | Swarm 集群   |
| **None**                  | 无            | 无       | 完全隔离     | -           | 安全敏感场景     |

#容器管理命令

##创建不同通信类型的容器命令

1.默认Bridge 

docker run -d --name web nginx

2. 自定义Birdge

docker run -d --name web --network my-network nginx

3. 共享主机网络栈

docker run -d --name web --network host nginx

4. Container模式-新容器与指定容器共享网络栈

docker run -d --name debug --network container:web busybox

5.完全隔离

docker run -d --name isolated --network none nginx

##创建容器命令的解析

docker run -d --name web --network my-network nginx
│           │    │           │            │
│           │    │           │            └── 镜像名称(从 Docker Hub 拉取)
│           │    │           └── 网络名称(用户之前创建的)
│           │    └── 容器名称(用户自定义)
│           └── 后台运行模式
└── 创建并运行容器命令

更多推荐