Docker是什么?它的优点与作用是什么?我们为什么使用docker?

2023-05-16

文章目录

  • 1. 我们为什么使用Docker?
  • 2. Docker是什么?
    • 2.1 镜像-(概念:复制的程序)
    • 2.2 容器-(概念:集装箱)
    • 2.3 仓库-(概念:存放镜像的地方)
  • 3. Docker的作用?
    • 3.1 结论
    • 3.2 总结
    • 3.3 举例
  • 4. 传统虚拟机与Docker虚拟化技术的对比
  • 5. Docker和虚拟机形象比喻

关于Docker的应用我其他两篇文章中有,链接如下:

安装: Centos7安装docker并更改阿里云下载镜像地址
使用: Docker拉取Mysql镜像并启动访问及docker常用命令介绍

1. 我们为什么使用Docker?

当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。

就好比我之前开发的一个电商项目,其中包括 Java 环境/Tomcat/ MySQL / JDBC 驱动包/相应 jar 包,还有SSM框架及搜索引擎Solr等技术,仅仅是在windows系统上协调这些项目的版本,保证环境不冲突及项目正常运行,就需要大量时间来调试,而我们技术人员往往在windows系统上开发及调试,那么上线的时候需要部署到linux系统中,这就会导致由于环境不同的产品部署问题。

往往就算不跨系统,而是换一台同样操作系统的服务器,要移植部署依然很麻烦,那么为了解决这个问题,Docker就体现出了他的用处!

2. Docker是什么?

Docker 是一个开源的应用容器引擎

Docker 其中包括,镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。

再通俗点说,我们使用Docker,只需要配置一次Docker容器上面的应用,就可以跨平台,跨服务器,实现应用程序跨平台间的无缝衔接

Docker实际上就相当于一个封闭的沙盒或者是集装箱,它可以把不同的应用全都放在它的集装箱里面,并且以后有需要的时候,可以直接把集装箱搬到其他平台或者服务器上,实现容器虚拟化技术,随用随搬

一句话,Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

2.1 镜像-(概念:复制的程序)

  1. 定义:Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
  2. 作用 : Docker镜像是用来启动容器的,也用来创建新的容器,类似于虚拟机的快照。
  3. 特点 : 镜像不包含任何动态数据,其内容在构建之后也不会被改变,在Docker里可以创建镜像,也可以从第三方的网站上下载别人已经做好的镜像来使用

2.2 容器-(概念:集装箱)

  1. 定义 : 一个Docker镜像可以实例化出来多个容器,而每一个容器之间是独立运行的,没有任何依赖
  2. 作用 : 运行程序员开发的应用程序的
  3. 特点 : Docker镜像是不能运行的,是静态的,而Docker容器是运行的,是动态的,可以将Docker容器想像成一个简化版的操作系统和一些核心基础的应用。每个容器运行一个独立的应用程序。

2.3 仓库-(概念:存放镜像的地方)

  1. 定义 : Docker仓库提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像位置的
  2. 作用: 我们自已创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用

总结: 说白了镜像就等于一个centos系统的安装程序,一个镜像只是一个只读环境而已,这个镜像提供的是基础的运行环境,而你在Centos7系统中安装的应用,比如Redis,Mysql这些应用就相当于一个容器,这些容器都是单独可运行的,仓库的概念就更好理解了,在Centos7系统中下载的所有应用都被收集到同一个仓库里了,比如Maven仓库

3. Docker的作用?

3.1 结论

绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突,而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是所说的标准化、集装箱的原因所在。

  1. 解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况
  2. 限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
  3. docker的标准化让快速扩展,弹性伸缩变得简单

在这里插入图片描述

3.2 总结

容器不是模拟一个完整的操作系统而是对进程进行隔离,有了容器,我们就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行

3.3 举例

举例: 我把货物一辆兰博基尼跑车(好比开发好的应用APP),打包放到一容器集装箱里,它通过货轮可以轻而易举的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。而且运输期间,我的兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另外一个码头卸货后,依然可以完美风骚的赛跑(启动正常)

4. 传统虚拟机与Docker虚拟化技术的对比

