Docker 入门教程(二):Docker 的基本原理

文章目录

  • 🐳 Docker 入门教程(二):Docker 的基本原理
    • 1. Docker 架构总览:三大核心角色
    • 2. 镜像与容器的关系
    • 3. 容器启动流程:`docker run` 背后发生了什么?

🐳 Docker 入门教程(二):Docker 的基本原理

在学习镜像与容器的命令操作之前,我们必须弄清楚:Docker 是如何运作的?容器和镜像到底是什么关系?docker run 背后到底做了什么?
这一节我们通过结构图 + 原理分析,建立起对 Docker 系统性理解的底层认知。


1. Docker 架构总览:三大核心角色

Docker 采用经典的客户端 - 服务端架构(C/S 架构),它主要由以下三部分组成:

在这里插入图片描述

1.1 Client(客户端)

客户端就是我们日常使用的命令行工具,例如:

docker build
docker pull
docker run

这些命令本质上不会直接操作容器或镜像,而是通过 HTTP API 请求把意图发送给 Docker 服务端。

1.2 Docker Daemon(服务端)

也称为 dockerd,是 Docker 的守护进程,负责实际执行一切命令,包括:

  • 拉取镜像
  • 构建镜像
  • 创建 / 启动容器
  • 管理网络、挂载、资源等

它同时维护两个最核心的资源:

  • Images(镜像):只读模板,用于创建容器
  • Containers(容器):基于镜像运行出来的隔离进程

1.3 Registry(镜像仓库)

这是 Docker 镜像的集中分发平台,默认是 Docker Hub,也可以是私有仓库(如 Harbor)。

Docker Daemon 会在执行 docker pulldocker run 时自动从 Registry 拉取镜像。


图解架构流程

+---------+           HTTP API         +-------------------------+
|  Client | ─────────────▶──────────▶ |     Docker Daemon       |
|         |                            | (dockerd)               |
| docker  |                            |                         |
| build   |                            |   +------------+        |
| pull    |                            |   |  Images    |◀───────┐
| run     |                            |   +------------+        |
+---------+                            |   | Containers |        ||   +------------+        |+-------------------------+▲│pull/push│+-------------------------------+|           Registry            ||     (Docker Hub or custom)   |+-------------------------------+

2. 镜像与容器的关系

Docker 中,镜像(Image)和容器(Container)的关系可以从两个角度来类比理解:

类比一:类 vs 实例

  • 镜像 就像一个类(Class)
    它定义了对象的结构、行为和属性,但不能直接运行。

  • 容器 就是类创建出来的实例(Instance)
    每个容器基于镜像创建,可以独立运行、修改、销毁,彼此互不影响。

类比二:安装包 vs 软件

  • 镜像 像是一个软件安装包,里面包含程序代码和运行环境。它本身是静态的、不能直接运行。

  • 容器 就是你在电脑上安装并运行起来的软件,它有自己的配置、运行数据和状态。你可以同时运行多个程序实例,它们都来源于同一个安装包。


3. 容器启动流程:docker run 背后发生了什么?

当你运行:

docker run redis

Docker 表面上只做了一件事:运行了一个 Redis 容器。
但实际上,它在背后做了一系列工作,整个过程可以拆成几个简单的步骤:

第一步:找镜像

Docker 会先检查你本地有没有 redis 镜像。

  • 有就直接用
  • 没有就从 Docker Hub 下载

第二步:创建容器

基于镜像,Docker 创建一个容器。就像“解压安装包、准备好环境”。

这一步会:准备一个独立的运行环境p;分配一个容器 ID;设置网络和存储

第三步:启动容器

Docker 会执行容器里的默认启动命令(比如 Redis 的服务器进程),让它真正“跑起来”。

此时容器就进入了运行状态(Running)。

第四步:资源隔离 & 控制(Docker 背后自动做的)

虽然我们看不见,但 Docker 还会在后台做几件重要的事:

  • 资源隔离:让容器拥有自己独立的文件系统、网络、进程空间等
  • 资源限制:防止某个容器用光 CPU 或内存
  • 文件系统挂载:用一种叫 Overlay 的方式叠加镜像和容器的文件系统,便于读写分离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88782.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

21.安卓逆向2-frida hook技术-HookOkHttp的拦截器

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 工具下载: 链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

小程序入门:swpier 和 swpier-item 的基本使用

在前端开发中,创建交互式的用户界面组件是至关重要的。今天,我们将深入探讨 swpier 和 swpier-item 的基本使用方法,这两个组件在构建轮播图等滑动效果的场景中非常实用。 一、swpier 组件概述 swpier 组件是实现滑动效果的核心容器。它负责…

SQL学习笔记4

约束 1、约束 约束,是指作用在表中字段上的规则,用于限制字段输入的数据,使得表格式统一,数据内容正确。同一个字段的约束可以有多个 约束包括: 非空约束,限制表中的值不为null:not null 唯一约束&…

力扣刷题(第七十天)

灵感来源 - 保持更新,努力学习 - python脚本学习 比特位计数 解题思路 对于任意整数 x,其 1 的个数等于 x // 2 的 1 的个数加上 x % 2。状态转移方程:dp[x] dp[x // 2] (x % 2)。 class Solution:def countBits(self, n: int) ->…

鸿蒙网络编程系列56-仓颉版通过数据包结束标志解决TCP粘包问题

1. TCP粘包问题解决思路 在本系列的上一篇文章演示了TCP数据粘包的原因以及可能的解决方法,本文将通过其中的添加数据包结束标志的方法来解决这个问题。我们知道,数据粘包的原因是因为发送的时候没有标明数据包的边界,那么,我们人…

