当前位置: 首页 > news >正文

Docker是什么

docker是什么

  • docker本质
  • docker和虚拟机的区别
  • docker架构
  • Docker Registry
    • 镜像仓库分类
    • 镜像仓库工作机制
    • docker Hub

docker本质

Docker 本质其实是 LXC 之类的增强版,它本身不是容器,而是容器的易用工具。容
器是 linux 内核中的技术,Docker 只是把这种技术在使用上简易普及了。Docker 在早
期的版本其核心就是 LXC 的二次封装发行版。Docker 作为容器技术的一个实现,或者说让容器技术普及开来的最成功的实现。Docker 是基于 Go 语言实现的一个开源项目,它的主要目标是“Build,Ship andRun Any APP,Anywhere”,即通过对组件的封装、分发、部署、运行等生命周期的管理,使得用户的应用及其运行环境能够做到“一次封装,到处运行”。早期 Docker 利用 LXC 做容器管理引擎,但是在创建容器时,不再使用模板去安装生成,而是通过镜像技术(把一个操作系统用户空间所需要使用到的组件事先编排好,并整体打包成一个文件,image 文件),镜像文件集中放在一个仓库中。当需要创建容器时,Docker 调用 LXC 的工具 lxc-create,但不再通过 lxc 的模板去安装,而是连接到镜像服务器上下载匹配的镜像文件,而后基于镜像启动容器。所以,Docker 极大的简化了容器的使用难度。以后我们创建启动容器,只需要一个命令,docker-run,docker-stop 就可以启动停止一个容器了。

docker和虚拟机的区别

  1. 从磁盘占用上来说,虚拟机所需要的磁盘空间会更大,而docker需要的磁盘空间会更少,因为对于虚拟机来说,它是从物理层开始往上进行模拟的,每个虚拟机都有自己的操作系统,而对于docker来说则不是,docker只是将程序和运行环境打包在了一起,多个docker之间共享宿主机的操作系统;
  2. 从cpu和内存占用上来说,虚拟操作系统非常占用cpu和内存,需要通过虚拟层调用,占用率高,而对于docker来说,docker引擎占用资源极低,直接作用于宿主机操作系统,占用率会比较少;
  3. 从启动速度上来说,虚拟机的启动速度比较慢,因为虚拟机需要启动自己的虚拟操作系统,而docker不用;
  4. 从应用部署上来说,虚拟机需要手动进行部署,速度慢,而docker可以体系化部署,可以自动化,速度较快;
  5. 从隔离性上来说,虚拟机的隔离性更高,docker隔离性较低;
  6. 从封装性上来说,虚拟机是打包整个操作系统,而docker是打包项目代码和依赖信息,docker会更加轻量化;

docker为什么比虚拟机资源利用率高,启动块?
在这里插入图片描述

  1. 一个虚拟机在启动的时候,徐要重新加载操作系统,而容器的启动不需要,因此docker在启动上比虚拟机更快;
  2. 容器通过docker engine创建出来,之后,容器可以自己于宿主机OS进行交互;而对于虚拟机来说,虚拟机传递出来的信息需要通过Hypervisor层才能于宿主机的操作系统进行交互,因此在cpu和内存利用率上,docker会比虚拟机更加高效;

docker架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建。
在这里插入图片描述

  1. registry
    docker 仓库,用来保存镜像文件的,可以理解为版本控制中的代码仓库(gitHub、gitee等)。docker这个仓库是由docker官方自己提供的,名字叫docker Hub;
  2. Docker daemon
    Docker daemon 是服务器组件,是docker最核心的后台进程,我们也把它称为守护进程,docker容器的创建就是由这个组件来完成的,当然,如果你的服务器山想要运行docker容器,该组件也是必不可少的;
  3. docker client
    docker 客户端可以通过命令行或者其它工具使用docker API来与docker daemon进行交互(类比于mysql);
  4. docker Host
    一个物理的或虚拟的机器,就是docker daemon进程跑起来的机器;
  5. docker image
    就是用来创建docker容器的模板,容器于镜像的关系,类比于类和对象的区别;
  6. docker 容器
    基于某个docker镜像跑起来的docker 容器;

