Docker技术核心原理与基础操作(自用笔记)
本次笔记记录了Docker容器技术的核心原理、架构特点及基础操作,包括镜像分层存储、Copy-on-Write机制、容器与虚拟机的本质区别、镜像/容器/仓库三大核心概念、网络模型、前台进程约束管理、以及常用命令的语义与实践要点。
一、Docker技术起源与定位
1.1解决虚拟机笨重问题
| 对比项 | 虚拟机 | Docker |
| 架构 | 硬件→Hypervisor→Guest OS →应用 | 硬件→Host OS →Docker Engine →容器 |
| 资源开销 | 大(需完整Guest OS) | 小(直接调用Host OS内核) |
| 启动速度 | 分钟级 | 秒级 |
1.2.本质是基于Linux内核的容器化平台
| 特性 | 说明 |
| 核心依赖 | Linux内核隔离技术(cgroups、namespaces) |
| 跨平台支持 | 通过兼容层支持Windows环境 |
1.3跨系统内核嵌入能力
不同操作系统可嵌入其他OS内核环境,因计算机底层指令集统一。
二、核心隔离技术:cgroups
2.1cgroups定义
cgroups(Control Groups):Linux内核提供的资源隔离与限制机制,用于隔离CPU、内存、IO等资源。
2.2隔离的必要性
防止多应用运行时环境串扰,确保各容器运行环境相互独立。
三、Docker核心特性:镜像与容器
3.1镜像定义
将软件配置、依赖库、运行环境打包成独立、可移植、可重复运行的标准包。
3.2镜像与虚拟机模版类比
| 对比项 | 虚拟机模版 | Docker镜像 |
| 包含内容 | 完整操作系统 | 最小化root文件系统 |
| 体积 | GB级别 | MB级别 |
| 启动速度 | 慢 | 快 |
3.3镜像本质:最小化root文件系统
仅包含启动所需基础文件系统(如Ubuntu 16.04最小rootfs),体积极小。
3.4容器定义
镜像运行时的实例,等同于Linux系统中的一个进程。
3.5镜像与容器关系

3.6容器与面向对象类比
| 概念 | 类比 |
| 镜像 | 类(Class) |
| 容器 | 实例(lnstance) |
四、Docker与虚拟机架构对比
4.1架构差异

4.2关节节省:省去Guest OS层
| 优势 | 说明 |
| 资源利用率更高 | 容器直接运行于宿主机内核 |
| 启动更快 | 避免OS启动开销 |
| 体积更小 | 无需完整操作系统 |
五、Docker核心优势与局限
5.1核心优势
| 优势 | 说明 |
| 一次封装,到处运行 | 解决环境不一致导致的软件无法运行问题 |
5.2核心局限
| 局限 | 说明 |
| 默认无持久化存储 | 容器内数据为临时性,删除容器即丢失所有写入数据 |
5.3存储持久化方案
| 方案 | 说明 |
| Volume | Docker管理的数据卷 |
| Bind Mount | 绑定挂载宿主机目录 |
六、Docker三大核心概念
6.1镜像(lmage)
| 特性 | 说明 |
| 类型 | 只读模版 |
| 存储 | 分层存储结构 |
| 作用 | 构成容器运行基础 |
6.2容器(Container)
| 特性 | 说明 |
| 本质 | 镜像运行时的动态实例 |
| 隔离 | 拥有独立进程空间与网格栈 |
6.3仓库(Repository)
| 类型 | 说明 |
| 官方仓库 | Docker Hub(docker.io) |
| 私有仓库 | 企业自建镜像仓库 |
七、Docker网络类型
7.1默认网格模式:bridge(桥接)

| 配置 | 说明 |
| 网桥 | docker |
| 默认网段 | 172.17.0.0/16 |
| 通信方式 | 容器通过docker0网桥接入宿主机网络 |
7.2其他网络模式
| 模式 | 说明 |
| host | 共享宿主机网络命名空间 |
| none | 无网络接口,仅含lo回环设备 |
7.3网络通信原理
依赖 iptables NAT 规则 实现容器与外部网络通信
八、镜像分层存储与Copy-on-Write机制
8.1分层存储结构

