一起学docker系列之二深入理解Docker:基本概念、工作原理与架构

目录

  • 前言
  • 1 Docker的基本概念
  • 2 Docker的基本组成
  • 3 docker工作原理
  • 4 docker架构
  • 5 Docker详细工作过程
  • 结语

前言

在当今的软件开发和部署中,Docker已经成为一种不可或缺的工具。它简化了应用程序的打包、交付和运行,同时提供了强大的隔离性和可移植性。本文将介绍Docker的基本概念、工作原理和架构,帮助您更深入地理解这一技术。

1 Docker的基本概念

在这里插入图片描述

镜像(Image)
镜像可以看作是一个不可变的模板,包含了应用程序及其运行环境的所有内容,包括文件系统、库、配置等。镜像就像出版图书的书稿,包含了所有内容,但不直接阅读,也不能被修改。

容器(Container)
容器是从镜像创建的运行实例,可以独立运行在主机上。每个容器都有自己的文件系统和进程空间,但它们共享主机操作系统的内核。容器就像通过书稿打印之后的一本书,你可以打开、阅读,但不会影响其他人的阅读经验。

仓库(Repository)
仓库是用于存储和分享镜像的地方。仓库可以包含多个不同版本的镜像,每个镜像有一个唯一的标签。仓库就像出版社,存放了很多书稿,每个书稿都有自己的编号。

2 Docker的基本组成

Docker客户端、Docker守护进程(Docker Daemon)以及Docker镜像仓库(Registry)这三个关键要素。
在这里插入图片描述

Docker客户端

Docker客户端是用户与Docker系统交互的主要接口,可以是命令行工具(例如docker命令)或图形用户界面。
用户通过Docker客户端发送命令来管理Docker容器和镜像。这些命令可以包括构建、运行、停止、删除容器,以及拉取、推送、查看镜像等操作。

Docker守护进程

Docker守护进程是Docker的后台服务,负责管理容器的生命周期、资源隔离和网络设置。
当Docker守护进程启动时,它监听来自Docker客户端的命令和请求。
Docker守护进程的主要职责包括创建、运行、监控、停止容器,以及管理镜像、网络、存储等方面的功能。

Docker镜像仓库

Docker镜像仓库是用于存储和共享Docker镜像的地方,最著名的是Docker Hub,但也可以是私有或其他公共仓库。
用户可以通过Docker客户端命令从镜像仓库中拉取(pull)镜像到本地,或将本地镜像推送(push)到仓库。
每个镜像在仓库中都有一个唯一的标签,通常以版本号或描述标识。

3 docker工作原理

构建镜像

用户创建一个Dockerfile,其中包含了构建镜像所需的指令,如基础镜像、应用程序代码、依赖项等。
使用Docker客户端的docker build命令,用户指定Dockerfile的路径,并提交构建请求给Docker守护进程。
Docker守护进程按照Dockerfile中的指令逐步构建镜像,生成多个中间镜像层,最终将其合并成一个可用的镜像。

拉取镜像

用户通过Docker客户端的docker pull命令从Docker镜像仓库中获取所需的镜像。
Docker客户端向指定的仓库发送请求,获取镜像的元数据和文件层。
如果本地已经存在相同标签的镜像,Docker将检查镜像是否过期,如果需要,会拉取新版本。

运行容器

用户通过docker run命令创建一个新的容器,基于特定的镜像。
Docker客户端发送创建容器的请求给Docker守护进程。
Docker守护进程创建容器实例,分配文件系统、网络命名空间、资源限制等隔离环境。
容器开始运行,用户可以与之交互或访问应用程序。

这些步骤的协作使Docker能够实现容器化应用程序的构建、交付和运行,提供了可移植性、隔离性和资源管理的便利性。 Docker的工作原理确保了镜像的可重用性和容器的高效性能,成为现代应用开发、测试和部署的强大工具。

4 docker架构

Docker的架构是分层的,由多个组件协同工作,以便构建、运行和管理容器化应用程序。除了上文介绍的Docker客户端(Docker Client)、Docker守护进程(Docker Daemon)、Docker镜像仓库(Docker Image Registry)之外,还包括一些组件。
在这里插入图片描述

Docker对象存储(Docker Object Storage)

Docker对象存储用于存储Docker的各种对象,包括镜像、容器、卷等。它负责管理Docker对象的持久存储。
对象存储包括镜像层、容器元数据、网络配置等,确保这些对象的可靠存储和访问。

