云安全
云安全概述
阿里云概述
亚马逊AWS概述
云计算导论
云计算概述
云计算的关键技术
虚拟化
分布式文件系统
云存储
数据处理
并行计算
OpenStack
容器
Kubernetes概述
Serverless
Hadoop
云原生
云数据中心
微服务
对象存储OSS
云存储
对象存储
对象文件(Object)
存储桶(存储空间)
通过外网访问OSS
存储桶漏洞
STS访问OSS
权限与访问控制
访问控制
Bucket&RAM Policy
预签名
Docker
01docker概述
02docker安装
03目录结构
04基础操作
05底层原理【理论】
06底层原理【实践】
07DockerFile
08容器反查Dockerfile
09Docker 逃逸
-
+
首页
01docker概述
 Docker 是一个开源的容器化平台,它通过轻量级的容器技术实现了应用程序及其依赖的 “一次构建,到处运行”,解决了传统软件开发中 “开发环境能跑,生产环境跑不起来” 的环境一致性问题,极大提升了应用部署、扩展和运维的效率。 ## 概述 Docker 的核心是**容器化技术**:通过对应用程序及其依赖(如库、配置文件等)进行封装,形成一个独立的 “容器”,使得应用可以在任何支持 Docker 的环境中(物理机、虚拟机、云服务器等)以相同的方式运行。 与传统虚拟机(VM)相比,容器不依赖完整的操作系统内核,而是共享宿主机的内核,因此启动更快(秒级)、资源占用更低(仅需应用本身的资源)、可移植性更强。 ## 基础概念  > 镜像(image) 镜像是 Docker 容器的 **“模板”** ,是一个只读的静态文件,包含运行应用所需的完整文件系统(代码、运行时、库、环境变量、配置文件等)。 特点: - 只读性:一旦构建完成,镜像内容不可修改(若需修改,需基于原镜像创建新镜像)。 - 分层存储:镜像由多个只读层(Layer)叠加而成,每层对应 Dockerfile 中的一条指令(如 RUN COPY)。分层设计使得镜像复用、传输更高效(相同层可共享,无需重复下载)。 > 容器(container) 容器是镜像的**运行实例**,是一个动态的、可读写的环境。可以理解为:容器 = 镜像 + 一层可写层(容器运行时产生的临时数据会保存在这一层)。 特点: - 隔离性:容器之间通过 Linux 命名空间(Namespace)、控制组(CGroup)等技术实现资源(CPU、内存、网络、文件系统)隔离,互不干扰。 - 可操作性:支持启动、停止、重启、删除等生命周期管理(如 docker run docker stop)。 - 临时性:容器删除后,其可写层的数据会丢失(需通过 “数据卷” 持久化)。 > Dockerfile 用于构建镜像的文本文件,包含一系列构建指令(如 FROM RUN COPY CMD 等),描述了如何从基础镜像开始,逐步添加文件、安装依赖、配置环境,最终生成目标镜像。 ```dockerfile #示例 FROM python:3.9 # 基础镜像 WORKDIR /app # 设置工作目录 COPY . . # 复制当前目录文件到容器 RUN pip install -r requirements.txt # 安装依赖 CMD ["python", "app.py"] # 容器启动命令 ``` > 仓库(Repository) 用于存储和分发镜像的 “仓库”,类似代码仓库(如 GitHub)。仓库分为公开仓库(如 Docker Hub,全球最大的公共镜像仓库)和私有仓库(企业内部自建,如 Harbor)。 镜像标签(Tag):用于区分同一仓库中的不同版本镜像(如 nginx:1.21 nginx:latest)。 仓库地址格式:[仓库域名]/[用户名]/[镜像名]:[标签](如 docker.io/library/nginx:latest)。 ## 架构 Docker 采用客户端 - 服务器(C/S)架构。 > Docker客户端 用户与 Docker 交互的入口,支持命令行(docker 命令)、API 或图形化工具(如 Docker Desktop)。 功能:接收用户指令(如 docker build docker run),并将指令发送给 Docker 守护进程。 > Docker 守护进程(Docker Daemon) 运行在宿主机上的后台进程(dockerd),负责管理 Docker 镜像、容器、网络、存储等核心资源。 功能:接收客户端指令,执行镜像构建、容器创建 / 启动 / 停止、镜像推送 / 拉取等操作,并通过 Docker API 与客户端通信。 > Docker 仓库(Docker Registry) 用于存储和分发镜像的远程服务(如 Docker Hub)。 交互流程:用户通过 docker push 将本地镜像推送到仓库,通过 docker pull 从仓库拉取镜像到本地。 > 容器运行时(Container Runtime) 负责容器的实际创建和运行,Docker 早期使用自研的 libcontainer,目前遵循 OCI(开放容器倡议) 标准,默认使用 containerd(一个高性能的容器运行时,2019 年从 Docker 剥离并捐给 CNCF)。 > 架构交互流程 1. 用户通过 Docker 客户端执行命令(如 docker run nginx); 2. 客户端将命令发送给 Docker 守护进程; 3. 守护进程检查本地是否有 nginx 镜像,若无则从 Docker Hub 拉取; 4. 守护进程基于镜像创建容器,并通过 containerd 启动容器; 5. 容器运行后,客户端可通过 docker ps 查看状态。 ## 特性 轻量级:容器共享宿主机内核,无需像虚拟机一样加载完整操作系统,启动速度快(秒级),资源占用低(内存、磁盘开销远小于 VM)。 可移植性:镜像包含应用所有依赖,确保在开发、测试、生产等不同环境中运行结果一致(“Build once, run anywhere”)。 隔离性:通过 Linux Namespace(隔离进程、网络、文件系统等)和 CGroup(限制 CPU、内存等资源)实现容器间隔离,避免相互干扰。 可扩展性:支持通过 Docker Compose(单机多容器编排)或 Kubernetes(多机容器编排)快速扩展容器数量,适应高并发场景。 版本化:镜像支持标签(Tag)管理,可追溯不同版本,便于回滚。 ## 网络 Docker 提供多种网络模式,满足不同场景的通信需求: | 网络模式 | 描述 | | -------------- | ------------------------------------------------ | | bridge(默认) | 容器通过虚拟网桥与宿主机及其他容器通信(最常用) | | host | 容器直接使用宿主机网络(无网络隔离,性能好) | | none | 容器无网络(仅用于特殊场景) | | container | 与指定容器共享网络(如父子容器通信) | | overlay | 跨主机容器通信(用于 Swarm 或 Kubernetes 集群) | ## 存储 容器的可写层数据在容器删除后会丢失,需通过以下方式持久化数据: - 数据卷(Volume):Docker 管理的宿主机文件系统目录(独立于容器生命周期,最推荐)。 - 绑定挂载(Bind Mount):将宿主机任意目录挂载到容器(依赖宿主机目录结构,可移植性差)。 - tmpfs 挂载:数据存储在宿主机内存中(临时数据,速度快,容器删除后丢失)。 ## 与虚拟机(VM)的区别 | 特性 | Docker 容器 | 传统虚拟机(VM) | | -------- | ------------------------- | ---------------------- | | 内核 | 共享宿主机内核 | 每个 VM 有独立内核 | | 启动速度 | 秒级 | 分钟级 | | 资源占用 | 低(仅需应用资源) | 高(需完整 OS 资源) | | 隔离性 | 进程级隔离(轻量) | 完全隔离(重量级) | | 镜像大小 | MB 级(仅包含应用及依赖) | GB 级(包含完整 OS) | | 可移植性 | 强(一次构建,到处运行) | 弱(依赖 VM 镜像格式) |
毛林
2025年10月21日 20:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码