Docker全阶段:从入门到精通
- 前言
- [一、 云服务与虚拟化基础](#一、 云服务与虚拟化基础)
-
-
- [1.1 云服务模型介绍](#1.1 云服务模型介绍)
- [1.2 常见云服务提供商](#1.2 常见云服务提供商)
- [1.3 虚拟化技术概述](#1.3 虚拟化技术概述)
-
- [1.3.1. 虚拟化类型](#1.3.1. 虚拟化类型)
- [1.3.2. 虚拟化产品](#1.3.2. 虚拟化产品)
- [1.3.3 虚拟化技术选型建议](#1.3.3 虚拟化技术选型建议)
- [1.3.4 虚拟化技术发展趋势](#1.3.4 虚拟化技术发展趋势)
-
- [二、 Docker简介及其重要性](#二、 Docker简介及其重要性)
-
-
- [2.1 为什么使用 Docker](#2.1 为什么使用 Docker)
- [2.2 Docker 发展历史](#2.2 Docker 发展历史)
- [2.3 Docker 版本:CE vs EE](#2.3 Docker 版本:CE vs EE)
- [2.4 Docker 与传统虚拟化的区别](#2.4 Docker 与传统虚拟化的区别)
- [2.5 容器化技术的生态系统](#2.5 容器化技术的生态系统)
- [2.6 Docker 容器的优势](#2.6 Docker 容器的优势)
- [2.7 容器技术的应用场景](#2.7 容器技术的应用场景)
-
- [三、 Docker基础概念](#三、 Docker基础概念)
-
-
- [3.1.1 Docker 的 Logo 设计](#3.1.1 Docker 的 Logo 设计)
- [3.1.2 容器化的优势](#3.1.2 容器化的优势)
- [3.1.3 Docker 容器与虚拟机的区别](#3.1.3 Docker 容器与虚拟机的区别)
- [3.1.4 Linux 六大命名空间(Namespaces)](#3.1.4 Linux 六大命名空间(Namespaces))
- [3.1.5 Docker 架构以及组件](#3.1.5 Docker 架构以及组件)
- [3.1.6 Docker 组成](#3.1.6 Docker 组成)
- [3.1.7 Docker 的核心技术](#3.1.7 Docker 的核心技术)
- [3.1.8 Docker 核心概念](#3.1.8 Docker 核心概念)
-
- [四、 Docker容器管理](#四、 Docker容器管理)
-
-
- [4.1 安装](#4.1 安装)
- [4.2 Docker镜像操作](#4.2 Docker镜像操作)
- [4.2 Docker容器操作](#4.2 Docker容器操作)
-
- 结语
前言
在当今云计算和微服务架构盛行的时代,Docker作为一种轻量级的容器化技术,已经成为开发和运维人员不可或缺的工具。Docker不仅简化了应用的部署和管理,还极大地提高了开发和测试效率。本文将全面介绍Docker的发展历程、基本概念、核心功能以及实际操作,帮助读者从零开始掌握Docker技术。
一、 云服务与虚拟化基础
1.1 云服务模型介绍
云计算通过网络为用户提供可伸缩的计算资源,主要分为以下几种类型:
- IaaS(基础设施即服务) :提供虚拟化计算资源,如虚拟机、存储、网络等。用户可以灵活配置自己的计算环境,但需要负责安装操作系统和管理资源。
- 优点:灵活度高、可扩展性强。
- 缺点:管理复杂,需要较多技术支持。
- PaaS(平台即服务) :提供一个开发平台,用户可以在上面开发应用程序,而无需关注底层硬件或操作系统。
- 优点:简化开发过程,适合开发者。
- 缺点:灵活度较低,可能受到平台限制。
- SaaS(软件即服务) :提供已经构建好的应用程序,用户可以直接使用,无需安装和维护。
- 优点:快速部署,省时省力。
- 缺点:定制化差,依赖于服务提供商。
- DaaS(数据即服务) :提供数据处理和分析服务,用户可以访问、分析云端存储的大数据。
- 优点:降低用户管理数据的难度。
- 缺点:可能涉及数据隐私问题。
1.2 常见云服务提供商
市场上主要的云服务提供商包括阿里云、腾讯云、AWS、Google Cloud、华为云等。这些云服务提供商通常提供各种服务,如存储、计算、网络、CDN等。
1.3 虚拟化技术概述
1.3.1. 虚拟化类型
全虚拟化 (Full Virtualization):
- 定义: 虚拟化软件完全模拟硬件环境,允许多个操作系统共享硬件资源,彼此之间相互独立。
- 工作原理: 虚拟化软件(如虚拟机监控器,VMM)在物理硬件和操作系统之间创建一个抽象层,完全模拟硬件,使得每个虚拟机(VM)都认为自己独占硬件资源。
- 优点:
- 兼容性强,可以在同一硬件上运行多个不同的操作系统(如 Linux 和 Windows)。
- 操作系统和应用程序无需修改即可运行在虚拟机中。
- 缺点:
- 性能开销较大,因为需要完全模拟硬件。
- 适用场景: 需要兼容多个操作系统(如 Linux 与 Windows 同时运行)的环境。
半虚拟化 (Para-Virtualization):
- 定义: 虚拟机与宿主操作系统协作,通过修改操作系统内核来提高性能。
- 工作原理: 虚拟机中的操作系统内核被修改,以便与虚拟化软件协作,直接与硬件交互,而不需要完全模拟硬件。这样可以减少性能开销- 优点:
- 性能较高,因为减少了模拟硬件的开销。
- 适合对性能要求较高的环境。
- 缺点:
- 需要修改操作系统内核,可能不适用于所有操作系统。
- 适用场景: 高性能需求的环境,尤其是优化了开源操作系统(如 Linux)的虚拟化。
1.3.2. 虚拟化产品
VMware 系列
- 产品定位:企业级虚拟化解决方案领导者
- 核心产品 :
- ESXi:裸金属Type-1 Hypervisor,业界标准的企业级虚拟化平台
- vSphere:完整的虚拟化套件,包含vCenter等管理组件
- 技术优势 :
- 成熟的生态系统和丰富的管理功能
- 支持全虚拟化和半虚拟化技术
- 提供高级功能如vMotion、HA、DRS等
- 适用场景:企业数据中心、云计算平台、关键业务系统
KVM (Kernel-based Virtual Machine)
- 技术定位:Linux原生虚拟化解决方案
- 技术特点 :
- 基于Linux内核的Type-1 Hypervisor
- 充分利用硬件虚拟化扩展(Intel VT/AMD-V)
- 与Linux深度集成,性能优异
- 优势 :
- 开源免费,社区支持强大
- 优秀的Linux虚拟化性能
- 灵活的定制能力
- 适用场景:Linux为主的环境、开源项目、成本敏感型应用
Hyper-V
- 技术定位:微软Windows生态虚拟化方案
- 技术特点 :
- Windows Server内置的Type-1 Hypervisor
- 深度集成Windows生态系统
- 支持Windows和Linux虚拟机
- 优势 :
- 与Windows管理工具无缝集成
- 对Windows虚拟机有优化支持
- 适合混合云环境
- 适用场景:Windows服务器环境、微软技术栈、混合云部署
VirtualBox
- 技术定位:通用桌面虚拟化解决方案
- 技术特点 :
- 跨平台支持(Windows、Linux、macOS)
- Type-2 Hypervisor(运行在主机操作系统之上)
- 易用性高,功能丰富
- 优势 :
- 免费开源,使用简单
- 优秀的桌面虚拟化体验
- 适合开发和测试环境
- 适用场景:个人使用、开发测试、教育演示
Xen
- 技术定位:开源虚拟化平台
- 技术特点 :
- 成熟的半虚拟化技术
- 支持大规模虚拟化部署
- 被广泛应用于云计算平台
- 优势 :
- 开源免费,灵活性高
- 良好的性能表现
- 被多个云平台采用
- 适用场景:云计算基础设施、大规模虚拟化
1.3.3 虚拟化技术选型建议
企业级应用推荐:
- 首选方案 :VMware vSphere + ESXi
- 理由:成熟稳定、功能全面、企业级支持
- 替代方案 :Microsoft Hyper-V
- 理由:Windows生态集成、成本效益
Linux环境推荐:
- 首选方案 :KVM + QEMU
- 理由:原生Linux支持、优秀性能
- 替代方案 :Xen
- 理由:开源免费、云计算适用
开发测试环境:
- 推荐方案 :VirtualBox
- 理由:易用性高、跨平台、免费
云计算平台:
- 推荐架构 :KVM/Xen + 自管理工具
- 理由:开源灵活、可定制性强
1.3.4 虚拟化技术发展趋势
- 硬件辅助虚拟化:依赖Intel VT-x/AMD-V等CPU特性提升性能
- 容器化技术:与Docker等轻量级虚拟化技术互补发展
- 云原生集成:与Kubernetes等编排系统深度整合
- 安全增强:强化虚拟化层的安全隔离机制
- 边缘计算:适用于边缘设备的轻量级虚拟化方案
二、 Docker简介及其重要性
2.1 为什么使用 Docker
Docker 是一种轻量级的容器化技术,它允许开发者将应用程序及其所有依赖(如库、环境变量、配置文件等)打包到一个标准化的、可移植的容器中。这个容器可以在任何支持 Docker 的环境中运行,无论底层操作系统或硬件如何,都能保证应用以相同的方式运行,就好比将一个精密设备(应用)装进一个标准集装箱(容器),无论运到哪里,都不需要重新组装或适配。
与传统虚拟化技术(如 VMware、VirtualBox)对比:
特性 | 传统虚拟机(VM) | Docker 容器 |
---|---|---|
操作系统 | 每个虚拟机运行一个完整的操作系统 | 容器共享宿主机的操作系统内核,无需完整 OS |
资源消耗 | 占用较多 CPU、内存和存储资源 | 轻量级,资源占用少 |
启动速度 | 启动慢,通常需要几分钟 | 秒级启动 |
隔离性 | 完全隔离,每个 VM 有独立内核 | 进程级别隔离,共享内核但资源受限 |
部署与迁移 | 部署复杂,迁移不便 | 一键部署,轻松迁移 |
密度 | 单机可运行数十个 VM | 单机可运行上千个容器 |
Docker 的优势体现在:
- 一致性:开发、测试、生产环境一致,避免"在我机器上能跑"的问题。
- 高效性:快速启动、低资源消耗,提高开发和运维效率。
- 可移植性:容器可以在任何支持 Docker 的平台上无缝运行,无论是本地开发机、测试服务器,还是云平台。
- 易于管理:通过 Docker 可以轻松地创建、复制、更新和销毁应用容器。
🚗 类比说明:就像一辆兰博基尼(应用程序)被装进标准化集装箱(Docker 容器),无论这个集装箱被运到 CentOS 还是 Ubuntu 的码头(操作系统环境),它都能以同样的方式快速启动并运行,无需重新适配。
2.2 Docker 发展历史
Docker 是由 Solomon Hykes 及其团队于 2013 年 在公司 DotCloud 内部开始开发的,旨在通过容器技术提供一种更高效、更便捷的应用部署方式。自发布以来,Docker 迅速获得了广泛的社区支持和生态系统发展,成为容器化领域的领导者。
主要发展节点:
- 2013年:Docker 项目正式发布,开启容器化技术的新时代。
- 2014年:Docker 公司成立,专注于容器技术的推广与商业化。
- 2015年:发布 Docker 1.8 版本,引入了新的网络架构和卷管理功能,增强了容器间的通信和数据持久化能力。
- 2017年 :
- 发布 Docker Enterprise Edition (EE) 和 Docker Community Edition (CE),满足不同层次用户的需求。
- 开始支持 Kubernetes 集成,并在 Docker Desktop 中提供 Kubernetes 支持,方便开发者在本地进行容器编排。
- 2018年 :
- Docker 18.09 发布,引入了 多阶段构建(Multi-stage Builds),优化了镜像构建流程,减小镜像体积。
- 增强了 容器日志功能,提升了监控和调试能力。
- Kubernetes 集成进一步深化,让开发者能更便捷地在本地使用 Kubernetes。
- 2019年 :
- Docker 19.03 发布,新增 GPU 加速支持,拓展了容器在高性能计算领域的应用。
- Docker CLI 得到改进,提升了用户体验。
- Docker Desktop 更新,支持在 Windows 和 macOS 上直接运行 Kubernetes 集群,增强了开发者的本地开发体验。
- 2020年 :
- Docker 20.10 发布,增加了对 Docker Compose v2 的支持,改进了编排工具的功能。
- 在性能、稳定性和功能上进行了全面增强。
- Docker 开始更加聚焦于 开发者工具,逐步减少对企业级 Kubernetes 的直接支持。
- 2021年:继续优化本地开发工具,提升 Docker 与 Kubernetes 的集成度,简化开发流程。
- 2022年 :
- 加大对 开发者体验 的关注,推出与 GitHub 等工具的深度集成,提升构建和部署效率。
- 在企业领域,Docker 企业版与 CI/CD 和 DevOps 工具链结合,支持大规模容器化部署。
- 2023年 :
- Docker 23.x 发布,进一步增强对 云原生应用 和 Kubernetes 生态系统 的支持。
- 在 容器优化、安全性、CI/CD 方面推出新功能,提升企业级应用部署的效率和安全性。
- 加强对 开源和社区驱动工具 的支持,巩固其在容器生态中的领导地位。
2.3 Docker 版本:CE vs EE
Docker 提供了两个主要版本,以满足不同用户的需求:
-
Docker Community Edition (CE):
- 适用对象:个人开发者、小型团队或学习用途。
- 特点 :提供基础的容器化功能,免费使用。
- 发布周期:通常每月发布新版本,更新频繁,功能迭代快。
-
Docker Enterprise Edition (EE):
- 适用对象:大型企业、需要高安全性、稳定性和专业支持的组织。
- 特点 :提供企业级的安全性、支持与高级功能 ,通常是付费版本。
- 发布周期:维护周期较长,更新频率相对较低,但稳定性与安全性更高。
选择建议:对于大多数开发者和学习用途,Docker CE 已经足够使用;而对于需要严格安全策略和专业技术支持的企业,可以考虑 Docker EE。
2.4 Docker 与传统虚拟化的区别
Docker 采用操作系统级虚拟化(如 LXC) ,通过共享宿主机的操作系统内核,实现轻量级的容器化。相比传统的虚拟机技术,Docker 容器更加轻便、高效和快速。
特性 | 传统虚拟机 (VM) | Docker 容器 |
---|---|---|
操作系统 | 每个 VM 运行一个完整的操作系统 | 容器共享宿主机的操作系统内核 |
资源消耗 | 高,需要独立的 CPU、内存、存储 | 低,资源共享,资源占用少 |
启动速度 | 慢,通常需要几分钟 | 快,秒级启动 |
隔离性 | 完全隔离,每个 VM 独立运行 | 进程级别隔离,资源受限但共享内核 |
部署密度 | 单机可运行几十个 VM | 单机可运行上千个容器 |
性能 | 接近物理硬件的 50% 左右 | 接近原生性能 |
总结:Docker 容器通过共享宿主机内核,避免了重复加载操作系统,从而实现更快的启动速度、更低的资源消耗和更高的部署密度。
2.5 容器化技术的生态系统
容器技术是一种轻量级、提供隔离的虚拟化技术 ,广泛应用于现代应用的开发、部署和管理。除了 Docker,还有许多其他容器相关技术和平台,构成了丰富的容器化生态系统。
知名容器技术包括:
- Docker:最知名和流行的容器平台,拥有完善的生态系统和活跃的社区。
- Kubernetes:由 Google 开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
- OpenShift:Red Hat 提供的基于 Kubernetes 的企业级容器平台,提供更多企业级功能。
- LXC (Linux Containers):接近传统虚拟化技术的轻量级虚拟化方案,可以视为轻量级 VM。
- Rkt (Rocket):由 CoreOS 开发的容器技术,注重安全性和模块化设计。
- Apache Mesos:用于大规模数据中心的容器编排平台,支持多种调度系统。
- Containerd:开源的容器运行时,是 Docker 的核心组件之一,管理容器的生命周期。
- CRI-O:专为 Kubernetes 设计的轻量级容器运行时。
- Singularity:面向高性能计算(HPC)和计算密集型应用的容器技术。
- Podman:与 Docker 类似的容器引擎,无需守护进程,支持 OCI 容器和镜像。
总结:这些技术共同推动着容器化技术的发展,满足不同场景和需求下的应用部署与管理。
2.6 Docker 容器的优势
Docker 容器相比传统应用部署方式,具备诸多优势:
- 移植性(Portability):应用及其依赖被打包在容器中,能够在任何支持 Docker 的环境中无缝运行。
- 隔离性(Isolation):每个容器独立运行,互不干扰,不会影响宿主机或其他容器。
- 高效性(Efficiency):共享宿主机内核,启动速度快,资源消耗低。
- 简化部署(Simplified Deployment):通过 Dockerfile 定义应用环境,轻松创建、复制、修改和删除容器,简化了应用的管理和部署流程。
- 一致性(Consistency):确保开发、测试、生产环境的一致性,减少"环境差异"带来的问题。
2.7 容器技术的应用场景
容器技术在现代软件开发和运维中有着广泛的应用,主要体现在以下几个方面:
- CI/CD(持续集成与持续交付) :
- 利用 Docker 快速构建、测试和部署应用,确保不同环境之间的一致性,提高开发和交付效率。
- 微服务架构(Microservices Architecture) :
- 容器化与微服务架构天然契合,每个微服务可以独立打包、部署和扩展,提升系统的灵活性和可维护性。
- 多云与混合云环境(Multi-cloud & Hybrid Cloud) :
- 容器的跨平台能力使得应用能够在不同的云服务提供商(如 AWS、Azure、GCP)和本地数据中心之间无缝迁移和部署,提升业务的弹性和可扩展性。
- DevOps 实践 :
- 容器技术是 DevOps 实践中的重要组成部分,通过容器化实现快速迭代、自动化部署和持续监控,提升开发和运维的协作效率。
- 开发与测试环境一致性 :
- 开发人员在本地使用 Docker 容器模拟生产环境,确保在开发、测试阶段就能发现并解决潜在问题,减少上线后的故障率。
三、 Docker基础概念
3.1.1 Docker 的 Logo 设计
Docker 的 Logo 设计非常形象:一条蓝色的鲸鱼,背上驮着许多集装箱。这个设计蕴含了 Docker 的核心理念:
- 鲸鱼 代表 宿主机(Host Machine),即运行 Docker 的物理或虚拟机器。
- 集装箱 代表 Docker 容器(Containers),每个集装箱都是一个独立、隔离的运行环境,承载着具体的应用程序。
- 蓝色大海 代表 操作系统环境 ,如 Windows 10 或 Linux,是容器运行的基础平台。
Docker 的设计宗旨 是实现:Build, Ship, and Run Any App, Anywhere (在任何地方构建、运输和运行任何应用)。通过将应用及其依赖打包到容器中,Docker 实现了应用组件级别的"一次封装,到处运行 "的目标。
Docker 是一个开源的容器化平台,允许开发者将应用程序及其所有依赖环境打包成一个轻量级、可移植的容器,从而简化应用的跨平台部署和管理。
3.1.2 容器化的优势
- 灵活(Flexible):几乎任何复杂的应用都可以被容器化。
- 轻量级(Lightweight):容器共享宿主机的内核,资源占用少。
- 可互换(Interchangeable):容器可以快速部署、更新和替换。
- 便携式(Portable):容器可以在本地构建,部署到云端,或在任何支持 Docker 的环境中运行。
- 可扩展(Scalable):可以根据需求快速增加容器实例,支持自动扩展。
- 可堆叠(Stackable):可以垂直和水平地堆叠多个服务,构建复杂的应用架构。
3.1.3 Docker 容器与虚拟机的区别
特性 | Docker 容器 | 传统虚拟机 (VM) |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗约 50% |
性能 | 接近原生性能 | 较弱,受虚拟化层影响 |
系统支持量(单机) | 可运行上千个容器 | 通常只能运行几十个 VM |
隔离性 | 资源隔离与限制 | 完全隔离,每个 VM 独立运行 |
核心区别 :Docker 容器共享宿主机的操作系统内核,而虚拟机则运行独立的操作系统,这使得容器更加轻量、高效和快速。
3.1.4 Linux 六大命名空间(Namespaces)
Linux 命名空间是实现容器资源隔离的核心技术之一,Docker 利用六大命名空间来隔离容器的不同资源。
命名空间 | 缩写 | 作用 | 效果 |
---|---|---|---|
MNT | 挂载 | 文件系统隔离 | 每个容器拥有独立的文件系统挂载点 |
NET | 网络 | 网络资源隔离 | 每个容器拥有独立的网络栈,包括接口、路由表等 |
PID | 进程 | 进程号隔离 | 每个容器有独立的 PID 编号空间,互不干扰 |
IPC | 间通 | 进程间通信隔离 | 每个容器拥有独立的 System V IPC 和 POSIX 消息队列 |
UTS | 主机 | 主机名、域名隔离 | 每个容器可以设置独立的主机名和域名 |
USER | 用户 | 用户名、组名隔离 | 每个容器可以拥有独立的用户和组 ID 映射 |
总结:通过这些命名空间,Docker 实现了容器之间的资源隔离,确保各个容器在运行时互不干扰,提升安全性和稳定性。
3.1.5 Docker 架构以及组件
Docker 的架构由多个核心组件组成,各司其职,共同实现容器的构建、运行和管理。
- Docker Daemon(Docker 守护进程) :
- 运行在宿主机上的后台进程,负责处理 Docker 对象(如镜像、容器、网络和卷)的创建、运行和管理。
- 用户通过 Docker 客户端与 Docker Daemon 通信。
- Docker Client(Docker 客户端) :
- Docker 的用户界面,通过命令行(CLI)或其他工具与 Docker Daemon 交互。
- 用户输入的命令(如
docker build
、docker run
)通过客户端发送给守护进程执行。
- Images(Docker 镜像) :
- 只读的模板,包含运行容器所需的文件系统、代码、运行时环境、库和依赖。
- 类似于系统安装光盘,通过镜像可以创建和运行容器。
- Containers(Docker 容器) :
- 镜像的可运行实例,具有独立的文件系统、网络和进程空间。
- 容器是镜像的运行时实体,可以通过 Docker API 或 CLI 进行管理(启动、停止、删除等)。
- Registry(Docker 注册表) :
- 集中存储和分发 Docker 镜像的服务。
- Docker Hub 是最常用的公共注册表,用户可以从中获取各种镜像,也可以将自己的镜像推送到 Registry 中。
- 类似于 Maven 仓库,Registry 包含多个仓库(Repositories),每个仓库包含多个镜像标签(Tags),每个标签对应一个具体的镜像版本。

3.1.6 Docker 组成
- 核心主题 - "Docker 组成"
流程图最上方的绿色方框 "Docker 组成" 是整个图的主题,表明这张图是用来解释 Docker 系统是由哪些部分构成的。 - Docker 系统的四大核心组件(从左到右、从下到上梳理)
流程图中主要展示了 Docker 系统的以下几个关键组成部分,它们相互协作,构成了 Docker 的运行环境:
(1) 最底层:Docker 主机 (Docker Host)
"Docker 主机" 是承载 Docker 运行的基础环境 。可以把它理解为安装了 Docker 软件的物理机或者虚拟机(比如你的电脑、云服务器等)。它是 Docker 运行的"土壤",提供了硬件和操作系统的底层支持。
(2) 宿主机操作系统 (宿主机 OS)
在 "Docker 主机" 之上的是 "宿主机 OS"(Operating System,操作系统),例如 Linux 发行版(Ubuntu、CentOS 等)、Windows 或 macOS(不过 Docker 在 Windows/macOS 上通常是基于虚拟机来模拟 Linux 环境运行容器)。
宿主机操作系统是 Docker 守护进程(Docker Daemon)和容器运行的直接载体,它负责管理硬件资源,并为 Docker 提供基础的操作系统服务。
(3) Docker 主进程 (Docker 主进程)
"Docker 主进程"(也常被称为 dockerd,Docker Daemon)是 Docker 服务的核心后台进程 。它在宿主机操作系统中持续运行,负责:
监听和处理来自 Docker 客户端的指令(比如 docker run、docker ps等命令);
管理容器的生命周期(创建、启动、停止、销毁容器等);
与 Docker 镜像仓库交互,拉取或推送镜像;
管理容器的网络、存储等资源。
可以把 Docker 主进程想象成 Docker 系统的"大脑"和"调度中心",协调和管理整个 Docker 生态的运转。
(4) 容器层:容器 A、容器 B、容器 C
"容器 A"、"容器 B"、"容器 C" 代表了基于 Docker 技术运行的一个个独立的容器。容器是 Docker 最具代表性的概念,它是一种轻量级的、可移植的、自给自足的软件运行环境 。
每个容器都包含了运行某个应用所需的所有依赖(代码、运行时环境、库、配置等),多个容器之间相互隔离(资源隔离、网络隔离等),但又可以共享宿主机操作系统的内核(这也是 Docker 比传统虚拟机更轻量的关键原因之一)。
你可以把容器理解成一个个"独立的小盒子",每个盒子里运行着一个或一组相关的应用服务,并且这些小盒子能在不同的环境中快速迁移和部署。
(5) Docker 镜像仓库层:Docker 镜像 A、Docker 镜像 B、Docker 镜像 C、Docker 镜像 D
"Docker 镜像仓库" 区域里的 "Docker 镜像 A"、"Docker 镜像 B"、"Docker 镜像 C"、"Docker 镜像 D" 代表的是Docker 镜像。
Docker 镜像是一个只读的模板,它包含了运行一个容器所需的所有文件系统内容(包括应用代码、运行时环境、库、配置等)。可以把镜像想象成容器的"蓝图"或者"模板"------你基于某个镜像来创建容器,容器运行时就是在镜像的基础上添加可写层来运行应用
Docker 镜像仓库(比如 Docker Hub、阿里云镜像仓库等)是用来存储和分发这些镜像的地方,你可以从仓库中拉取(pull)镜像到本地,也可以把自己制作的镜像推送到仓库中共享。 - Docker 客户端 (Docker 客户端)
右侧的 "Docker 客户端" 是用户与 Docker 系统进行交互的命令行工具或者图形化工具 。
当你在终端里输入 docker命令(比如 docker run nginx来启动一个 Nginx 容器),这些指令会被发送给 Docker 主进程(Docker Daemon),由主进程来执行对应的操作(拉取镜像、创建容器、启动容器等)。
简单来说,Docker 客户端是用户"发号施令"的入口,而 Docker 主进程是"执行命令"的核心。 - 组件之间的交互关系(箭头的含义)
图中的绿色箭头表示了 组件之间的交互和依赖关系:
Docker 主进程 ↔ Docker 客户端:双向箭头说明它们之间是"请求-响应"的交互模式。Docker 客户端向 Docker 主进程发送指令(比如创建容器、查看容器列表等),Docker 主进程执行完操作后,把结果返回给 Docker 客户端展示给用户。
Docker 主进程 ↔ Docker 镜像仓库:双向箭头表示 Docker 主进程可以从 Docker 镜像仓库拉取(pull) 镜像(当你需要基于某个镜像创建容器,但本地没有这个镜像时,主进程会去仓库下载),也可以把本地的镜像推送(push) 到 Docker 镜像仓库(比如你制作了一个自定义镜像,想分享给其他人,就可以推送到仓库)。
Docker 主进程 ↔ 容器 A/B/C:Docker 主进程负责管理和控制容器。它创建容器(基于镜像)、启动/停止/重启容器、监控容器状态、销毁容器等,是容器生命周期管理的核心。
容器 A/B/C ↔ 宿主机 OS:容器运行在宿主机操作系统之上,依赖宿主机 OS 提供的资源(CPU、内存、磁盘、网络等),同时容器也会通过宿主机 OS 来与外部世界(比如其他容器、网络上的服务等)进行交互。宿主机 OS 负责资源的分配和隔离等底层管理工作。
3.1.7 Docker 的核心技术
Docker 实现资源隔离和限制主要依赖以下核心技术:
- Namespace(命名空间):实现资源的隔离,如进程、网络、文件系统等。
- Cgroup(控制组):实现资源的限制与分配,如 CPU、内存、磁盘 I/O 等。
- Copy-on-Write(写时复制):一种高效的文件系统技术,容器在启动时共享宿主机的文件系统,只有在需要修改时才进行复制,节省存储空间并提高启动速度。
3.1.8 Docker 核心概念
- 镜像(Image)
- 定义 :镜像是包含应用程序及其所有依赖环境的只读模板,用于创建 Docker 容器。
- 类比:类似于系统安装光盘或模板,通过镜像可以生成多个容器实例。
- 特点:镜像是不可变的,每次对镜像的修改都会生成一个新的镜像层。
- 容器(Container)
- 定义 :容器是镜像的运行实例,具有独立的运行时环境,包括文件系统、网络和进程空间。
- 特点 :
- 容器之间相互隔离,互不影响。
- 可以通过 Docker 引擎启动、停止、删除和管理。
- 轻量级,启动速度快,资源占用少。
- 仓库(Repository)
- 定义:仓库是存放 Docker 镜像的集中存储与分发服务。
- 类型 :
- 公共仓库 :如 Docker Hub,提供大量官方和社区维护的镜像。
- 私有仓库:企业或组织内部搭建的仓库,用于存储和管理自定义镜像。
- 类比:类似于代码仓库(如 GitHub),Docker 仓库存储和管理镜像,便于镜像的共享与版本控制。
总结:Docker 通过镜像与容器的机制,实现了应用的快速部署、隔离运行和高效管理,结合强大的生态系统和工具链,成为现代应用开发和运维的重要基石。
下一部分预告:我们将探讨 Docker 的安装与配置,了解如何在本地环境中搭建 Docker,并开始创建和管理第一个 Docker 容器。
四、 Docker容器管理
4.1 安装
bash
#关闭防火墙、增强功能
systemctl stop firewalld.service
setenforce 0
#安装依赖
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
yum install -y docker-ce docker-ce-cli containerd.io
#设置开机自启
systemctl start docker.service
systemctl enable docker.service
#查看 Docker 版本
docker --version
查看 Docker 系统信息
docker info
4.2 Docker镜像操作
- 搜索镜像 :使用
docker search
命令在Docker Hub上搜索相关的镜像。 - 获取镜像 :使用
docker pull
命令从Docker Hub拉取镜像。
bash
docker pull mariadb

- 镜像加速下载:配置阿里云、华为云等镜像加速器以提高镜像下载速度。
bash
#阿里
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
EOF
#华为
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
#完成配置需要重新加载配置、重启服务
systemctl daemon-reload
systemctl restart docker
- 查看镜像信息 :使用
docker images
和docker inspect
命令查看镜像信息。
bash
#查看 Docker 本地镜像的详细信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看本地所有镜像
docker images
#获取镜像详细信息
docker inspect [IMAGE ID]
#为本地镜像添加标签
docker tag nginx:latest nginx:web
- 删除镜像 :使用
docker rmi
命令删除指定的镜像。
bash
docker rmi [-f] [REPOSITORY:TAG|IMAGE ID]
- 存储和载入镜像 :使用
docker save
和docker load
命令导出和导入镜像。
bash
#存储
docker save -o [文件].tar [REPOSITORY:TAG]
docker save nginx:latest | {gzip|bzip2} > nginx.tar.{gz|bz2}
docker save nginx:latest > nginx.tar
#载入
docker load < [filename].tar.[gz|bz2]
docker load -i [filename].tar.[gz|bz2]
- 上传镜像到Docker Hub :使用
docker tag
和docker push
命令将镜像上传到Docker Hub。
4.2 Docker容器操作
- 创建容器 :使用
docker create
命令创建一个新容器。
bash
docker create centos:7 /bin/bash # 如果后续尝试交互式启动,可能体验不佳。
docker create -it centos:7 /bin/bash #后续交互式启动友好
- 启动容器 :使用
docker start
命令启动已创建的容器。
bash
docker start [CONTAINER ID|NAMES]

-
停止容器 :使用
docker stop
命令停止正在运行的容器。docker stop [CONTAINER ID|NAMES]
4.查看容器状态 :使用docker ps
和docker ps -a
命令查看容器的运行状态。
- 创建并启动容器 :使用
docker run
命令创建并启动容器。
bash
docker run -d -p 80:80 --name my-nginx nginx:latest
docker run -itd --name cos7 centos:7
- 在后台持续运行容器 :使用
docker run -d
命令让容器以守护形式在后台运行。
bash
docker run -itd --name [NAMES] [名称]:[标签]
- 容器交互 :使用
docker exec
命令进入运行着的容器。
bash
docker exec -it cos7 /bin/bash

- 复制到容器中 :使用
docker cp
命令将宿主机的文件传入到容器内部。
bash
docker cp [文件及路径] [names]:[文件及路径]
docker cp [names]:[文件及路径] [文件及路径]

- 容器的导出与导入 :使用
docker export
和docker import
命令将容器导出为文件并导入。
bash
docker export [CONTAINER ID|NAMES] > [文件名].tar.[gz|bz2]
cat [文件名] | docker import - [名称]:[标签]
- 删除容器 :使用
docker rm
命令删除容器。
bash
docker rm [CONTAINER ID|NAMES] #删除已经终止状态的容器
docker rm -f [CONTAINER ID|NAMES] #强制删除正在运行的容器
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 ps -a | awk 'NR>=2{print $1}'| xargs docker rm
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash #批量删除镜像
docker images | awk '{print $3}' | xargs docker rmi #删除none镜像
docker rm $(docker ps -a -q)
结语
通过本文的介绍,相信读者对Docker有了全面的了解。从云服务与虚拟化基础到Docker的基本概念、核心功能以及实际操作,Docker为现代应用的开发、部署和管理提供了强大的支持。掌握Docker技术,不仅能提高开发和运维效率,还能为企业的数字化转型提供坚实的基础。希望读者在实际操作中不断探索和实践,进一步深入了解和利用Docker的强大功能。