图形驱动程序(Graph Driver)

图形驱动程序用于管理镜像层和容器的文件系统。它负责将镜像层堆叠成一个完整的文件系统,以供容器使用。
不同的图形驱动程序可以支持不同的底层文件系统,如overlay2用于本地文件系统、btrfs用于存储驱动等。

libcontainer(Container Runtime)

libcontainer是Docker的一个组件,用于直接管理容器的底层功能,如创建命名空间、设置Linux特性等。
它充当了容器运行时的角色,与操作系统内核交互以创建容器。

5 Docker详细工作过程

  • 用户通过Docker客户端发送命令,如docker run,以创建一个新的容器实例。
  • Docker客户端将请求发送给Docker守护进程。
  • Docker守护进程根据请求检查本地镜像存储,如果所需的镜像不存在,它将从Docker镜像仓库中拉取镜像。
  • Docker守护进程使用libcontainer创建容器,分配文件系统、网络命名空间和其他隔离的资源。
  • Docker守护进程运行容器,将应用程序启动在容器中。
  • 用户可以与容器交互,访问应用程序,并监控容器的日志和状态。
  • 用户可以使用Docker客户端命令来管理容器的生命周期,如停止、删除、暂停等操作。

这些组件和工作步骤一起构成了Docker的架构和工作原理,使容器化应用程序的构建、交付和运行变得高效和可靠。 Docker的可移植性、隔离性和资源管理使其成为现代应用程序开发和部署的首选解决方案。

结语

Docker的基本概念、工作原理和架构是理解这一技术的关键。镜像、容器和仓库的比喻有助于将复杂的概念变得容易理解。通过客户端-服务器架构,Docker提供了一种高效的方式来构建、交付和运行应用程序,使开发和运维工作更加简单和可靠。

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

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

相关文章

安科瑞为数据中心绿色高质量发展贡献力量

安科瑞 崔丽洁  0前言 目前,数字经济的迅猛发展激发了数据中心的算力需求,数据中心规模与功耗密度不断提高,能耗问题日益突出。短期内,数据中心的能耗、碳排放量仍会呈现上升趋势。面对国家“双碳”压力,我国数据中心…

mysql之搭建MMM架构实现高可用

实验目的 解决mysql的主从服务器单点故障问题,实现高可用 实验思路 实验条件: 主机名 作用 IP地址 组件 mysql1 master01 20.0.0.13 mysql服务、mysql-mmm mysql2 masert02 20.0.0.23 mysql服务、mysql-mmm mysql3 slave01 20.0.0.33 …

关于Flume-Kafka-Flume的模式进行数据采集操作

测试是否连接成功: 在主节点flume目录下输入命令: bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf -Dflume.root.loggerinfo,console # 这个file_to_kafka.conf文件就是我们的配置文件 然后在另一台节点输入命令进行消费数据: kafka-cons…

三菱FX3U小项目—机床定时器延时启动

目录 一、项目描述 二、IO口分配 三、项目程序 四、总结 一、项目描述 为了防止工人操作失误,启动按钮需要按住1s后,设备才启动,启动后第一台电机启动10s后第二台电机自动启动,当按下停止按钮时,两台电机同时停止。…

Django部署时静态文件配置的坑

Django部署时静态文件配置配置的坑 近期有个需求是用django进行开发部署,结果发现静态文件配置的坑是真的多,另外网上很多的内容也讲不清楚原理,就是这样这样,又那样那样,进了不少坑,这里记录一下关于css,…

【Apache Doris】审计日志插件 | 快速体验

【Apache Doris】审计日志插件 | 快速体验 一、 环境信息1.1 硬件信息1.2 软件信息 二、 审计日志插件介绍三、 快速 体验3.1 AuditLoader 配置3.1.1 下载 Audit Loader 插件3.1.2 解压安装包3.1.3 修改 plugin.conf 3.2 创建库表3.3 初始化3.4 验证 一、 环境信息 1.1 硬件信…

windiws docker 部署jar window部署docker 转载

Windows环境下从安装docker到部署前后端分离项目(springboot+vue) 一、前期准备 1.1所需工具: 1.2docker desktop 安装 二、部署springboot后端项目 2.1 部署流程 三、部署vue前端项目 3.1相关条件 3.2部署流程 四、前后端网络请求测试 一、前期准备 1.1所需工具: ①docke…

