本次笔记记录了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实现资源隔离,理解这些核心原理是掌握容器技术的关键。

Logo

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

更多推荐