代码改变世界

Docker入门 - 实践

2025-09-29 17:19  tlnshuju  阅读(40)  评论(0)    收藏  举报

前言

  在当今云计算和微服务架构盛行的时代,Docker作为一种轻量级的容器化技术,已经成为开发和运维人员不可或缺的工具。Docker不仅简化了应用的部署和管理,还极大地提高了开发和测试效率。本文将全面介绍Docker的发展历程、基本概念、核心功能以及实际操作,帮助读者从零开始掌握Docker技术。

一、 云服务与虚拟化基础

1.1 云服务模型介绍

云计算通过网络为用户提供可伸缩的计算资源,主要分为以下几种类型:

  1. IaaS(基础设施即服务):提供虚拟化计算资源,如虚拟机、存储、网络等。用户可以灵活配置自己的计算环境,但需要负责安装操作系统和管理资源。
    • 优点:灵活度高、可扩展性强。
    • 缺点:管理复杂,需要较多技术支持。
  2. PaaS(平台即服务):提供一个开发平台,用户可以在上面开发应用程序,而无需关注底层硬件或操作系统。
    • 优点:简化开发过程,适合开发者。
    • 缺点:灵活度较低,可能受到平台限制。
  3. SaaS(软件即服务):提供已经构建好的应用程序,用户可以直接使用,无需安装和维护。
    • 优点:快速部署,省时省力。
    • 缺点:定制化差,依赖于服务提供商。
  4. 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 虚拟化技术发展趋势
  1. 硬件辅助虚拟化:依赖Intel VT-x/AMD-V等CPU特性提升性能
  2. 容器化技术:与Docker等轻量级虚拟化技术互补发展
  3. 云原生集成:与Kubernetes等编排系统深度整合
  4. 安全增强:强化虚拟化层的安全隔离机制
  5. 边缘计算:适用于边缘设备的轻量级虚拟化方案

二、 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/CDDevOps 工具链结合,支持大规模容器化部署。
  • 2023年
    • Docker 23.x 发布,进一步增强对 云原生应用Kubernetes 生态系统 的支持。
    • 容器优化、安全性、CI/CD 方面推出新功能,提升企业级应用部署的效率和安全性。
    • 加强对 开源和社区驱动工具 的支持,巩固其在容器生态中的领导地位。

2.3 Docker 版本:CE vs EE

Docker 提供了两个主要版本,以满足不同用户的需求:

  1. Docker Community Edition (CE)

    • 适用对象:个人开发者、小型团队或学习用途。
    • 特点:提供基础的容器化功能,免费使用
    • 发布周期:通常每月发布新版本,更新频繁,功能迭代快。
  2. 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,还有许多其他容器相关技术和平台,构成了丰富的容器化生态系统。
知名容器技术包括:

  1. Docker:最知名和流行的容器平台,拥有完善的生态系统和活跃的社区。
  2. Kubernetes:由 Google 开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
  3. OpenShift:Red Hat 提供的基于 Kubernetes 的企业级容器平台,提供更多企业级功能。
  4. LXC (Linux Containers):接近传统虚拟化技术的轻量级虚拟化方案,可以视为轻量级 VM。
  5. Rkt (Rocket):由 CoreOS 开发的容器技术,注重安全性和模块化设计。
  6. Apache Mesos:用于大规模数据中心的容器编排平台,支持多种调度系统。
  7. Containerd:开源的容器运行时,是 Docker 的核心组件之一,管理容器的生命周期。
  8. CRI-O:专为 Kubernetes 设计的轻量级容器运行时。
  9. Singularity:面向高性能计算(HPC)和计算密集型应用的容器技术。
  10. Podman:与 Docker 类似的容器引擎,无需守护进程,支持 OCI 容器和镜像。

总结:这些技术共同推动着容器化技术的发展,满足不同场景和需求下的应用部署与管理。

2.6 Docker 容器的优势