小米手环8pro重新和手机配对解决办法

如果更换了手机,那么小米手环8pro是无法和新手机自动连接的。 但是在新手机上直接连接又连接不上,搜索蓝牙根本找不到手环的蓝牙。 解决办法就是: 把手环恢复出厂!!!!! 是的&…

苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理?

环境: Mac mini M1 Mac os 11.0 绿盾v6.5 问题描述: 苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理? 解决方案: 大部分企业是Windows和Mac终端混合使用,在进行文档加密管理时通常会遇到不兼容的现象,而为了统一…

Scala---数据基础

一、数据类型 二、变量和常量的声明 定义变量或者常量的时候,也可以写上返回的类型,一般省略,如:val a:Int 10常量不可再赋值 1./** 2. * 定义变量和常量 3. * 变量 :用 var 定义 ,可修改 4. * 常量 :用 val 定…

基于IGT-DSER实现工业触摸屏与PLC设备之间WIFI无线通讯

本文是基于IGT-DSER系列智能网关设备实现工业触摸屏与PLC设备之间WIFI无线通讯的案例。PLC之间无线通讯的案例 网络结构如下图,触摸屏通过网线连接IGT-DSERWIFI智能网关,实现WIFI的AP功能;一台串口型PLC和一台网口型PLC分别通过IGT-WSER智能网…

数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品,支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据,已应用于数百家企业生产,也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

2023数维杯国际赛数学建模竞赛选题建议及B题思路讲解

大家好呀,2023年第九届数维杯国际大学生数学建模挑战赛今天早上开赛啦,在这里先带来初步的选题建议及思路。 目前团队正在写B题和D题完整论文,后续还会持续更新哈,大家三连关注一下防止迷路。 注意,本文只是比较简略…

【Linux系统化学习】探索进程的奥秘 | 第一个系统调用

个人主页点击直达:小白不是程序媛 Linux系列专栏:系统化学习Linux 目录 进程的概念 进程的管理 描述进程——pcb 组织进程 进程在排队 Linux下的进程 Linux组织进程 查看进程 查看可执行程序的进程 第一个系统调用 "杀掉进程" 进程…

租赁小程序|租赁系统一种新型的商业模式

租赁市场是一个庞大的市场,它由出租人和承租人组成,以及相关的中介机构和供应商等。随着经济的发展和人们对灵活性的需求增加,租赁市场也在不断发展和壮大。特别是在共享经济时代,租赁市场得到了进一步的推动和发展。租赁系统是一…

2023年9月 少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(选择题)

2023年9月scratch编程等级考试一级真题 选择题(共25题,每题2分,共50分) 1、下列哪项内容是不可以修改的 A、角色名称 B、造型名称 C、背景名称 D、舞台名称 答案:D 考点分析:考查scratch相关知识&am…

03-关系和非关系型数据库对比

关系和非关系型数据库对比 关系型数据库(RDBMS):MySQL、Oracl、DB2、SQLServer 非关系型数据库(NoSql):Redis、Mongo DB、MemCached 插入数据结构的区别 传统关系型数据库是结构化数据,向表中插入数据时都需要严格的约束信息(如字段名,字段数据类型,字…

【装包拆包----泛型】

文章目录 装箱和拆箱泛型创建一个泛型数组泛型的上界泛型方法 装箱和拆箱 装箱: 把基本数据类型给到引用数据类型 public static void main(String[] args) {//自动装包//第一种装包Integer c 12;//第二种装包int a 7;Integer b a;//显示装包Integer aa Intege…

课程32:.Net Core Web API部署IIS

这里写目录标题 🚀前言前言一、服务器环境配置1.1 安装 ASP.NET Core模块/托管捆绑包1.2 检查是否安装成功 二、项目发布2.1 选择发布方式2.2 发布配置2.3 发布 三、服务器部署3.1 IIS添加网站3.2 数据库链接配置3.3 让IIS支持.NET Web Api3.4 验证 四、最后 &#…

idea中git 移除对某个文件的跟踪

应用场景如下 某个log 文件,被同事用git 提交到了服务器,本地拉去之后我们的跟踪也会受影响 取消跟踪的方法如下: 删除本地缓存 git rm --cached "logs/test.log" 提交无效的log git commit -m "ignore log" 再将lo…