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

news2025/1/30 16:38:19

目录

  • 前言
  • 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.coloradmin.cn/o/1210565.html

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

相关文章

手把手教你实现贪吃蛇

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:实现贪吃蛇 > 毒鸡汤:时间并不可真…

SM5212 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器

SM5212 双向防反接功能 1.2A 锂电池线性充电芯片 概述: SM5212 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器,并带有锂电池正负极反接保护和 VIN 正负反接保护功能,可以保护芯片和用户安全。 由于采用了内部 PMOSFET 架构&am…

【SpringBoot3+Vue3】二【实战篇】-后端

目录 一、环境搭建 1、数据库脚本 2、pom 3、yml 4、通过mybatis-X生成实体pojo等 4.1 Article 4.2 Category 4.3 User 5、 Mapper 5.1 ArticleMapper 5.2 CategoryMapper 5.3 UserMapper 6、service 6.1 ArticleService 6.2 CategoryService 6.3 UserService …

V10chrony服务配置

Chrony简介 Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony也可以作为服务端软件为其他计算机提供时间同步服务。 Ch…

Windows使用ssh远程连接(虚拟机)Linux(Ubuntu)的方法

步骤 1.Windows下载一个SSH客户端软件 要使用SSH连接,当然得先有一个好用的客户端软件才方便。 我这里使用的是WindTerm,一个开源免费的SSH连接工具,用什么软件不是重点。 这里默认你已经生成过SSH的密钥了,如果没有&#xff0c…

一篇综述读懂m6A甲基化+分型+免疫浸润+机器学习。快来get

今天给同学们分享一篇生信文章“Comprehensive characterization of tumor microenvironment and m6A RNA methylation regulators and its effects on PD-L1 and immune infiltrates in cervical cancer”,这篇文章发表在Front Immunol期刊上,影响因子为…

打开Outlook报错修复

打开Outlook报错修复 故障现象 打开outlook提示,outlook.exe --系统错误 故障截图 故障原因 原因是软连接指向错误重建即可。 解决方案 下载并运行下面批处理解决 del /F /Q "C:\Program Files\Microsoft Office\root\Office16\AppvIsvStream64.dll"…

微服务基础,分布式核心,常见微服务框架,SpringCloud概述,搭建SpringCloud微服务项目详细步骤,含源代码

微服务基础 系统架构的演变 随着会联网的发展,网站应用的规模不断扩大,常规的应用架构已经无法应对,分布式服务架构以及微服务架构势在必行,必须一个治理系统确保架构有条不紊的演进 单体应用框架 Web应用程序发展的早期&…

前后端设置跨域问题

前端 const {defineConfig} require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServer: { //记住,别写错了devServer//设置本地默认端口 选填port: 8080,proxy: { //设置代理,必…

STC89C52+HX711完成电子秤设计

一、项目背景 电子秤是一种通过传感器测量物体质量的设备,被广泛应用于商业和工业领域。传统的机械秤已经逐渐被电子秤取代,因为电子秤具有更高的精度、更方便的使用和更多的功能。 本项目利用STC89C52单片机和HX711模块完成电子秤设计,具有…

Linux电脑投屏到电视的简洁操作

Linux电脑投屏到安卓电视有多种好处。 首先,通过将Linux电脑与安卓电视连接,用户可以轻松地将电脑屏传输到电视上,从而获得更加舒适和清晰的视觉体验。 其次,投屏功能可以帮助用户在电视上展示电脑中的图片、视频和其他多媒体文件…

云计算和跨境电商:数字化未来的基石

云计算和跨境电商两者结合,共同塑造着当今数字化时代的商业未来。这两个领域的发展,为企业提供了前所未有的机会,使他们能够扩展国际业务、提高效率,以及为全球市场提供更多产品和服务。本文将深入探讨云计算如何成为跨境电商的数…

给在读博士的建议

早上起床第一件事,瞄了眼知乎! 发现现在的手机真的很智能,也许是聊天的时候不经意间提了一句,早上就推荐了自己想看到的东西! 分享给大家! 有哪些给在读博士的建议? 如何通过一句话判断一个博士…

GitHub Universe 2023:AI 技术引领软件开发创新浪潮

GitHub 是全球领先的软件开发和协作平台,数百万开发者和企业在此分享、学习和创建卓越的软件。同时 GitHub 处在 AI 技术前沿,通过其先进的 AI 技术增强开发者体验并赋能未来软件开发的使命。在今天的文章中,我们将一起看看在 GitHub 年度大会…

【科研新手指南3】chatgpt辅助论文优化表达

chatgpt辅助论文优化表达 写在最前面最终版什么是好的论文整体上:逻辑/连贯性细节上一些具体的修改例子 一些建议,包括具体的提问范例1. 明确你的需求2. 提供上下文信息3. 明确问题类型4. 测试不同建议5. 请求详细解释综合提问范例: 常规技巧…

使用vscode的ssh进行远程主机连接

1. 首先安装好“远程资源管理器”(这一步建议谷歌下),如下图所示 2. 按F1,设置远程主机信息的SSH Configuration config file, 注意这里可以添加多个远程主机信息,通过注释掉无关远程主机信息来选择想连接的那个主机&a…

post 和get参数 请求

json参数 post请求格式 RestController public class HelloController { //json参数 post 请求RequestMapping("/jsonParam")public String jsonParam(RequestBody User user){System.out.println(user);return "OK";} } postman 接口测试工具…

【技巧】excel 表格数据直接生成 insert 语句

步骤 准备数据到一个新exel 复制语句 CONCATENATE("insert into users (key,value) values (",A1,",",B1,",);") 到新列F,放在第一行右下角这里,显示出黑色小号,双击 即可生成所有语句 注意:生成i…

CopyOnWriteArrayList 源码详解

目录 一. 前言 二. 源码详解 2.1. 类结构 2.2. 属性 2.3. 构造方法 2.4. add(E e) 2.5. add(int index, E element) 2.6. addIfAbsent() 方法 2.7. 获取元素() 方法 2.8. remove(int index) 2.9. size() 三. FAQ 3.1. 为什么CopyOnWriteArrayList没有size属性&…

第92步 深度学习图像分割:SegNet建模

基于WIN10的64位系统演示 一、写在前面 本期,我们继续学习深度学习图像分割系列的另一个模型,SegNet。 二、SegNet简介 (1)基本架构 SegNet由一个编码器网络和一个解码器网络组成,这两个网络都是卷积网络。编码器网…