Docker 容器相比传统应用部署方式,具备诸多优势:

  • 移植性(Portability):应用及其依赖被打包在容器中,能够在任何支持 Docker 的环境中无缝运行。
  • 隔离性(Isolation):每个容器独立运行,互不干扰,不会影响宿主机或其他容器。
  • 高效性(Efficiency):共享宿主机内核,启动速度快,资源消耗低。
  • 简化部署(Simplified Deployment):通过 Dockerfile 定义应用环境,轻松创建、复制、修改和删除容器,简化了应用的管理和部署流程。
  • 一致性(Consistency):确保开发、测试、生产环境的一致性,减少“环境差异”带来的问题。

2.7 容器技术的应用场景

容器技术在现代软件开发和运维中有着广泛的应用,主要体现在以下几个方面:

  1. CI/CD(持续集成与持续交付)
    • 利用 Docker 快速构建、测试和部署应用,确保不同环境之间的一致性,提高开发和交付效率。
  2. 微服务架构(Microservices Architecture)
    • 容器化与微服务架构天然契合,每个微服务可以独立打包、部署和扩展,提升系统的灵活性和可维护性。
  3. 多云与混合云环境(Multi-cloud & Hybrid Cloud)
    • 容器的跨平台能力使得应用能够在不同的云服务提供商(如 AWS、Azure、GCP)和本地数据中心之间无缝迁移和部署,提升业务的弹性和可扩展性。
  4. DevOps 实践
    • 容器技术是 DevOps 实践中的重要组成部分,通过容器化实现快速迭代、自动化部署和持续监控,提升开发和运维的协作效率。
  5. 开发与测试环境一致性
    • 开发人员在本地使用 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 builddocker run)通过客户端发送给守护进程执行。
  • Images(Docker 镜像)
    • 只读的模板,包含运行容器所需的文件系统、代码、运行时环境、库和依赖。
    • 类似于系统安装光盘,通过镜像可以创建和运行容器。
  • Containers(Docker 容器)
    • 镜像的可运行实例,具有独立的文件系统、网络和进程空间。
    • 容器是镜像的运行时实体,可以通过 Docker API 或 CLI 进行管理(启动、停止、删除等)。
  • Registry(Docker 注册表)
    • 集中存储和分发 Docker 镜像的服务。
    • Docker Hub 是最常用的公共注册表,用户可以从中获取各种镜像,也可以将自己的镜像推送到 Registry 中。
    • 类似于 Maven 仓库,Registry 包含多个仓库(Repositories),每个仓库包含多个镜像标签(Tags),每个标签对应一个具体的镜像版本。

在这里插入图片描述

3.1.6 Docker 组成

  1. 核心主题 - “Docker 组成”
    流程图最上方的绿色方框 ​​“Docker 组成”​​ 是整个图的主题,表明这张图是用来解释 Docker 系统是由哪些部分构成的。
  2. 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)镜像到本地,也可以把自己制作的镜像推送到仓库中共享。
  3. Docker 客户端 (Docker 客户端)
    右侧的 ​​“Docker 客户端”​​ 是用户与 Docker 系统进行交互的命令行工具或者图形化工具​ 。
    当你在终端里输入 docker命令(比如 docker run nginx来启动一个 Nginx 容器),这些指令会被发送给 Docker 主进程(Docker Daemon),由主进程来执行对应的操作(拉取镜像、创建容器、启动容器等)。
    简单来说,Docker 客户端是用户“发号施令”的入口,而 Docker 主进程是“执行命令”的核心。
  4. 组件之间的交互关系(箭头的含义)
    图中的绿色箭头表示了 ​组件之间的交互和依赖关系​:
    ​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 实现资源隔离和限制主要依赖以下核心技术:

  1. Namespace(命名空间):实现资源的隔离,如进程、网络、文件系统等。
  2. Cgroup(控制组):实现资源的限制与分配,如 CPU、内存、磁盘 I/O 等。
  3. Copy-on-Write(写时复制):一种高效的文件系统技术,容器在启动时共享宿主机的文件系统,只有在需要修改时才进行复制,节省存储空间并提高启动速度。

