Docken——初步了解
·
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 分步安装流程
- 安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2 - 设置阿里云镜像源(加速安装):
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo - 安装 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/私有仓库)
- 标签格式化(适配仓库地址):
docker tag nginx:latest 用户名/nginx:web # Docker Hub docker tag nginx:latest 私有仓库IP/项目名/nginx:web # 私有仓库 - 登录仓库:
docker login # Docker Hub 登录 docker login 私有仓库IP # 私有仓库登录 - 上传镜像:
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 容器关键注意事项
- 容器与进程绑定:PID=1 的进程退出,容器直接停止,需确保前台进程持续运行;
- 命名规范:容器名称唯一,支持通过名称操作容器(比 ID 更易记);
- 资源限制:默认无资源限制,生产环境需通过参数限制 CPU、内存(后续章节详解)。
总结
Docker 的价值,在于它用极简的理念解决了复杂的环境一致性与部署效率问题 —— 通过容器封装,开发者无需关注底层环境差异,运维者无需重复配置依赖,实现了 “Build Once, Run Anywhere” 的终极目标。从基础的镜像与容器操作,到进阶的网络定制、资源管控,再到企业级的编排与私有仓库管理,本文档已覆盖 Docker 从入门到实战的全场景知识,助力你打通容器化落地的 “最后一公里”。
更多推荐


所有评论(0)