Docker基本概念——AI教你学Docker

发布于:2025-06-28 ⋅ 阅读:(21) ⋅ 点赞:(0)

1.1 Docker 概念详解

1. Docker 是什么?

Docker 是一个开源的应用容器引擎,它让开发者可以将应用及其依赖打包到一个可移植的容器(Container)中,并在任何支持 Docker 的 Linux、Windows 或 macOS 系统上运行。这样做极大地提升了应用的可移植性、一致性和部署效率。


2. 核心概念

2.1 镜像(Image)

  • 镜像是一个只读的模板,包含了运行容器所需的程序、库、环境变量和配置文件等内容。
  • 可以把镜像理解为“容器的快照”或“应用的安装包”。
  • 镜像可以基于基础镜像(如 Ubuntu、Alpine)自定义制作,也可以通过 Docker Hub 等仓库获取。

2.2 容器(Container)

  • 容器是镜像的运行实例,本质上是一个进程(或一组进程),但它被隔离在自己的运行环境中。
  • 容器启动极快、资源消耗小、可以随时停止和销毁,适合于弹性伸缩和持续集成场景。
  • 容器与主机之间可以通过端口、卷等方式进行通信和数据交换。

2.3 仓库(Repository/Registry)

  • 仓库用来集中存储和分发镜像,分为公有仓库(如 Docker Hub)和私有仓库(如 Harbor)。
  • 用户可以将自定义的镜像上传到仓库,也可以从仓库拉取需要的镜像。
  • 一个仓库可以包含同一个应用的多个版本(以标签tag区分)。

2.4 Docker 引擎(Docker Engine)

  • Docker Engine 是 Docker 的核心,负责镜像构建、容器管理、网络与数据卷支持等。
  • 包括:
    • 服务端(daemon):运行在主机上,负责接收和处理命令。
    • 客户端(CLI):用户与 Docker 交互的命令行工具。
    • REST API:供第三方工具或系统与 Docker 集成。

2.5 镜像、容器、仓库三者关系详解(特别是镜像与容器)

一、总体关系概述

Docker 架构的三大核心概念——镜像(Image)、容器(Container)、仓库(Repository)——构成了容器化应用的“构建—分发—运行”全流程:

  • 镜像是“应用及其运行环境的静态快照”。
  • 容器是“镜像的动态运行实例”。
  • 仓库则负责“集中存储和分发镜像”。

三者的关系可以用一句话概括:“仓库存储镜像,镜像生成容器,容器运行应用。”

二、镜像(Image)与容器(Container)的关系
1. 镜像是模板,容器是实例
  • 镜像就像“程序的安装包”或“金钥模具”,它包含了应用所需的所有依赖、环境、配置等,一切都是静态、只读的。
  • 容器则是“根据镜像运行出来的实例”,是动态、可读写的。每次运行镜像都会产生一个独立的容器(就像用同一个模具可以生产出多个钥匙)。
2. 镜像与容器的数据结构
  • 镜像是由多层(layer)组成,每一层代表一次文件系统的变更(比如安装依赖、复制文件等)。
  • 容器在镜像的基础上,增加了一层可写层(writeable layer),运行时所有的数据变更都在这个可写层,不会影响原始镜像。
3. 镜像和容器的生命周期
  • 镜像:可以被拉取(pull)、推送(push)、构建(build)、删除(rmi),但本身不能直接运行。
  • 容器:由镜像启动(docker run),可以进行启动、停止、暂停、重启、删除等操作。一个镜像可以启动任意多个容器,每个容器都是独立进程,互不影响。
4. 容器运行时的读写行为
  • 只读层:来自镜像,所有容器共享,不会被修改。
  • 可写层:每个容器独有,所有对文件系统的写操作都在这一层。容器销毁后,可写层也随之消失。
5. 镜像与容器的转换
  • “从镜像生成容器”:docker rundocker create
  • “从容器生成镜像”:docker commit 可以将运行中的容器快照保存为新的镜像,实现修改后快速复用。
三、镜像、容器与仓库的关系
1. 仓库存储镜像
  • 仓库(Repository/Registry)就像“镜像云盘”,集中管理镜像的存储与分发。
  • 镜像可以上传(push)到仓库,也可以从仓库下载(pull)到本地。
  • 一个镜像仓库可包含同一应用的不同版本(通过 tag 区分)。
2. 镜像分发流程
  1. 开发者本地构建镜像(如 docker build)
  2. 将镜像推送到仓库(docker push)
  3. 其他主机/环境从仓库拉取镜像(docker pull)
  4. 根据镜像启动容器运行应用(docker run)
3. 仓库、镜像、容器的作用对比
角色 作用 生命周期 可否直接运行 可否编辑/修改
仓库 存储分发镜像 持久
镜像 应用和环境的静态快照 持久 否(只读)
容器 镜像的运行实例(进程) 动态(可销毁) 是(可写层)
四、图示说明
+-----------------------------+
|         仓库(Repository)   |
|   存储、管理多个镜像版本    |
+-------------+---------------+
              |
         拉取/推送(pull/push)
              v
+-----------------------------+
|         镜像(Image)        |
|   应用及环境的静态快照      |
+-------------+---------------+
              |
          运行(run)
              v
+-----------------------------+
|         容器(Container)    |
|   镜像的动态实例,进程/服务  |
+-----------------------------+
五、总结
  • 镜像是不可变的,便于版本管理和一致性部署。
  • 容器可以随时销毁和重建,数据需通过卷或持久化方案保存。
  • 镜像通过仓库实现跨主机、跨环境的分发
  • 推荐流程:本地构建镜像 → 推送仓库 → 拉取到任意主机 → 启动容器。

3. 容器和虚拟机的区别

容器(Container) 虚拟机(VM)
启动速度 秒级 分钟级
资源占用 轻量级,只需应用+依赖 重量级,需要完整操作系统
隔离性 进程级别,依赖于宿主机内核 完全隔离,独立操作系统内核
性能 接近原生性能 存在虚拟化开销
迁移与扩展 快速、灵活,便于弹性伸缩 慢,迁移和扩展成本高

总结:容器适合微服务、弹性扩展、持续集成等场景,虚拟机更适合需要强隔离和完整操作系统的场景。


4. Docker 的应用场景与优势

4.1 应用场景

  • 微服务架构部署
  • 持续集成/持续交付(CI/CD)
  • 跨环境迁移和分发
  • 云原生应用开发
  • 本地开发与测试环境一致性管理

4.2 Docker 的优势

  • 一致性:开发、测试、生产环境完全一致,避免“在我机子上没问题”。
  • 轻量级:资源消耗低,启动快,易于大规模弹性部署。
  • 可移植:镜像可以在任何支持 Docker 的平台运行。
  • 易集成:与主流 CI/CD、云平台、Kubernetes 无缝对接。
  • 社区活跃:拥有庞大的生态和丰富的官方/第三方镜像。

5. 总结

Docker 通过镜像、容器、仓库等核心概念,实现了应用的快速部署、弹性扩缩、环境一致性和高效交付,是现代云原生架构和 DevOps 流程的基础设施之一。


网站公告

今日签到

点亮在社区的每一天
去签到