Docken


文章目录


前言

本文档基于实战教案与企业级应用经验,系统梳理了 Docker 全栈知识体系:从云服务与虚拟化基础铺垫,到 Docker 核心概念、环境搭建、镜像与容器操作,再到网络配置、资源限制、数据持久化、Docker Compose 编排及 Harbor 私有仓库部署,形成 “理论 + 实操 + 场景” 的完整闭环。无论是零基础的技术入门者,还是寻求效率提升的开发 / 运维工程师,都能通过本文档掌握 Docker 核心技能,快速落地容器化部署,适配 CI/CD、微服务架构、多云环境等主流应用场景,为迈入云原生时代筑牢基础。

Docker 核心知识体系(三部分结构化排版)

第一部分:Docker 基础认知(理论铺垫)

1.1 云服务与虚拟化基础

1.1.1 云服务核心模型
服务类型 核心描述 核心优势 主要缺点
IaaS(基础设施即服务) 提供虚拟化计算资源(虚拟机、存储、网络),用户自主配置环境 灵活度高、可扩展性强 管理复杂,需技术支持
PaaS(平台即服务) 提供开发平台,用户聚焦应用开发,无需关注底层硬件/系统 简化开发流程,适配开发者需求 灵活度低,受平台限制
SaaS(软件即服务) 提供现成应用程序,用户直接使用,无需安装维护 快速部署,省时省力 定制化差,依赖服务商
DaaS(数据即服务) 提供数据处理与分析服务,支持访问云端大数据 降低数据管理难度 可能涉及数据隐私风险
1.1.2 虚拟化技术核心分类
  • 全虚拟化:虚拟化软件完全模拟硬件环境,支持多系统独立运行,适配 Linux 与 Windows 共存场景。
  • 半虚拟化:虚拟机与宿主系统协作,需修改客户机内核提升性能,适用于开源系统(如 Linux)的高性能需求。
1.1.3 主流虚拟化产品
  • VMware:企业级主流平台,支持全/半虚拟化(如 ESXi、vSphere)。
  • KVM:Linux 内核内置虚拟化方案,支持硬件虚拟化。
  • Hyper-V:微软推出,集成于 Windows Server。
  • VirtualBox:跨平台(Linux/macOS/Windows),适用于个人与开发者。

1.2 Docker 核心简介

1.2.1 核心价值

Docker 是容器化技术,将应用及其依赖打包为标准化容器,实现“一次封装,到处运行”。相比传统虚拟化,无需部署完整操作系统,资源消耗更低、部署更高效。

1.2.2 发展关键节点
  • 2013 年:Docker 项目发布;
  • 2014 年:Docker 公司成立;
  • 2017 年:推出企业版(EE)与社区版(CE);
  • 2020 年:支持 Docker Compose v2,推荐 Kubernetes 作为容器编排工具;
  • 2023 年:23.x 版本增强云原生应用与 Kubernetes 生态集成。
1.2.3 版本区别(CE vs EE)
版本 适用场景 核心特点 发布周期
CE(社区版) 个人开发者、小型团队 基础容器功能,免费使用 每月更新
EE(企业版) 大规模生产环境 企业级安全性与官方支持 维护周期更长
1.2.4 与传统虚拟化的核心差异
特性 Docker 容器 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 约 50%
单机支持量 上千个 几十个
隔离性 资源隔离/限制 完全隔离
核心差异 共享宿主机内核,无需完整系统 每个实例含独立操作系统,资源开销大

1.3 Docker 核心概念

1.3.1 设计宗旨与 Logo 含义
  • 设计宗旨:Build, Ship and Run Any App, Anywhere(一次封装,到处运行);
  • Logo 解读:蓝色鲸鱼代表宿主机,集装箱代表独立容器,每个容器承载应用及其依赖。