领域传统虚拟机Docker虚拟化
应用交付与部署每发布一个应用程序,都需要走一遍流程在这里插入图片描述集装箱式交付,整体交付在这里插入图片描述
资源消耗传统虚拟机要具备独立的虚拟CPU、内存、操作系统,如果我们有10个虚拟机,则需要安装10个操作系统,虚拟出来10个CPU、内存等,因此造成大量的资源浪费容器可以运行相同的一个操作系统内核,让一个容器的消耗与一个进程一样
启动虚拟机硬件需要初始化,需要启动时间没有虚拟机硬件初始化过程,开箱即用
应用安装需要大量的安装包及安装过程,如下载完整镜像也非常耗费时间统一仓库拉取,结构简单,拉取速度快
故障虚拟机内应用崩溃,理论上不会影响其它虚拟机以及上面运行的应用的,除非是硬件或者Hypervisor有Bug因为共用内核,只靠cgroup隔离,应用之间的隔离是不如虚拟机彻底的,如果某个应用运行时导致内核崩溃,所有的容器都会崩溃

5. Docker和虚拟机形象比喻

什么是物理机

在这里插入图片描述
什么是虚拟机

在这里插入图片描述
什么是Docker

在这里插入图片描述

参考资料:
https://www.zhihu.com/question/28300645/answer/585166942
https://baijiahao.baidu.com/s?id=1665273511649700130&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1668622380573288716&wfr=spider&for=pc
https://blog.csdn.net/qsbbl/article/details/86715741
https://baijiahao.baidu.com/s?id=1666555716941349742&wfr=spider&for=pc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker是什么?它的优点与作用是什么?我们为什么使用docker? 的相关文章

  • 理解和创建:Anaconda、Jupyterlab、虚拟环境、Kernel

    Anaconda如何创建虚拟环境并作为jupyterlab的内核使用 先明确一波概念一 虚拟环境 1 环境是什么 xff1f 2 虚拟环境是什么 xff1f 3 为什么需要创建虚拟环境 xff1f 4 Anaconda创建 激活 退出 删除
  • 【Windows】六种正确清理C盘的方法,解决你的红色烦恼

    如何正确的清理C盘 前言清理方法1 利用Windows自己附带的磁盘清理工具2 开启自动清理3 通过 配置存储感知或立即运行 来清理4 管理C盘中的程序5 系统文件夹转移6 将C盘现有内容转移到别的盘 参考链接 前言 Windows操作系统
  • 【机器学习】数据增强(Data Augmentation)

    文章目录 一 引言 背景二 为什么需要数据增强 xff1f 三 什么是数据增强 xff1f 定义分类 四 有监督的数据增强1 单样本数据增强 xff08 1 xff09 几何变换类 xff08 2 xff09 颜色变换类 2 多样本数据增强
  • 基于FRFT的雷达辐射源信号特征分析及提取

    信号在FRFT域上表示 xff0c 同时包含了信号的时域信息和频域信息 论文中提出的算法流程如图 xff1a 步骤 xff11 xff1a 提取雷达辐射源信号脉冲序列的脉冲 xff0c 进行相应的预处理 xff0c 包括带宽和能量的归一化
  • 【Linux】查看、激活、退出虚拟环境以及 CommandNotFoundError 错误解决

    文章目录 一 虚拟环境有关命令二 CommandNotFoundError Your shell has not been properly configured to use 39 conda activate 39 参考链接 一 虚拟环
  • 【PyTorch】torch.utils.data.DataLoader 简单介绍与使用

    文章目录 一 torch utils data DataLoader 简介二 实例参考链接 一 torch utils data DataLoader 简介 作用 xff1a torch utils data DataLoader 主要是对
  • 【Python】np.unique() 介绍与使用

    文章目录 一 np unique 介绍二 np unique 原型三 实例参考链接 一 np unique 介绍 对于一维数组或者列表 xff0c np unique 函数 去除其中重复的元素 xff0c 并按元素 由小到大 返回一个新的无
  • 【Pytorch】交叉熵损失函数 CrossEntropyLoss() 详解

    文章目录 一 损失函数 nn CrossEntropyLoss 二 什么是交叉熵三 Pytorch 中的 CrossEntropyLoss 函数参考链接 一 损失函数 nn CrossEntropyLoss 交叉熵损失函数 nn Cross
  • 【Linux】rm 命令:删除文件/文件夹

    文章目录 一 删除文件 文件夹 xff1a rm 命令二 删除文件 xff08 即这个文件被删除 xff09 三 删除文件夹四 注意参考链接 一 删除文件 文件夹 xff1a rm 命令 rm 是强大的删除命令 xff0c 它可以 永久性地
  • 【Pytorch】torch.max() 函数详解

    文章目录 一 一个参数时的 torch max 1 函数介绍2 实例 二 增加指定维度时的 torch max 1 函数介绍2 实例 三 两个输入张量时的 torch max 1 函数介绍2 实例 参考链接 一 一个参数时的 torch m
  • 【机器学习】KNN 算法介绍

    文章目录 一 KNN 简介二 KNN 核心思想实例分析 xff1a K 值的影响 三 KNN 的关键1 距离计算1 闵可夫斯基距离2 曼哈顿距离3 欧氏距离4 切比雪夫距离5 余弦距离总结 2 K值选择 四 KNN 的改进 xff1a KD
  • 【机器学习】Radius Neighbors Classifier(rNN,radius nearest neighbors)

    文章目录 一 半径近邻分类器 简介二 半径近邻分类器算法三 Radius Neighbors Classifier With Scikit Learn参考链接 一 半径近邻分类器 简介 Radius Neighbors Classifier
  • 扫盲:单片机入门分享 晶振 复位电路与电源

    学单片机走过许多弯路 xff0c 挖过许多坑 xff0c 浪费了很多时间 xff0c 做过实际产品后回顾过去的学习经历 xff0c 发现很多坑其实是可以避免的 xff0c 单片机的入门应该可以更轻松一点 xff0c 借CSDN论坛一方宝地
  • VR技术原理分析,【VR原理入门理论篇】

    VR技术原理分析 xff0c VR原理入门理论篇 xff0c 学习研究VR技术必须要了解的理论知识 目录 1 VR沉浸感和交互作用产生的原理 xff1a 2 关于沉浸感和交互作用的定义 3 如何生成符合VR要求的虚拟世界 4 最主流的VR开
  • ST-Link驱动安装不正确,设备管理器黄色感叹号,win10安装stlink驱动

    这是由于驱动没有安装好导致的 xff0c 从该链接下载驱动文件 xff1a http pan baidu com s 1bog5FZ5 我是win10 win7 win8一样的办法 解压缩后 xff0c 直接以管理员身份运行其中的dpins
  • 使用CIDR计算划分子网个数

    概念 CIDR xff08 无类别域间路由 xff0c Classless Inter Domain Routing xff09 是一种IP地址划分的方法 xff0c 其目的是更加有效地使用IPv4地址空间 CIDR的原理是将一个IP地址划
  • 关于字符串的长度和大小的定义

    char a 61 aaaaa 字符串长度为5 xff0c 数组长度 xff08 大小 xff09 为6 xff1b char b 5 61 aaaaa 字符串长度不确定 xff0c 数组长度 xff08 大小 xff09 为5 xff1b
  • 用安卓设备识别ArUco码

    先来看下效果 静态图片中的ArUcon码识别 在之前程序的基础上再添加一个Button和TextView xff0c 点击 识别 按钮检测照片中的ArUco码后 xff0c 在屏幕最下方显示识别到的ArUco的id和四个角点坐标 xff0c
  • VSCode集成Git

    VSCode集成Git流程 一 xff0c 下载git并配置环境变量 1 从git官网下载一个git安装包 xff0c 官网下载地址 git下载 2 下载完成后 xff0c 一路NEXT走下去 xff0c 只需注意下面这几个页面的配置 xf
  • Vscode使用clang-format格式化代码

    使用Vscode格式化代码 使用Vscode格式化代码操作步骤 使用Vscode格式化代码 可以在vscode上使用clang format对C C 43 43 代码自动格式化 xff0c 配置自己想要的格式规范 xff0c 解脱代码格式的