Redis网络通信模块深度解析:单线程Reactor到多线程IO的架构演进

一、核心架构:单线程Reactor模型 Redis网络模块采用经典Reactor模式,核心流程如下: void aeMain(aeEventLoop *eventLoop) {while (!eventLoop->stop) {// 前置钩子(集群心跳/数据持久化)if (eventLoop->befor…

PILCO: 基于模型的高效策略搜索方法原理解析

PILCO: 基于模型的高效策略搜索方法原理解析 PILCO (Probabilistic Inference for Learning Control) 是一种基于模型的强化学习算法,由Marc Deisenroth和Carl Rasmussen于2011年提出。该算法在数据效率方面表现出色,能够以极少的样本数据实现有效学习。…

大语言模型训练中的自监督学习和其他训练方式

大语言模型训练中的自监督学习和其他训练方式。 自监督学习(Self-Supervised Learning) 1. 什么是自监督学习? 自监督学习是一种不需要人工标注数据的训练方式,模型从数据本身学习特征和模式。 在语言模型中的具体实现&#x…

[mcp-servers] 工具与资源 | 模型上下文协议MCP | 锚点分类

第三章:工具与资源 欢迎回来! 在之前的旅程中,我们认识了客户端(第一章:客户端)——AI的信使组件 以及MCP服务器(第二章:MCP服务器)——接收请求并具备执行能力的智能助…

2025年06月27日Github流行趋势

项目名称:edit 项目地址 url:https://github.com/microsoft/edit项目语言:Rust历史 star 数:10807今日 star 数:411项目维护者:lhecker, DHowett, b6k-dev, rhysd, MingcongBai项目简介:我们都编…

Camera Api 2 和 OPEN GL ES 使用(显示滤镜效果)

Camera Api 2 和 OPEN GL ES 使用&#xff08;显示滤镜效果&#xff09; 相机预览和open GL 使用实现滤镜效果 代码 https://github.com/loggerBill/camera 相机预览 1.相机动态权限 <uses-permission android:name"android.permission.CAMERA" /><uses-f…

CAS教务系统单点登录分析

1. 核心 URL 结构 GET /authserver/login?servicehttp%3A%2F%2F192.168.254.188%2Fjsxsd%2Fframework%2FxsMainV.htmlx认证服务器&#xff1a;authserver.XXXX.edu.cn&#xff08;典型 CAS 系统&#xff09;目标服务&#xff1a;http://192.168.254.188/jsxsd/framework/xsMa…

利用云雾自动化在智能无人水面航行器中实现自主碰撞检测和分类

大家觉得有读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 工业信息物理系统 &#xff08;ICPS&#xff09; 技术是推动海上自主化的基础&#xff0c;尤其是对于无人水面航行器 &#xff08;USV&#xff09;。然而&#xff0c;船上计算限制和通信延迟…

AI+物联网:从万物互联到万物智联

AI物联网&#xff1a;从万物互联到万物智联的范式革命 当农田传感器自主决策灌溉时机&#xff0c;当咖啡机根据睡眠数据调节浓度&#xff0c;当城市交通系统在拥堵发生前主动干预——这些场景不再是科幻想象&#xff0c;而是2025年AIoT&#xff08;人工智能物联网&#xff09;…

Python爬虫实战:研究Levenshtein库相关技术

1. 引言 1.1 研究背景与意义 随着电子商务的快速发展,网络上积累了海量的产品数据。这些数据来自不同的电商平台、卖家,存在着产品名称不统一、规格描述差异大等问题,给数据整合、价格比较、竞品分析等应用带来了极大挑战。传统的精确匹配方法无法处理产品名称中的拼写错误…

MySQL 总是差八个小时,如何破?

MySQL 总是差八个小时&#xff0c;如何破&#xff1f;_mysql__江南一点雨-Byzer 白泽 解决 SpringBoot 应用中 MySQL 时区配置引起的时间不一致问题 - 路有所思 - 博客园

iOS 为图片添加水印

(instancetype)waterMarkWithImage:(UIImage *)image andMarkImageName:(NSString *)markName{ UIImage *watermarkImage [UIImage imageNamed:markName]; if (!watermarkImage) { NSLog("水印图片加载失败: %", markName); return image; } // 获取原图尺寸和方向 …

蓝牙工作频段与跳频扩频技术(FHSS)详解:面试高频考点与真题解析

蓝牙技术凭借其低功耗、短距离通信的特性,已成为物联网、智能穿戴等领域的核心技术之一。其核心竞争力在于对 2.4GHz ISM 频段的高效利用与跳频扩频技术(FHSS)的创新应用。本文将系统梳理蓝牙工作频段与 FHSS 的高频考点,并结合历年真题与解析,快速掌握核心知识,轻松应对…

ArkTS与仓颉开发语言:鸿蒙编程的双子星

前言 鸿蒙是多语言生态&#xff0c;ArkTS、仓颉和 C/C充分互补。ArkTS 是动态类型编程语言&#xff0c;主打易学易用、生态丰富、极简开发、持续创新四大特征&#xff1b;仓颉是静态类型编程语言&#xff0c;主打高性能、强安全、跨平台、智能化等特性。为满足不同业务场景诉求…

怎么把本地仓库push 到gitlab 上

1. 首先 我们需要再gitlab 上建立一个group &#xff0c; &#xff08;group 可也设定是public 还是private&#xff09;&#xff0c;public 可以不用用户密码用 https 下载 2. 再gitlab 的group 下 建立一个仓库 &#xff08;pulbic/private) 如何删除 一个仓库&#xff08;…