一起学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提供了一种高效的方式来构建、交付和运行应用程序,使开发和运维工作更加简单和可靠。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序H5 uniapp

最近微信小程序对有视频播放的审核严,需要提供“文娱类资质”。而申请这个资质比较繁琐。所以我们在小程序上用web-view做跳转到H5,H5使用uniapp编写。这是小程序关于web-view文档说明。https://developers.weixin.qq.com/miniprogram/dev/component/web…

003.文件描述符、重定向

1、文件描述符 文件描述符是与输入和输出流相关联的整数。最广为人知的文件描述符是stdin、stdout和stderr。我们可以将某个文件描述符的内容重定向到另一个文件描述符中。 在编写脚本的时候会频繁用到标准输入(stdin)、标准输出(stdout&am…

基于单片机无人售货机仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、商品选择,购买数量选择,投币,液晶1602显示。 3、电机模拟出货。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 void lcd_1602_init() //LCD1602初始…

tracert命令

前言:今天在阅读“Web性能权威指南”这本书的时候,发现 tracert 这个命令挺有意思的,在分析网络性能瓶颈的时候也能使用的到,在此就小记一笔以备后用。 1:作用 tracert 是一个简单的网络诊断工具,可以列出…

GPT 5也要来了?看看​OpenAI CEO Sam Altman最近的采访

OpenAI CEO Sam Altman 在接受金融时报采访中,透露了更多OpenAI的计划:他们正在寻求从微软获得更多资金支持,以构建真正的通用人工智能(AGI)。同时还透露了关于GPT 5的一些信息和公司AGI愿景目标!他认为&am…

【MATLAB源码-第77期】基于matlab的OCDM系统在AWGN信道下理论误码率和实际误码率对比仿真。

操作环境: MATLAB 2022a 1、算法描述 正交线性调频分频复用(OCDM,Orthogonal Chirp Division Multiplexing)是一种无线通信技术,它基于啁啾信号的原理。啁啾信号是一种频率随时间变化的信号,通常频率是线…

在线聊天系统,即时通讯系统

在线聊天,即时通讯系统 可以添加好友,在线聊天,添加群聊,群聊,发送各种类型的文件,文字,图片, 还有各种表情包,系统基于springboot和websocket网络通讯,类似于…

电脑桌面任务提醒便签选择哪一个好用?

伴随着科技现代化的发展,电脑成为大家日常办公及生活中必不可少的工具,如在日常办公中大家可以借助电脑上的任务提醒便签来合理规划自己的工作时间,督促任务的完成,提高工作的效率。 当前,支持在电脑上安装的任务提醒…

Centos8配置Zabbix5.0中文汉化

1.点击【Sign in】按钮,输入用户名和密码进入Zabbix的首页,结果如图。 2.点击左边导航栏的【User settings】链接,进入用户个性化设置界面,结果如图。 3.在搭建Zabbix的虚拟机上使用yum命令下载中文包。 yum install glibc-langpa…

自己动手写编译器:实现编译器工具链中的词法解析工具 Flex

我们在上一节以手动的方式实现了一个词法解析器的 c 语言源码。它主要包含若干部分,第一部分就是输入缓存系统,用于从磁盘文件或者控制台上获取要解析的字符串。第二部分是数据读入逻辑,它主要通过调用输入系统的接口获得要解析的字符串&…

时间序列预测-Transformer,Informer,Autoformer,FEDformer复现结果

实验环境硬件规格或软件版本号CPUInter Xeon E5-2678 v3 2.50GHzGPUNVIDIA TITAN X (Pascal)内存32.0GBPython3.7.3Pytorch1.2.0CUDA11.6 实验结果 可视化实验结果 见资源

邮件钓鱼-邮件来源伪造-SPF绕过-setoolkitgohishswaks钓鱼

0x00 SPF简介 SPF即发送方策略框架,某种邮件服务器会有自己的SPF策略设定,可以设定SPF为只允许某些主机发送邮件等,当设定后第三方就无法伪造成邮件服务器的管理员对用户下发邮件。 是否存在SPF的验证: linux下:dig…

沉浸式航天vr科普馆VR太空主题馆展示

科普教育从小做起,现在我们的很多地方小孩子游乐体验不单单只有草坪玩耍体验,还有很多科普知识的体验馆和游玩馆。虽然现在我们还不能真实的上太空或者潜入海底,但是这些现在已经可以逼真的展示在我们面前。通过一种虚拟现实技术手段。人们带…

MySQL是如何进行排序的,ORDER BY是如何执行的

MySQL 会给每个线程分配一块内存用于排序,称为 sort_buffer。 假设找出在杭州居住的人,按名字排序前1000个人(假设city有索引,那么非常舒服,不用全表扫描) select city,name,age from t where city杭州 or…

测试问题---APP闪退

APP闪退的原因有以下几种: APP本身的程序错误或bug,导致在运行过程中出现异常或崩溃,例如内存泄漏、空指针、死循环等。这种情况下,需要开发者对APP进行调试和修复,或者用户更新到最新版本的APP。 APP与系统或其他APP…

U盘变成了.lnk,怎么处理

没曾想客户电脑是是不是有个病毒啥的,把我的U盘直接干成了只有一个.lnk的一个快捷方式,后面百度找了很多方法,最后找到了一个非常实用的方法,后整理了一下交给大家 方法如下: 1.找到电脑U盘文件 2.搜索框中输入你之…

解决yum源无法安装nginx问题以及简单部署nginx

问题: 我们在使用centos7时,软件安装nginx时大概都会出现无法获取包的情况。 解决办法: 添加nginx的下载源到yum源中 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm如上图所示&a…

[SIGGRAPH2023-best]3D Gaussian Splatting for Real-Time Radiance Field Rendering

标题:3D Gaussian Splatting for Real-Time Radiance Field Rendering 链接:https://arxiv.org/pdf/2308.04079.pdf 本文提出了一种基于3D高斯体进行场景重建的方案,并提供了高效的渲染器实现。其重建精度,训练速度和推理速度均…

11111

#include <iostream> #include <vector> #include <queue> #include <algorithm>using namespace std;// 边的结构体 struct Edge {int src, dest, weight;// 按照权重进行排序bool operator<(const Edge& other) const {return weight < ot…