1.3.2 Linux 六大命名空间(资源隔离核心)
命名空间 缩写 核心作用 实现效果
MNT(挂载) MNT 文件系统隔离 每个命名空间有独立挂载点
NET(网络) NET 网络资源隔离 每个命名空间有独立网络栈(网卡、路由表)
PID(进程) PID 进程号隔离 每个命名空间有独立 PID 编号
IPC(间通) IPC 进程间通信隔离 独立 System V IPC 和 POSIX 消息队列
UTS(主机) UTS 主机名/域名隔离 可设置独立主机名和域名
USER(用户) USER 用户名/组名隔离 独立用户和组 ID 映射
1.3.3 Docker 核心架构组件
  • Docker 守护进程(Docker daemon):宿主机后台进程,管理容器生命周期,支持客户端通信;
  • 客户端(Client):用户交互界面,接收命令(如 docker build/pull/run),与守护进程通信;
  • 镜像(Images):只读模板,含创建容器的指令,类似系统安装光盘;
  • 容器(Container):镜像的可运行实例,类似“类与对象”的关系,支持启停、迁移、删除;
  • 仓库(Registry):集中存储与分发镜像的服务(如 Docker Hub 公共仓库、私有仓库)。
1.3.4 核心技术支撑
  • Namespace:实现资源隔离(对应六大命名空间);
  • Cgroup:实现资源限制(CPU、内存、IO 等);
  • 写时复制技术(Copy-on-Write):优化文件操作效率,减少资源占用。

第二部分:Docker 环境搭建与镜像操作(基础实操)

2.1 Docker 安装与配置(CentOS 系统)

2.1.1 安装前提
  • 仅支持 64 位系统;
  • 关闭防火墙与 SELinux:
    systemctl stop firewalld.service
    setenforce 0
    
2.1.2 分步安装流程
  1. 安装依赖包:
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
  2. 设置阿里云镜像源(加速安装):
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  3. 安装 Docker-CE 并设置开机自启:
    yum install -y docker-ce docker-ce-cli containerd.io
    systemctl start docker.service
    systemctl enable docker.service
    
2.1.3 基础验证命令
  • 查看版本:docker --version
  • 查看系统信息:docker info(含容器数、镜像数、存储驱动等)。
2.1.4 关键配置解读(docker info 核心信息)
  • Server 核心字段
    • Containers:总容器数(运行/暂停/停止)、Images:本地镜像数;
    • Storage Driver:存储驱动(默认 overlay2);
    • Cgroup Driver:资源限制驱动(默认 cgroupfs);
    • Registry Mirrors:镜像加速站点(影响下载速度);
    • Docker Root Dir:数据存储目录(默认 /var/lib/docker)。

2.2 Docker 镜像核心操作

2.2.1 搜索镜像(Docker Hub)
docker search nginx  # 按关键字搜索,返回名称、描述、星级等
2.2.2 拉取镜像
docker pull nginx  # 默认拉取 latest 版本,可指定标签(如 nginx:1.20)
2.2.3 镜像加速配置(国内必备)
  • 阿里云加速器配置:
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload
    systemctl restart docker
    
  • 国内备选加速器:华为云、网易云、USTC 等(文档附多个地址)。
2.2.4 镜像信息管理
  • 查看本地所有镜像:
    docker images  # 显示仓库名、标签、镜像ID、创建时间、大小
    
  • 查看镜像详细信息(JSON 格式):
    docker inspect 镜像ID/镜像名:标签  # 含镜像层次、历史记录、配置等
    
  • 查看镜像存储详情:
    cat /var/lib/docker/image/overlay2/repositories.json
    
2.2.5 镜像标签操作
docker tag nginx:latest nginx:web  # 为镜像添加别名,不创建新镜像
docker images | grep nginx  # 验证标签
2.2.6 镜像删除
docker rmi 镜像名:标签  # 删除指定标签(多标签时仅删标签)
docker rmi 镜像ID  # 彻底删除镜像(需先删除依赖容器)
2.2.7 镜像导出与导入(备份/迁移)
  • 导出镜像为 tar 包:
    docker save -o nginx.tar nginx:latest
    
  • 导入镜像:
    docker load < nginx.tar  # 或 docker load -i nginx.tar
    