特点:
1.镜像由多层只读层叠加构成
2.底层共享基础镜像层
8.2Copy-on-Write(写时复制)机制
| 操作 | 行为 |
| 读操作 |
自上而下逐层查找,找到即返回 |
| 写操作 | 将源文件拷贝至可写层再修改 |
| 删操作 | 在可写层标记删除(whiteout),不实际删除底层文件 |
8.3分层存储优势
| 优势 | 说明 |
| 节省存储空间 | 共享基础层,节省仓库与本地磁盘空间 |
| 节省网络带宽 | 下载时仅拉取缺失层 |
| 提升效率 | 多镜像复用相同层,提升构建与部署效率 |
8.4镜像层数限制
注意:最大层数为127层,超限将导致镜像异常
九、镜像命名规范
9.1完整镜像名格式
registry-host:port/namespace/repository:tag
实例:
docker.io/library/ubuntu:22.04
9.2默认值简化
| 组成部分 | 默认值 |
| registry-host:port | docker.io |
| namespace | libray |
简化写法:
ubuntu:22.04 = docker.io/library/ubuntu:22.04
十、镜像管理核心命令
10.1命令总览
| 命令 | 说明 |
| docker pull | 从远程仓库下载镜像到本地 |
| docker images | 显示本地镜像列表 |
| docker bulid | 基于Dockerfile构建新镜像 |
| docker save | 将镜像导出为tar归档文件 |
| docker load |
从tar归档文件导入镜像 |
| docker rmi | 删除本地镜像 |
| docker tag | 为镜像添加新标签 |
10.2常用命令详解
docker pull
bash
#拉取本地镜像
docker pull ubuntu:22.04
#拉取指定仓库镜像
docker pull registry.example.com/myapp:v1.0
docker images
bash
#查看本地镜像
docker images
#输出字段
#REPOSITORY TAG IMAGE ID CREATED SIZE
docker tag
bash
#为镜像添加标签
docker tag ubuntu:22.04 my-ubuntu:v1
#注意:标签本质为指向同一镜像ID的新引用
docker rmi
bash
#删除镜像
docker rmi ubuntu:22.04
#注意:若被多个标签引用则需先移除所有标签
docker save/docker load
bash
#导出镜像
docker save -o ubuntu.tar ubuntu:22.04
#导入镜像
docker load -i ubuntu.tar
十一、容器生命周期管理
11.1创建并启动容器:docker run
bash
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用选项:
| 选项 | 说明 |
| -d | 后台运行 |
|
-it |
交互式终端 |
| -p | 端口映射(宿主机端口:容器端口) |
| --rm | 退出后自动删除 |
| -v | 挂载卷 |
| -e | 设置环境变量 |
| --name | 指定容器名 |
| --restart | 重启策略 |
示例:
bath
#交互式运行
docker run -it ubuntu:22.04 /bin/bash
#后台允许
docker run -d --name myapp -p 8080:80 nginx:latest
#退出后自动删除
docker run --rm alpine:latest echo "Hello Docker"
11.2容器状态约束:前台进程唯一性
重要:容器必须且仅能有一个前台进程(PID 1),该进程退出则容器终止。

