小陈的知识图谱
DockerL1 基础核心重点

Docker 基础概念

容器 vs 虚拟机、镜像/容器/仓库、Docker 架构与安装

容器与虚拟机

容器和虚拟机都是"隔离环境",但实现原理完全不同。

对比

维度容器虚拟机
隔离级别进程级隔离(OS 共享)硬件级虚拟化
内核共享宿主机内核每个 VM 独立内核
启动时间毫秒级分钟级
镜像大小MB 级GB 级
资源开销低(仅进程开销)高(完整 OS 开销)
密度一台宿主机可跑数百个一台宿主机跑数个到数十个

虚拟机:
┌─────────────────────┐
│   Hypervisor         │
├──────┬───────┬──────┤
│ VM1  │ VM2   │ VM3  │
│ OS   │ OS    │ OS   │
│ App  │ App   │ App  │
└──────┴───────┴──────┘

容器:
┌─────────────────────┐
│   Host OS / Kernel   │
├──────┬───────┬──────┤
│ 容器1 │ 容器2 │ 容器3 │
│ App   │ App   │ App  │
└──────┴───────┴──────┘

三大核心概念

镜像(Image)

镜像是一个只读模板,包含运行应用所需的全部文件(代码、运行时、库、环境变量)。

# 一个简单的镜像定义
FROM openjdk:17-slim
WORKDIR /app
COPY target/myapp.jar .
EXPOSE 8080
CMD ["java", "-jar", "myapp.jar"]

  • 镜像由多层(Layer)组成,每层只读
  • 层可以被复用和缓存
  • 镜像构建后不可变

容器(Container)

容器是镜像的运行实例,在镜像层之上添加一个可写层。

┌─────────────────┐
│  容器(可写层)    │ ← 容器删除后数据丢失
├─────────────────┤
│  镜像层 3         │
├─────────────────┤
│  镜像层 2         │
├─────────────────┤
│  镜像层 1(基础层) │
└─────────────────┘

仓库(Registry)

  • Docker Hub:Docker 官方公共仓库
  • 私有仓库:Harbor、AWS ECR、阿里云 ACR
  • 镜像命名:[仓库地址/][命名空间/]镜像名:标签

Docker 架构

Docker 使用 C/S(Client/Server)架构:

┌──────────┐     REST API      ┌──────────────┐
│  Client   │ ──────────────→   │   Daemon      │
│ (docker   │   (socket/HTTP)  │   (dockerd)   │
│  CLI)     │                  │               │
└──────────┘                   └──────┬────────┘
                                      │
                     ┌────────────────┼────────────────┐
                     ▼                ▼                 ▼
               ┌──────────┐   ┌──────────┐   ┌──────────────┐
               │ containerd │   │ 网络     │   │  存储卷       │
               │ (运行时)    │   │ (CNI)   │   │ (Volume)     │
               └──────────┘   └──────────┘   └──────────────┘

常用命令

生命周期

# 运行容器
docker run -d --name myapp -p 8080:8080 nginx:alpine

查看运行中的容器

docker ps

查看所有容器(含已停止)

docker ps -a

停止容器

docker stop myapp

启动已停止容器

docker start myapp

删除容器

docker rm myapp

强制删除运行中的容器

docker rm -f myapp

镜像管理

# 拉取镜像
docker pull nginx:alpine

列出镜像

docker images

删除镜像

docker rmi nginx:alpine

构建镜像

docker build -t myapp:latest .

导出/导入镜像

docker save myapp:latest > myapp.tar docker load < myapp.tar

交互与调试

# 进入容器 Shell
docker exec -it myapp /bin/sh

查看日志

docker logs -f myapp

查看资源占用

docker stats

查看容器详细信息

docker inspect myapp

查看容器进程

docker top myapp

容器生命周期

docker create
                       │
                       ▼
                  ┌─────────┐
                  │ Created  │
                  └────┬────┘
                       │ docker start
                       ▼
                  ┌─────────┐
        ┌────────→│ Running  │──┐
        │         └────┬────┘  │
        │              │       │
   docker pause     docker     │ docker stop
        │           restart    │
        │              │       │
        │         ┌────┴────┐  │
        └─────────┤ Paused  │  │
                  └─────────┘  │
                               │
                          ┌────▼────┐
                          │ Stopped │
                          └────┬────┘
                               │ docker rm
                               ▼
                          ┌─────────┐
                          │ Removed  │
                          └─────────┘

容器网络模式

模式说明适用场景
bridge(默认)独立网络命名空间,NAT 转发单机多容器通信
host共享宿主机网络栈性能敏感场景
none无网络安全敏感场景
overlay跨主机覆盖网络Swarm/K8s 集群

# 创建自定义网络
docker network create --driver bridge mynet

在指定网络中运行容器

docker run -d --network mynet --name app1 myapp docker run -d --network mynet --name app2 myapp

容器间通过容器名通信

app1 中可以直接 ping app2

核心要点

  • 容器与虚拟机的本质区别
  • 镜像、容器、仓库三大核心概念
  • Docker 架构(C/S 模式与 containerd)
  • 常用命令体系
  • 容器生命周期管理