3.1.8 Docker 核心概念

  1. 镜像(Image)
    • 定义:镜像是包含应用程序及其所有依赖环境的只读模板,用于创建 Docker 容器。
    • 类比:类似于系统安装光盘或模板,通过镜像可以生成多个容器实例。
    • 特点:镜像是不可变的,每次对镜像的修改都会生成一个新的镜像层。
  2. 容器(Container)
    • 定义:容器是镜像的运行实例,具有独立的运行时环境,包括文件系统、网络和进程空间。
    • 特点
      • 容器之间相互隔离,互不影响。
      • 可以通过 Docker 引擎启动、停止、删除和管理。
      • 轻量级,启动速度快,资源占用少。
  3. 仓库(Repository)
    • 定义:仓库是存放 Docker 镜像的集中存储与分发服务。
    • 类型
      • 公共仓库:如 Docker Hub,提供大量官方和社区维护的镜像。
      • 私有仓库:企业或组织内部搭建的仓库,用于存储和管理自定义镜像。
    • 类比:类似于代码仓库(如 GitHub),Docker 仓库存储和管理镜像,便于镜像的共享与版本控制。

总结:Docker 通过镜像与容器的机制,实现了应用的快速部署、隔离运行和高效管理,结合强大的生态系统和工具链,成为现代应用开发和运维的重要基石。

下一部分预告:我们将探讨 Docker 的安装与配置,了解如何在本地环境中搭建 Docker,并开始创建和管理第一个 Docker 容器。

四、 Docker容器管理

4.1 安装

#关闭防火墙、增强功能
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镜像操作

  1. 搜索镜像:使用docker search命令在Docker Hub上搜索相关的镜像。
  2. 获取镜像:使用docker pull命令从Docker Hub拉取镜像。
docker pull mariadb

在这里插入图片描述
4. 镜像加速下载:配置阿里云、华为云等镜像加速器以提高镜像下载速度。

#阿里
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
  1. 查看镜像信息:使用docker imagesdocker inspect命令查看镜像信息。
#查看 Docker 本地镜像的详细信息
cat /var/lib/docker/image/overlay2/repositories.json
#查看本地所有镜像
docker images
#获取镜像详细信息
docker inspect [IMAGE ID]
#为本地镜像添加标签
docker tag nginx:latest nginx:web

在这里插入图片描述
在这里插入图片描述
6. 删除镜像:使用docker rmi命令删除指定的镜像。

docker rmi [-f] [REPOSITORY:TAG|IMAGE ID]

在这里插入图片描述
在这里插入图片描述
7. 存储和载入镜像:使用docker savedocker load命令导出和导入镜像。

#存储
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]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8. 上传镜像到Docker Hub:使用docker tagdocker push命令将镜像上传到Docker Hub。

4.2 Docker容器操作

  1. 创建容器:使用docker create命令创建一个新容器。
docker create centos:7 /bin/bash     # 如果后续尝试交互式启动,可能体验不佳。
docker create -it centos:7 /bin/bash #后续交互式启动友好
  1. 启动容器:使用docker start命令启动已创建的容器。
docker start [CONTAINER ID|NAMES]

在这里插入图片描述
3. 停止容器:使用docker stop命令停止正在运行的容器。

docker stop [CONTAINER ID|NAMES]

4.查看容器状态:使用docker psdocker ps -a命令查看容器的运行状态。
在这里插入图片描述
在这里插入图片描述
4. 创建并启动容器:使用docker run命令创建并启动容器。

docker run -d -p 80:80 --name my-nginx nginx:latest
docker run -itd --name cos7 centos:7

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5. 在后台持续运行容器:使用docker run -d命令让容器以守护形式在后台运行。

docker run -itd --name [NAMES] [名称]:[标签]
  1. 容器交互:使用docker exec命令进入运行着的容器。
docker exec -it cos7 /bin/bash

在这里插入图片描述
7. 复制到容器中:使用docker cp命令将宿主机的文件传入到容器内部。

docker cp [文件及路径] [names]:[文件及路径]
docker cp [names]:[文件及路径] [文件及路径]

在这里插入图片描述
8. 容器的导出与导入:使用docker exportdocker import命令将容器导出为文件并导入。

docker export [CONTAINER ID|NAMES] > [文件名].tar.[gz|bz2]
cat [文件名] | docker import - [名称]:[标签]

在这里插入图片描述
在这里插入图片描述
9. 删除容器:使用docker rm命令删除容器。

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的强大功能。