Docker的理解

Docker的理解

    • Docker
    • 为什么用Docker?
      • 1.提升系统资源利用率
      • 2.更快速的交付和部署
      • 3.高效的部署和扩容
      • 4.更简单的管理
    • Docker核心技术
      • Docker镜像
      • Docker容器
      • Docker仓库
    • Docker实现原理
      • Linux Namespace
      • Cgroup
      • Union FS
    • Docker的应用场景
      • 1.微服务架构
      • 2.持续集成
      • 3.快速部署和伸缩
      • 4.环境部署

Docker

Docker是容器的一种,容器指的是:一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。

容器技术本质上是:对计算机资源的隔离与控制,可以理解为一种沙盒技术,沙盒就像集装箱一样。

Docker是一个开源的容器引擎,是容器概念的落地实现,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。
在这里插入图片描述

为什么用Docker?

作为一种新型的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。

Docker在如下几个方面具有较大的优势:

1.提升系统资源利用率

Docker容器是一种轻量级的虚拟化技术,目的和虚拟机一样,都是为了创造"隔离环境",但是它不像VM采用操作系统级的资源隔离,容器采用的是进程级的系统隔离。
在这里插入图片描述

比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。

Docker是不携带操作系统的,所以Docker的应用就非常的轻巧,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Docker容器。

2.更快速的交付和部署

Docker容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

3.高效的部署和扩容

Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。

这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4.更简单的管理

使用Docker,只需要小小的修改,就可以替代以往大量的更新工作。所以的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

Docker核心技术

Docker技术的三大核心概念分别是:Docker镜像、Docker容器、Docker仓库。掌握这三个组件的概念有助于我们进一步了解Docker的工作原理。

三个组件的关系
下图是三者之间的关系:
在这里插入图片描述

这三个组件组成了Docker的整个生命周期。

Docker镜像

Docker镜像是一种轻量级可执行的独立软件包,Docker镜像提供容器运行时所需的程序、库、资源、配置等文件,组成了Docker容器的静态文件系统运行环境。

简单的理解为:Docker镜像是Docker容器的静态视角,Docker镜像是启动Docker容器的基础。
在这里插入图片描述

我们可以使用docker images来列出本地主机上的Dokcer镜像:

docker images

示例:

[root@Master ~]# docker images
REPOSITORY                                  TAG                   IMAGE ID            CREATED             SIZE
jdk8                                        v2.0                  a24a58951a04        16 months ago       433MB
nginx                                       1.22                  08a1cbf9c69e        20 months ago       142MB
rancher/rancher                             v2.6.5                f944ac578a0e        2 years ago         1.47GB
rancher/rancher                             v2.5-head             c1aff654545a        2 years ago         1.07GB
tomcat                                      8                     2d2bccf89f53        2 years ago         678MB
mysql                                       5.7                   c20987f18b13        2 years ago         448MB
alpine                                      latest                c059bfaa849c        2 years ago         5.59MB
centos                                      7                     eeb6ee3f44bd        2 years ago         204MB
alpine                                      3.10                  e7b300aee9f9        3 years ago         5.58MB

参数介绍:

  • REPOSITORY: 表示镜像的仓库源;
  • TAG: 镜像的标签;
  • IMAGE ID: 镜像ID;
  • CREATED: 镜像创建时间;
  • SIZE: 镜像大小;

Docker容器

容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样.

我们现在所说的容器存放的东西,更偏向于应用比如:网站、程序甚至是系统环境.

容器技术本质上是: 对计算机资源的隔离与控制,可以理解为一种沙盒技术,沙盒就像集装箱一样.

Docker是容器的一种,除此之外: 还有其他容器, 比如: CoreOs的rkt, Docker是一个开源的容器引擎.

Docker仓库

Docker仓库, 英文名Repository, 就是集中存放Docker镜像的地方.

Docker官方维护了一个公共仓库: https://hub.docker.com , 这里提供了可以满足大部分需求的Docker镜像(从2024年开始这个仓库闭源了)。

除了Docker官方提供了Docker Hub的镜像服务, 国内一些云服务商也提供类似于Docker Hub的公开服务。

比如: 阿里云、腾讯云、网易云、DaoCloul等镜像服务,这些镜像服务被成为加速器。

我们可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。
比如使用阿里云,配置如下:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://registry.docker-cn.com","https://s3d6l2fh.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker实现原理

Docker容器的实现原理就是通过Namespace命名空间实现进程隔离、UnionFileSystem联合文件系统实现文件系统隔离、ControlGroups控制组实现资源隔离。

Docker利用Linux中的核心分离机制, 例如Cgroups,以及Linux的核心Namespace(命名空间)来创建独立的容器。

一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。

Linux Namespace

Linux Namespace, 即Linux命名空间,是Linux内核Kernel提供的功能,它可以隔离一系列的系统资源,如 进程ID、User ID、Network、文件系统等。

Docker利用Linux Namespace功能,实现多个Docker容器相互隔离, 实现进程隔离。

Cgroup

Cgroup, 全称Linux Control Groups, 可以对一组进程及这些进程的子进程进行资源限制。