2.2.8 镜像上传(Docker Hub/私有仓库)
  1. 标签格式化(适配仓库地址):
    docker tag nginx:latest 用户名/nginx:web  # Docker Hub
    docker tag nginx:latest 私有仓库IP/项目名/nginx:web  # 私有仓库
    
  2. 登录仓库:
    docker login  # Docker Hub 登录
    docker login 私有仓库IP  # 私有仓库登录
    
  3. 上传镜像:
    docker push 用户名/nginx:web  # 推送到对应仓库
    

第三部分:Docker 容器核心操作(核心实操)

2.3 容器基础操作

2.3.1 创建容器(仅创建不启动)
# 格式:docker create [选项] 镜像
docker create -it nginx:latest  # -i开启输入,-t分配伪终端,支持交互
docker create -it nginx:latest /bin/bash  # 指定启动后执行的命令
2.3.2 启动/停止/重启容器
# 启动容器(通过容器ID/名称)
docker start 8b0a7be0ff58  # 启动已创建的容器
docker start nginx-test  # 按名称启动

# 停止容器
docker stop 8b0a7be0ff58  # 正常停止
docker stop nginx-test

# 重启容器
docker restart 8b0a7be0ff58
2.3.3 查看容器状态
docker ps  # 查看正在运行的容器
docker ps -a  # 查看所有容器(运行/停止/暂停)
# 输出字段:容器ID、镜像、命令、创建时间、状态、端口、名称
2.3.4 创建并启动容器(一键操作)
# 等同于 docker create + docker start
docker run centos:7 /usr/bin/bash -c ls /  # 执行命令后容器停止
# 核心逻辑:本地找镜像→找到则启动→未找到则下载后启动→未找到镜像则报错
2.3.5 后台持续运行容器
# 添加 -d 选项,容器后台守护运行(需确保内部进程不退出)
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker run -itd --name test1 centos:7 /bin/bash  # 命名并持续运行
2.3.6 容器生命周期与状态
  • 核心状态:created(已创建)、running(运行中)、paused(暂停)、exited(停止)、dead(死亡);
  • 状态区别:
    • docker pause:挂起容器内所有进程;
    • docker stop:10秒内杀死主进程,容器停止。

2.4 容器进阶操作

2.4.1 容器交互(进入运行中的容器)
# 格式:docker exec -it 容器ID/名称 /bin/bash
docker exec -it 2592d3fad0fb /bin/bash  # -i保持输入,-t分配终端
ls  # 容器内执行命令
exit  # 退出容器(容器仍运行)
  • 注意:不加 -d 直接 docker run -it centos:7 bash,退出后容器会停止。
2.4.2 文件复制(宿主机↔容器)
# 宿主机→容器(复制test.txt到容器的/opt目录)
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/

# 容器→宿主机(复制容器内的test.txt到宿主机~/abc123.txt)
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt
2.4.3 容器导出与导入(迁移)
# 导出容器为tar包(运行/停止状态均可)
docker export 2592d3fad0fb > centos7.tar

# 导入为镜像(仅生成镜像,不创建容器)
cat centos7.tar | docker import - centos7:test
2.4.4 容器批量操作(高效管理)
# 批量停止所有容器
docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash
# 或 docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop

# 批量删除所有容器
docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash
# 或 docker rm $(docker ps -a -q)  # 清理后台停止的容器

2.5 容器关键注意事项

  1. 容器与进程绑定:PID=1 的进程退出,容器直接停止,需确保前台进程持续运行;
  2. 命名规范:容器名称唯一,支持通过名称操作容器(比 ID 更易记);
  3. 资源限制:默认无资源限制,生产环境需通过参数限制 CPU、内存(后续章节详解)。

总结

Docker 的价值,在于它用极简的理念解决了复杂的环境一致性与部署效率问题 —— 通过容器封装,开发者无需关注底层环境差异,运维者无需重复配置依赖,实现了 “Build Once, Run Anywhere” 的终极目标。从基础的镜像与容器操作,到进阶的网络定制、资源管控,再到企业级的编排与私有仓库管理,本文档已覆盖 Docker 从入门到实战的全场景知识,助力你打通容器化落地的 “最后一公里”。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