11.3容器进程本质
容器即宿主机上的一个或一组进程,由containerd运行时管理。
11.4容器状态查看:docker ps
bash
#仅显示运行中容器
docker ps
#显示所有容器(含已停止)
docker ps -a
#仅输出容器ID
docker ps -q
11.5容器日志查看:docker logs
bash
#查看容器日志
docker logs <container>
#实时跟踪日志
dicker logs -f <container>
#查看最后100行
docker logs --tail 100 <container>
11.6容器内执行命令:docker exec
bash
#交互式进入容器
docker exec -it <container> /bin/bash
#非交互式执行单挑命令
docker exec <container> ls /app
#以指定用户执行
docker exec -u root <container> command
十二、Docker引擎配置与启动
12.1默认监听方式:Unix Socket
| 配置 | 说明 |
| 默认监听 | /var/run/docker.sock |
| 特点 | 仅本地访问,不开放TCP端口 |
12.2启用远程API
bash
#启动时添加参数
dockerd -H tcp://0.0.0.0:2375
安全警告:开放远程API需配合TLS认证,否则存在安全风险。
12.3守护进程重启策略
| 策略 | 说明 |
| --restart always | 无论何种退出原因均自动重启 |
| --restart on-failure[:max-retries] | 仅在非零退出码时重启 |
实例:
bash
docker run -d --restart always nginx
docker run -d --restart on-failure:5 myapp
十三、Docker存储与数据管理
13.1默认数据根目录
| 目录 | 说明 |
| /var/lib/docker | 存储镜像层、容器文件系统、卷(volume)等所有Docker数据 |
13.2容器临时存储特性
重要:容器内所有写入操作均发生在可写层,容器删除后数据永久丢失。
十四、Docker安装与环境适配
14.1OpenEuler系统适配说明
Docker官方未正式适配OpenEuler24.03,需参考社区文档或使用兼容版本(如CentOS Stream 9)。
14.2Docker CE与EE版本区分
| 版本 | 说明 | 适用场景 |
| Docker CE | Community Edition,免费开源 | 开发测试 |
| Docker EE | Enter prise Edition,商业版 | 生产环境 |
十五、Docker生态演进与学习路径
15.1容器编排工具演进

十六、常用命令速查表
16.1镜像命令
| 命令 | 说明 |
| docker pull <image> | 拉取镜像 |
| docker rmi <image> | 删除镜像 |
| docker tag <image> <new-tag> | 添加标签 |
| docker save -o <file> <image> | 导出镜像 |
| docker load -i <file> | 导入镜像 |
| docker bulid -t <name> . | 构建镜像 |
| docker history <image> | 查看镜像历史 |
| docker inspect <image> | 查看镜像详情 |
| docker images | 查看本地镜像 |
16.2容器命令
| 命令 | 说明 |
| docker run <image> | 创建并启动容器 |
| docker ps | 查看运行中容器 |
| docker ps -a | 查看所有容器 |
| docker start <container> | 启动容器 |
| docker stop <container> | 停止容器 |
| docker restart <container> | 重启容器 |
| docker rm <container> | 删除容器 |
| docker exec -it <container> /bin/bash | 进入容器 |
| docker inspect <container> | 查看容器详情 |
| docker logs <container> | 查看日志 |
| docker cp <src> <container>:<dest> | 复制文件 |
16.3网络命令
| 命令 | 说明 |
| docker network ls | 查看网络列表 |
| docker networe create <name> | 创建网络 |
| docker network rm <name> | 删除网络 |
| docker network inspect <name> | 查看网络详情 |
16.4卷命令
| 命令 | 说明 |
| docker volumw ls | 查看卷列表 |
| docker volume create <name> | 创建卷 |
| docker volume rm <name> | 删除卷 |
| docker volume inspect <name> | 查看卷详情 |
总结
| 模块 | 核心要点 |
| 技术本质 | 基于Linux内核(cgroups、namespaces)的轻量级容器化平台 |
| 架构对比 | 省去Guest OS层,直接调用Host OS内核 |
| 三大核心概念 |
镜像(只读模版)、容器(运行实例)、仓库(存储分发) |
| 分层存储 | 多层只读叠加+Copy-on-Write机制 |
| 网络模型 |
bridge(默认)、host、none |
| 进程约束 | 容器必须有前台进程(PID 1),进程退出则容器终止 |
| 数据持久化 | 默认无持久化,需使用Volume或Bind Mount |
| 生态演进 | Docker→Docker Swarm→Kubernetes |
Docker通过分层存储和Copy-on-Write实现高效的镜像管理,通过cgroups和namespaces实现资源隔离,理解这些核心原理是掌握容器技术的关键。

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)