比如: 包括 CPU、内存、存储、网络、设备访问权限等, 通过Cgroups可以很轻松的限制某个进程的资源占用并且统计该进程的实时使用情况。

Docker容器就是: 通过Cgroups控制组实现资源隔离的。

Cgroups由3个组件构成: 分别是 cgroup(控制组)、subsystem(子系统)、以及hierarchy(层级树), 3者相互协同作用。

  • cgroup是对进程分组管理的一种机制, 一个cgroup通常包含一组(多个)进程, Cgroups中的资源控制都以cgroup为单位实现。
  • subsystem是一组(多个)资源控制的模块, 每个subsystem会管理到某个cgroup上, 对该cgroup中的进程做出相应的限制和控制。
  • hierarchy会将一组(多个)cgroup构建成一个树状结构, Cgroups可以利用该结构实现继承等功能。

Union FS

Docker容器是通过UnionFileSystem(Union FS)联合文件系统实现文件系统隔离。

我们都知道Docker镜像是一种分层结构, 每一层构建在其它层之上, 从而实现增量增加内容的功能, 这是如何实现的?

要理解这个问题, 首先需要理解 Union File System (简称: UnionFS), 它是为Linux系统设计的将其它文件系统联合到一个联合挂载点的文件系统服务。UnionFS使用branch(分子)将不同文件系统的文件和目录透明叠加覆盖, 形成一个单一一致的文件系统, 此外UnionFS使用写时复制(Copy on Write,简称, CoW)技术来提高合并后文件系统的资源利用。

Docker使用的第一种存储驱动为AUFS(Advanced Multi-layered unification filesystem), AUFS完全重写了早期的UnionFS,目的是提高其性能与可靠性,此外还引入了如branch负载均衡等新功能。

与UnionFS类似, AUFS可以在基础的文件系统上增量的增加新的文件系统,通过叠加覆盖的形式最终形成一个文件系统。通过AUFS最上层是可读可写层, 而其它层只是只读层,每一层都只是一个普通的文件系统。

Docker镜像分层、增量增加等功能正是通过利用AUFS的分层文件系统结构、增量增加等功能实现, 这也导致了运行Docker容器如果没有指定volume(数据卷)或bind mount, 则Docker容器结束后,运行时产生的数据便丢失了。

Docker的应用场景

1.微服务架构

Docker容器适用于构建和管理微服务应用程序, 每个微服务可以在自己的容器中运行, 独立进行扩展和更新, 而不影响整个应用程序。

2.持续集成

Docker可以与CI/CD工具集成, 使得构建、测试和部署流程更加灵活和可靠, 容器可以在各个阶段轻松部署, 确保环境一致性。

3.快速部署和伸缩

Docker容器可以在几秒钟内启动, 因此可以更快速部署和扩展应用程序。

4.环境部署

Docker可以确保测试环境和生产环境的一致性, 从而减少由于环境差异而引起的问题, 这个功能是Docker流行的非常重要的原因, 就是开发环境与线上环境一致。

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

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

相关文章

四.iOS核心动画 - 图层的视觉效果

引言 在前几篇博客中我们讨论了图层的frame,bounds,position以及让图层加载图片。但是图层事实上不仅可以显示图片&#xff0c;或者规则的矩形块&#xff0c;它还有一系列内建的特性来创建美丽优雅的页面元素。在这篇博客中我们就来探索一下CALayer的视觉效果。 视觉效果 图…

机器学习环境搭建

前言 个人笔记&#xff0c;记录框架和小问题&#xff0c;没有太详细记载。。 1、Anaconda安装 下载地址&#xff1a; Free Download | Anaconda &#xff08;慢&#xff09; ​ 国内镜像&#xff1a;https://link.csdn.net/?targethttp%3A%2F%2Fitcxy.xyz%2F241.html 下载…

五国如何实现关键基础设施保护方法的现代化

本叙述介绍了关键基础设施面临的不断演变的风险,并讨论了关键五国(澳大利亚、加拿大、新西兰、英国和美国)如何实现关键基础设施保护方法的现代化。它还确定了加强国内关键基础设施安全性和弹性的共同方法,同时认识到鉴于关键基础设施的相互关联性,国际社会需要采取合作和…

【H.264】五分钟入门H.264协议

<> 博客简介&#xff1a;Linux、rtos系统&#xff0c;arm、stm32等芯片&#xff0c;嵌入式高级工程师、面试官、架构师&#xff0c;日常技术干货、个人总结、职场经验分享   <> 公众号&#xff1a;嵌入式技术部落   <> 系列专栏&#xff1a;C/C、Linux、rt…

以现在的社会形势走向,选什么专业好?

随着高考结束&#xff0c;选专业的话题又开始变得越来越热门。因为很多学生都想知道自己更适合什么样的专业&#xff0c;如何结合未来的社会形势来选择更好的专业&#xff0c;这的确是一个很考验能力的问题&#xff0c;因为有太多人曾经为了选择专业而纠结过。 高考志愿填报选…

基于多源数据的密码攻防领域知识图谱构建