现在我们用直白的语言来理解以上过程:
你现在想要去买一个小米15的手机,于是走向了离你最近的小米之家,然后问了问店员:“你们这里有没有小米15?”,无非就得到两种回答,第一种:“有的先生,你需要什么配置和颜色?”;第二种:“不好意思先生,我们当前门店没有现货,如果您确实需要的话,我可以去市里面的仓库中给你调集一台过来”;对于第一种情况,我们只需要详细告诉店员我们需要的配置和颜色,即可把小米15拿回家了,而对于第二种情况的话,则需要等待店员去仓库调取,我们才能拿到,在仓库中,又分为许许多多的小仓库,每个小仓库放的都是不同型号的手机,比如有些小仓库放的是小米14、有的是小米13等等,店员只需要找到小米15的小仓库,然后根据用户要求的配置和颜色,拿取对应的手机即可,在此之后,我们终于拿到了心心念念的小米15了,然后欣喜的开机,开始了与小米15没羞没臊的生活了…

在上面这个故事中,用户就类似我docker架构中的客户端,小米之家就类似于docker中的服务端,存放手机的仓库,就类似于docker Hub,未开机的手机类似于镜像,开机运行的手机,类似于容器;

Docker Registry

镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。
镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一
个或多个镜像,镜像通过镜像名称和标签 (Tag)来区分。

这里的镜像仓库,就类似于上文故事中的,存放小米手机的仓库;Repository就类似于仓库中的一个个小仓库;而在小仓库都存放着型号相同的手机,但是配置不一致,Repository也是类似,存放的都是功能相同的镜像,但是每个镜像之间版本不同;
在这里插入图片描述
一个容器镜像包含了两个部分,一个是元数据,其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的checksum 这些信息都会记录下来,还有最终的可执行文件在哪就是在存储数据里面,就是在一个一个的 blob 里面,真正占有空间的就是这些 blob。

镜像仓库分类

按是否对外开放划分,也是研发人员常说的:

  1. 公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,
    供大家访问使用
  2. 私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。

按供应商和面向群体划分:

  1. sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用.
  2. mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用.
  3. vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像Google 和 Redhat 提供了镜像仓库服务.
  4. private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用.

镜像仓库工作机制

镜像仓库使用流程:

  1. 创建仓库,在docker Hub、阿里云、腾讯云上创建即可;
  2. docker login 仓库地址: 使用该命令登录你的仓库,如果不指定仓库地址,那么默认登录的是docker Hub仓库;
  3. docker pull 如果你是从docker 官方仓库拉取,那么其实与前面的docker login关系不大;如果你是从自己的仓库拉取,那么前面的docker login关系就比较大,如果拉取的自己的仓库是开源的,那么docker pull可以直接拉取成功;但如果是私有的,那么你直接拉取会失败,要想成功,必须使用docker login登录;
  4. docker push :推送镜像,无论我们要推送的仓库是开源的还是私有的,都必须登录才可以推送;

实际研发中镜像仓库如何使用:
Docker Registry 中的镜像通常由开发人员制作,而后推送至“公共”或“私有”Registry 上
保存,供其他人员使用,例如“部署”到生产环境;
在这里插入图片描述

docker Hub

docker Hub是什么?
Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。
具有以下功能:

  1. 个人可以注册私有仓库,能够发布自己的镜像
  2. 提供镜像检索能力
  3. 提供海量官方和认证组织的镜像
  4. 从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub
  5. 支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL。 )

docker Hub功能浏览:

  1. 镜像搜索在这里插入图片描述
  2. 镜像tag查找:
    在这里插入图片描述