随机推荐

  • 二维数组转稀疏数组的思路

    二维数组转稀疏数组的思路 遍历 原始的二维数组 xff0c 得到有效数据的个数sum根据sum就可以创建稀疏数组sparseArr int sum 43 1 3 将二维数组的有效数据存入到稀疏数组 span class token comm
  • 实例方法和静态方法常识

    1 调用方式上 静态方法依赖于类 xff0c 通过类 静态方法调用 xff1b 实例方法依赖于类的对象 xff0c 需要创建对象后 xff0c 对象 实例方法使用 2 使用上 实例方法内部不能定义静态变量 xff0c 会出现编译错误 xff
  • 设计模式(1)

    设计模式的作用 代码重用性 可读性 可扩展性 可靠性 使程序呈现高内聚 xff0c 低耦合的特性 设计模式常用的七大原则有 单一职责原则 接口隔离原则 依赖倒转原则 里式替换原则 开闭原则OCP 迪米特法则 合成复用原则 单一职责原则 对类
  • windows安装配置zookeeper后启动出现的错误:java.io.IOException: Unable to create data directory

    今天学习zookeeper集群部署在Windows10上出现了很多问题现在一一叙述一下 问题1 再点击zkServer cmd出现闪退 需要用编译工具打开在最后一行加入pause命令 问题2datadir权限问题 在c盘部署是是需要系统管理
  • IDEA 查找接口的实现 的快捷键

    IDEA 风格 ctrl 43 alt 43 B Eclipse 风格 ctrl 43 T 例子
  • WebPack4学习实践笔记(一)

    一 准备 nodejs安装教程 xff1a https blog csdn net FED AF article details 105747632 xff09 二 安装 xff08 1 xff09 全局安装 初始化npm C Users
  • 可重入锁(又名递归锁)

    可重入锁 指的是同一线程外层函数获得锁之后 xff0c 内层递归函数仍能获取该锁的代码 xff0c 在同一线程的外层获取锁的时候 xff0c 在进入内层方法会自动获取锁 xff0c 也就是说线程可以任意进入它已经拥有的锁的同步代码块 syn
  • Java 读取TXT文件-行读取

    Java 读取TXT文件 行读取 span class token keyword public span span class token keyword static span String span class token funct
  • springMVC 指定文件 压缩下载

    span class token keyword package span span class token namespace com span class token punctuation span lyt span class to
  • HC-SR04超声波模块

    1 硬件原理图 2 传感器参数表 电气参数HC SR04 超声波模块工作电压DC 5 V工作电流15mA工作频率40kHz最远射程4m最近射程2cm测量角度15 度输入触发信号10uS 的 TTL 脉冲输出回响信号输出 TTL 电平信号 x
  • STM32F1系列-UCOSIII配置之delay_init()函数详解

    一 时钟选择 SysTick CLKSourceConfig xff08 xff09 xff1b 选择systick时钟 xff0c 函数配置的寄存器如下所示 找到该函数的定义 xff0c 其两个参数的数值如下 该函数选择的参数是SysTi
  • xfce4-session: Unable to access file /home/user/.ICEauthority: Permission denied

    wsl想要运行startxfce4却出现错误 xff1a usr bin startxfce4 X server already running on display 172 18 64 1 0 xfce4 session Unable t
  • YOLO 目标框回归(三)

    边框预测公式分析 Cx xff0c Cy 是 feature map 中 grid cell 的左上角坐标 xff1b Pw xff0c Ph 是预设的 anchor box 映射到 feature map 中的宽和高 最终得到的边框坐标值
  • 【机器人学】机器人运动学基础

    文章目录 DH table参考MDHSDH 齐次变换矩阵左乘 右乘左右乘与DH参数 欧拉角欧拉角的奇异性欧拉角万向节死锁 四元数齐次变换矩阵 欧拉角 轴角和四元数之间的转化关系机器人pieper准则 DH table DH参数可以说是机器人
  • 【IKFast】IKFast配置与使用

    文章目录 参考Fast of All环境什么是IKFast安装openRave相关Create Collada File For Use With OpenRAVECreate IKFast Solution CPP File验证从仿真验证
  • 2019.11.12-最新大华摄像机SDK开发,预览实时视频并指定码流格式保存到文件中(可观看)

    大华摄像机SDK开发 预览实时视频并指定码流格式保存到文件中 由于本人最近在开发大华摄像机 特此分享一些经验给到各位开发朋友 本次实例是关于大华摄像机的实时预览视频码流保存到文件中的Demo 本人还开发过海康威斯的SDK 如果有需要的话看我
  • 树莓派3下载安装Android系统图文教程

    树莓派3怎样安装Android系统 xff1f 树莓派3相比上一代性能增强很多 xff0c 采用64位四核1 2GHz处理器 xff0c 搭载1GB LPDDR2内存 xff0c 虽然配置仅相当于入门级Android手机 xff0c 但运行
  • 海康威视摄像机SDK二次开发-JavaDemo环境搭建详解

    由于此前写了两篇具体功能实现的博文 但是发现好多小伙伴对SDK不是很熟悉 下载下来不知道怎么跑在系统里 特此写下这篇文章记载一下JavaDemo的初始化准备 初始化Windows SDK Java环境 https blog csdn net
  • 使用IDEA如何对Java项目进行打包

    我们开发的项目大部分都使用jar包交付 那么如何使用IDEA打jar包呢 下面我们写一个最简单的打包方式 1 首先先把项目编译一下 点击顶部工具栏 build gt build project 2 打包项目 点击file 选择此项 按以下顺
  • Docker是什么?它的优点与作用是什么?我们为什么使用docker?

    文章目录 1 我们为什么使用Docker 2 Docker是什么 xff1f 2 1 镜像 概念 xff1a 复制的程序 2 2 容器 概念 xff1a 集装箱 2 3 仓库 概念 xff1a 存放镜像的地方 3 Docker的作用 xff