源自&#xff1a; 信息安全与通信保密杂志社 作者&#xff1a;曹增辉 , 郭渊博 , 黄慧敏 摘 要 提高网络空间安全的密码攻防能力&#xff0c;需要形成可表示、可共享、可分析的领域知识模式和知识库。利用自顶向下的构建方法&#xff0c;并通过本体构建方法梳理密码攻防领域…

Nginx 配置文件

Nginx的配置文件的组成部分&#xff1a; 主配置文件&#xff1a;nginx.conf子配置文件&#xff1a;include conf.d/*.conf 全局配置 nginx 有多种模块 核心模块&#xff1a;是 Nginx 服务器正常运行必不可少的模块&#xff0c;提供错误日志记录 、配置文件解析 、事件驱动机…

Android Studio 2023版本切换DNK版本

选择自己需要的版本下载 根目录下的配置路劲注意切换 build.gradle文件下的ndkVersion也要配好对应版本

现代信息检索笔记(二)——布尔检索

目录 信息检索概述 IR vs数据库: 结构化vs 非结构化数据 结构化数据 非结构化数据 半结构化数据 传统信息检索VS现代信息检索 布尔检索 倒排索引 一个例子 建立词项&#xff08;可以是字、词、短语、一句话&#xff09;-文档的关联矩阵。 关联向量 检索效果的评价 …

使用Visual Studio Code记笔记

因为学习需要&#xff0c;记笔记是很有必要的&#xff0c;平常发CSDN&#xff08;都让CSDN是很棒的哈&#xff09;&#xff0c;后来使用VS Code的时候发现了很多插件&#xff0c;觉得做笔记还是相对不错的&#xff0c;主要用到的还是Markdown 主要设计的插件包括&#xff1a; …

第3章:数据结构

树 对稀疏矩阵的压缩方法有三种&#xff1a; 1、三元组顺序表 2、行逻辑连接的顺序表 3、十字链表 同义词才会占用同个位置&#xff0c;从而需要进行多次比较。这些关键字的第一个可以不是e的同义词&#xff0c;可以是排在e之前的关键字正好占了那个位置。 Dijkstra算法主要特点…

MySQL 高级SQL高级语句(二)

一.CREATE VIEW 视图 可以被当作是虚拟表或存储查询。 视图跟表格的不同是&#xff0c;表格中有实际储存数据记录&#xff0c;而视图是建立在表格之上的一个架构&#xff0c;它本身并不实际储存数据记录。 临时表在用户退出或同数据库的连接断开后就自动消失了&#xff0c;而…

javassmmysql 宣和酒店点餐系统37378-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1研究背景 1.2目的 1.3ssm框架介绍 1.3论文结构与章节安排 2 宣和酒店点餐系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章…

Pascal 函数入门示例,及其汇编语言分析

1&#xff0c; Pascal 函数的定义格式 pascal 函数的定义语法格式: FUNCTION 函数名(形式参数表):函数类型; VAR 函数的变量说明; BEGIN 函数体; END; 2&#xff0c;Pascal 函数定义调用示例 order_self.pas 代码&#xff1a; PROGRAM example01;va…

黑龙江等保测评科普

黑龙江的等保测评&#xff0c;即信息安全等级保护测评&#xff0c;是中国网络安全法框架下的一项重要制度&#xff0c;旨在提升信息系统安全水平&#xff0c;保护关键信息基础设施免受威胁。下面是对黑龙江等保测评流程和要求的科普&#xff1a; 1. 等保测评概念 定义&#xff…

Linux中定位JVM问题常用命令

查询Java进程ID #ps axu | grep java #ps elf | grep java查看机器负载及CPU信息 #top -p 1(进程ID) #top (查看所有进程)获取CPU飙升线程堆栈 1. top -c 找到CPU飙升进程ID&#xff1b; 2. top -Hbp 9702(替换成进程ID) 找到CPU飙升线程ID&#xff1b; 3. $ printf &quo…

操作系统精选题(三)(简答题、概念题)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;操作系统 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 简答题 一、对 CPU、内存、外设并…

SpringCloud和Dubbo有什么区别

SpringCloud与Dubbo的区别 两者都是现在主流的微服务框架&#xff0c;但却存在不少差异&#xff1a; 初始定位不同&#xff1a; SpringCloud定位为微服务架构下的一站式解决方案&#xff1b;Dubbo 是 SOA 时代的产物&#xff0c;它的关注点主要在于服务的调用和治理 生态环境…

【linux】 给命令添加别名

【linux】 给命令添加别名 文章目录 【linux】 给命令添加别名1.修改2.效果 1.修改 2.效果

【AI大模型】跌倒监控与健康:技术实践及如何改变未来

文章目录 1. **背景与意义**2. **关键技术与方法**2.1 传感器数据融合2.2 深度学习模型2.3 行为模式识别2.4 预测与预防 3. **应用场景**3.1 老年人跌倒预警3.2 康复患者监测3.3 高风险职业防护 4. **实践案例**案例1&#xff1a;某老年社区的跌倒预警系统案例2&#xff1a;康复…