国内镜像源:
一般来说docker pull从官方仓库拉取镜像会比较慢,毕竟docker hub的服务器在国外麻,为了解决这个问题,我们一般会为docker damemon配置,国内镜像仓库,就是让我们每次docker pull的时候,docker daemon都能先去镜像仓库中看看,实在没找到再去docker Hub仓库查找,这样会加快我们镜像拉取的速率;

如何配置国内镜像源:

  1. 打开/etc/docker/daemon.json文件,没有就创建一个;
  2. 在这个文件中写入:
    {
    “registry-mirrors”:[“https://zue8awxu.mirror.aliyuncs.com”]
    }
  3. 注意如果最外层以及你给有了配置,不要直接覆盖,而是将下面的内容添加,然
    后确保 json 的格式正确
  4. 重新加载配置,并重新启动docker

systemctl daemon-reload //加载配置
systemctl restart docker //重启docker服务

相关文章:

Docker是什么

docker是什么 docker本质docker和虚拟机的区别docker架构Docker Registry镜像仓库分类镜像仓库工作机制docker Hub docker本质 Docker 本质其实是 LXC 之类的增强版,它本身不是容器,而是容器的易用工具。容 器是 linux 内核中的技术,Docker 只…...

Vue进阶指南:Watch 和 Computed 的深度理解

前言 在 Vue.js 开发中,我们常常会用到 watch 和 computed。虽然它们都能用来监听和处理数据的变化,但在使用场景和性能上有显著的区别。本篇文章会通过通俗易懂的方式给你讲解 Vue.js 中 watch 和 computed 的区别和使用方法。 基本概念 Computed&am…...

51c大模型~合集12

我自己的原文哦~ https://blog.51cto.com/whaosoft/11564858 #ProCo 无限contrastive pairs的长尾对比学习 , 个人主页:https://andy-du20.github.io 本文介绍清华大学的一篇关于长尾视觉识别的论文: Probabilistic Contrastive Learning for Long-Tailed Visua…...

大模型 RAG 面试真题大全

最近这一两周不少互联网公司都已经开始秋招提前批面试了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…...

【django】Django REST Framework 构建 API:APIView 与 ViewSet

目录 1、APIView 2、ViewSet 3、APIVIew例子 3.1 模型定义 3.2 序列化器定义 3.3 使用视图 3.3.1 ProductListCreateAPIView 类 3.3.2 ProductRetrieveUpdateDestroyAPIView 类 3.4 配置url 3.5 测试 3.5.1 查询全部 3.5.2 添加产品 3.5.3 查询单个产品 3.5.4 修…...

TOEIC 词汇专题:旅游计划篇

TOEIC 词汇专题:旅游计划篇 制定旅行计划时,尤其是跨国旅游,会涉及到很多独特的英语词汇。以下是与“旅游计划”相关的托业词汇,帮助你更加自如地规划行程。 1. 旅行服务和优惠 出发前了解一下与服务和优惠相关的常用词汇&#…...

第三次RHCSA作业

1、配置网络:为网卡添加一个本网段IPV4地址,x.x.x.123 2、配置yum本地仓库,并完成traceroute命令的安装 yum库配置成功过后,显示这个报错,没能写完 3、用至少两种方法查看sshd服务的进程号 4、添加一块10G大小的磁盘&…...

WebGL(Web Graphics Library)

WebGL(Web Graphics Library)是一种基于 JavaScript 的 API,允许在网页上渲染高性能的 2D 和 3D 图形。它利用计算机的 GPU 来实现硬件加速,因此适合创建游戏、数据可视化和交互式应用程序。 WebGL 的基本概念: 上下文…...

Unity核心笔记

1、认识模型的制作 1.建模 2.展UV 3.材质和纹理贴图 4.骨骼绑定 5.动画制作 总结 2、图片导入概述 1.Unity支持的图片格式 2.图片设置的6大部分 3、纹理类型设置 1.纹理类型主要是设置什么 2.参数讲解 4、纹理形状设置 1.纹理形状主要设置什么 2.参数讲解 5、纹理高级设置 …...

数据挖掘(六)

数据挖掘(六) 文章目录 数据挖掘(六)消除歧义从Twitter下载数据加载数据集并分类文本转换器词袋N元语法其他特征朴素贝叶斯贝叶斯定理朴素贝叶斯算法算法应用实例应用抽取特征将字典转换为矩阵训练朴素贝叶斯分类器组装所有的部件完整代码本文使用朴素贝叶斯进行社会媒体挖…...

Netty 组件介绍 - Channel

主要作用 close()可以用来关闭 channelcloseFuture()用来处理 channel 的关闭sync方法作用是同步等待 channel 关闭而 addListener 方法是异步等待 channel 关闭pipeline()方法添加处理器write()方法将数据写入writeAndFlush()方法将数据写入并刷出...

时间序列预测(十)——长短期记忆网络(LSTM)

目录 一、LSTM结构 二、LSTM 核心思想 三、LSTM分步演练 (一)初始化 1、权重和偏置初始化 2、初始细胞状态和隐藏状态初始化 (二)前向传播 1、遗忘门计算(决定从上一时刻隐状态中丢弃多少信息) 2、…...

Flink CDC 同步 Mysql 数据

文章目录 一、Flink CDC、Flink、CDC各有啥关系1.1 概述1.2 和 jdbc Connectors 对比 二、使用2.1 Mysql 打开 bin-log 功能2.2 在 Mysql 中建库建表准备2.3 遇到的坑2.4 测试 三、番外 一、Flink CDC、Flink、CDC各有啥关系 Flink:流式计算框架,不包含 …...

【python实战】-- 根据文件名分类

系列文章目录 文章目录 系列文章目录前言一、根据文件名分类到不同文件夹总结 前言 一、根据文件名分类到不同文件夹 汇总指定目录下所有满足条件的文件到新文件夹 import os import shutil import globsource_dir rD:\Users\gxcaoty\Desktop\39642 # 源目录路径 destinatio…...

蓝桥双周赛 第21场 小白入门赛

1 动态密码 思路&#xff1a;可以直接填空也可以写程序 void solve() {int a 20241111;stack<int> stk;while(a){stk.push(a % 2);a / 2;}while(stk.size()){cout << stk.top();stk.pop();}} 2 购物车里的宝贝 思路&#xff1a;总体异或和为0即可说明可分成一样…...

Linux 进程间通信 共享内存_消息队列_信号量

共享内存 共享内存是一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许多个进程访问同一块内存区域。这种方法可以提高效率&#xff0c;因为数据不需要在进程之间复制&#xff0c;而是可以直接在共享的内存空间中读写。 使用共享内存的步骤通常包括&#xff1a…...

Mybatis自定义日志打印

一&#xff0c;目标 替换?为具体的参数值统计sql执行时间记录执行时间过长的sql&#xff0c;并输出信息到文档&#xff08;以天为单位进行存储&#xff09; 平常打印出来的sql都是sql一行&#xff0c;参数一行。如图&#xff1a; 二&#xff0c;理论 这里我们主要通过Mybatis…...

【在Linux世界中追寻伟大的One Piece】Socket编程TCP(续)

目录 1 -> V2 -Echo Server多进程版本 2 -> V3 -Echo Server多线程版本 3 -> V3-1 -多线程远程命令执行 4 -> V4 -Echo Server线程池版本 1 -> V2 -Echo Server多进程版本 通过每个请求&#xff0c;创建子进程的方式来支持多连接。 InetAddr.hpp #pragma…...

面试高频问题:C/C++编译时内存五个分区

在面试时,C/C++编译时内存五个分区是经常问到的问题,面试官通过这个问题来考察面试者对底层的理解。在平时开发时,懂编译时内存分区,也有助于自己更好管理内存。 目录 内存分区的定义 内存分区的重要性 代码区 数据区 BSS区 堆区 栈区 静态内存分配 动态内存分配…...

阅读博士论文《功率IGBT模块健康状态监测方法研究》

IGBT的失效可以分为芯片级失效和封装级失效。其中封装级失效是IGBT模块老化的主要原因&#xff0c;是多种因素共同作用的结果。在DBC的这种结构中&#xff0c;流过芯片的负载电流通过键合线传导到 DBC上层铜箔&#xff0c;再经过端子流出模块。DBC与芯片和提供机械支撑的基板之…...

Spring ApplicationContext接口

ApplicationContext接口是Spring框架中更高级的IoC容器接口&#xff0c;扩展了BeanFactory接口&#xff0c;提供了更多的企业级功能。ApplicationContext不仅具备BeanFactory的所有功能&#xff0c;还增加了事件发布、国际化、AOP、资源加载等功能。 ApplicationContext接口的…...

[perl] 数组与哈希

数组变量以 符号开始&#xff0c;元素放在括号内 简单举例如下 #!/usr/bin/perl names ("a1", "a2", "a3");print "\$names[0] $names[0]\n"; print "size: ",scalar names,"\n";$new_names shift(names); …...

电机学习-SPWM原理及其MATLAB模型

SPWM原理及其MATLAB模型 一、SPWM原理二、基于零序分量注入的SPWM三、MATLAB模型 一、SPWM原理 SPWM其实是相电压的控制方式&#xff0c;定义三相正弦相电压的表达式&#xff1a; { V a m V m sin ⁡ ω t V b m V m sin ⁡ ( ω t − 2 3 π ) V c m V m sin ⁡ ( ω t 2…...

群控系统服务端开发模式-应用开发-腾讯云上传工厂及七牛云上传工厂开发

记住业务流程图&#xff0c;要不然不清楚自己封装的是什么东西。 一、腾讯云工厂开发 切记在根目录下要安装腾讯云OSS插件&#xff0c;具体代码如下&#xff1a; composer require qcloud/cos-sdk-v5 在根目录下extend文件夹下Upload文件夹下channel文件夹中&#xff0c;我们修…...

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 文章目录 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和…...

《计算机原理与系统结构》学习系列——处理器(下)

系列文章目录 目录 流水线冒险数据冒险数据相关与数据冒险寄存器先读后写旁路取数使用型冒险阻塞 控制冒险分支引发的控制冒险假设分支不发生动态分支预测双预测位动态分支预测缩短分支延迟带冒险控制的单周期流水线图 异常MIPS中的异常MIPS中的异常处理另一种异常处理机制非精…...

JDK新特性(8-21)数据类型-直接内存

目录 Jdk 新特性 JDK 8 特性 默认方法实现作用:可以使接口更加灵活&#xff0c;不破坏现有实现的情况下添加新的方法。 函数式接口 StreamAPI JDK 9 特性 JDK 10 特性 JDK 11 特性 JDK 14 特性 JDK 17 特性 JDK 21 特性 数据类型 基本数据类型和引用数据类型的区别…...

003-Kotlin界面开发之声明式编程范式

概念本源 在界面程序开发中&#xff0c;有两个非常典型的编程范式&#xff1a;命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑&#xff0c;而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中&#xff0c;程序员需要关心程…...

QT pro项目工程的条件编译

QT pro项目工程的条件编译 前言 项目场景&#xff1a;项目中用到同一型号两个相机&#xff0c;同时导入两个版本有冲突&#xff0c;编译不通过&#xff0c; 故从编译就区分相机导入调用&#xff0c;使用宏区分 一、定义宏 在pro文件中定义宏&#xff1a; DEFINES USE_Cam…...

深度学习之经典网络-AlexNet详解

AlexNet 是一种经典的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;在 2012 年的 ImageNet 大规模视觉识别挑战赛&#xff08;ILSVRC&#xff09;中表现优异&#xff0c;将 CNN 引入深度学习的新时代。AlexNet 的设计在多方面改进了卷积神经网络的架构&#xff0c;…...