一起学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.mzph.cn/news/144069.shtml

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

相关文章

Java学习笔记(七)——面向对象编程(中级)

一、IDEA (一)常用的快捷键 (二)模版/自定义模版 二、包 (一)包的命名 (二)常用的包 (三)如何引入(导入)包 (四&am…

「Verilog学习笔记」用优先编码器①实现键盘编码电路

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 用此编码器实现键盘的编码电路。 注意:编码器的输出是低电平有效,而键盘编码电路输出的是正常的8421BCD码,是高电平有效。因此将编…

ElasticSearch 安装(单机版本)

文章目录 ElasticSearch 安装(单机版本)环境配置下载安装包调整系统参数安装启动并验证 ElasticSearch 安装(单机版本) 此文档演示 ElasticSearch 的单机版本在 CentOS 7 环境下的安装方式以及相关的配置。 环境配置 Linux 主机一…

OpenAI暂停ChatGPT Plus新用户注册;迷宫与图神经网络

🦉 AI新闻 🚀 OpenAI暂停ChatGPT Plus新用户注册,考虑用户体验 摘要:OpenAI决定暂停ChatGPT Plus新用户注册,以应对开发日后使用量激增带来的压力,确保每个人都能享受良好的体验。根据调查机构Writerbudd…

下载huggingface预训练模型到本地并调用

写在前面 在大模型横行的时代,无法在服务器上连接外网的研究僧真的是太苦逼了,每次想尝试类似于CLIP,BLIP之类的大模型都会得到“requests.exceptions.ConnectionError: (MaxRetryError("HTTPSConnectionPool(host‘huggingface.co’, …

Datawhale智能汽车AI挑战赛

1.赛题解析 赛题地址:https://tianchi.aliyun.com/competition/entrance/532155 任务: 输入:元宇宙仿真平台生成的前视摄像头虚拟视频数据(8-10秒左右);输出:对视频中的信息进行综合理解&…

【解决方案】危化品厂区安防系统EasyCVR+AI智能监控

危化品属于危险、易燃易爆、易中毒行类,一旦在生产运输过程中发生泄漏后果不堪想象,所以危化品的生产储存更需要严密、精细的监控,来保障危化品的安全。EasyCVRTSINGSEE青犀AI智能分析网关搭建的危化品智能监控方案就能很好的为危化品监管保驾…

基于STC12C5A60S2系列1T 8051单片机的数模芯片DAC0832实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的数模芯片DAC0832实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍数模芯片DAC0832介绍通过按键调节数模芯片DAC0832…

WPF下实现拖动任意地方都可以拖动窗口

首先在xaml中添加事件 <Window PreviewMouseLeftButtonDown"Window_PreviewMouseLeftButtonDown"PreviewMouseMove"Window_PreviewMouseMove"PreviewMouseLeftButtonUp"Window_PreviewMouseLeftButtonUp"/>然后脚本输入 Point _pressedP…

【Spring进阶系列丨第二篇】Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)

前言 我们都知道Spring 框架主要的优势是在 简化开发 和 框架整合 上&#xff0c;至于如何实现就是我们要学习Spring 框架的主要内容&#xff0c;今天我们就来一起学习Spring中的两大核心技术IoC&#xff08;控制反转&#xff09;与DI&#xff08;依赖注入&#xff09;。 文章目…

【数据结构】别跟我讲你不会冒泡排序

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

【6】Spring Boot 3 集成组件:knift4j+springdoc+swagger3

目录 【6】Spring Boot 3 集成组件&#xff1a;knift4jspringdocswagger3OpenApi规范SpringFox Swagger3SpringFox工具&#xff08;不推荐&#xff09; Springdoc&#xff08;推荐&#xff09;从SpringFox迁移引入依赖配置jAVA Config 配置扩展配置&#xff1a;spring securit…

NumLevels

NumLevels&#xff1a;输入参数&#xff0c;最大的金字塔层数。默认auto&#xff0c;范围【0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, auto】。 AngleStart&#xff1a;输入参数&#xff0c;输入匹配时的起始角度。默认-0.39&#xff0c;建议值【 -3.14, -1.57, -0.79, -0.39, -0.20,…

CodeWhisperer 使用经验分享

今天给大家分享一下 Amazon CodeWhisperer 编程工具&#xff08;免费哦&#xff09;&#xff0c;使用这个软件后我的编码质量提升不少&#xff0c;给大家分享一下我的经验。希望大家支持哦。 Amazon CodeWhisperer 是亚⻢逊出品的一款基于机器学习的 AI 编程助手&#xff0c;可…

uniapp 实现微信小程序手机号一键登录

app 和 h5 手机号一键登录&#xff0c;参考文档&#xff1a;uni-app官网 以下是uniapp 实现微信小程序手机号一键登录 1、布局 <template><view class"mainContent"><image class"closeImg" click"onCloseClick"src"quic…

SQL学习(CTFhub)整数型注入,字符型注入,报错注入 -----手工注入+ sqlmap注入

目录 整数型注入 手工注入 为什么要将1设置为-1呢&#xff1f; sqlmap注入 sqlmap注入步骤&#xff1a; 字符型注入 手工注入 sqlmap注入 报错注入 手工注入 sqlmap注入 整数型注入 手工注入 先输入1 接着尝试2&#xff0c;3&#xff0c;2有回显&#xff0c;而3没有回显…

MySQL中外键的使用及外键约束策略

一、外键约束的概念 外键约束&#xff08;FOREIGN KEY,缩写FK是数据库设计的一个概念&#xff0c;它确保在两个表之间的关系保持数据的一致性和完整性。 外键是指表中的某个字段的依赖于另一张表中某个字段的值&#xff0c;而被依赖的字段必须具有主键约束或者唯一约束&#…

解决:java: 错误: 不支持发行版本 5 最有效方法

报错信息如图&#xff1a; 直接上终极方法&#xff1a; 修改配置文件 如图找到settings.xml文件 在标签中间插入如下代码&#xff08;jdk更改为自己电脑上的版本&#xff09; <profile><id>development</id><activation><jdk>11</jdk><…

计算机毕业设计项目选题推荐(免费领源码)java+ssm+mysql大学生本科毕业资格审核系统的设计与实现67038

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对大学生本科毕业资格审核系统等问题&#…

如何优化谷歌商店里应用的评分评论1

低的评分和评论会引起的连锁反应&#xff0c;会对搜索和浏览可见性产生负面影响&#xff0c;同时拖累我们围绕应用商店优化所做的一切。所以解决负面评论的问题并提高应用的评分&#xff0c;对于提高应用商店的知名度至关重要。 1、分析应用评论。 我们需要分析应用程序当前获…