Docker基础知识
#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 拉取)
│ │ │ └── 网络名称(用户之前创建的)
│ │ └── 容器名称(用户自定义)
│ └── 后台运行模式
└── 创建并运行容器命令
更多推荐
所有评论(0)