Docker是什么、有什么用的介绍

文章目录

  • 1.背景
  • 2. Docker 是什么?
  • 3.Docker 容器与虚拟机的区别
  • 4.Docker 的 6 大优势
    • 1、更高效地利用系统资源
    • 2、更快的启动时间
    • 3、一致的运行环境
    • 4、持续交付和部署
    • 5、更轻松迁移
    • 6、更轻松的维护和拓展
  • 小结

知识搬运工: 原文出自:
原文链接:https://blog.csdn.net/weixin_70730532/article/details/126226843

在这里插入图片描述

1.背景

随着云原生、容器化、微服务、k8s 等技术的发展,容器 Docker 也火了一把,同时也逐渐被软件开发者在实践中进行运用。个人在目前接手的项目、参与的项目或技术交流中,发现 Docker 已经非常普及。

对于大多数开发者来说,Docker 之所以被广泛使用,最主要的原因可能就是方便,它提供了一套标准化的解决方案,极大地提升了部署、发布、运维的效率。因此,如果你的项目中目前还没有使用 Docker,或者想深入了解一下 Docker,这篇文章值得你一读。

2. Docker 是什么?

在聊 Docker 是什么之前,我们先来回顾一下传统的产品开发上线涉及到的难点。一款产品从开发到上线,经历了开发环境、测试环境、生产环境等不同的操作系统、运行环境和应用配置等环境。在项目管理中,还涉及到不同版本以及不同版本之间兼容性等问题。

这些问题对开发人员和运维人员都是极大的考验,同时对各方的协作也有一定的要求。不然就会出现”代码在我这里运行的好好的啊“,这种尴尬的局面。而 Docker 的出现就是提供了一套用来解决此类问题的标准解决方案。

Docker

Docker 的口号是**“一次创建或配置,可以在任意地方正常运行”。**如口号所说,Docker 的出现对于开发和运维人员是一大福音,基于 Docker 可以方便地搞定标准化的发布流程,再也不用纠结不同环境导致的问题了。

其实,Docker 的使用可以理解为:软件是带环境安装的,也就是说,安装的时候把原始环境一模一样的复制过来一份。这样也就消除了不同机器运行结果不同的问题。

那么,Docker 是什么呢?Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从 Apache2.0 协议开源。它可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 可用于开发应用、交付应用、运行应用等场景。

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。Docker 允许用户将基础设施中的应用单独分割出来,形成更小的部分容器,从而提高软件交付速度。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版)和 EE(Enterprise Edition: 企业版),通常使用社区版就可以满足大多数业务场景。

3.Docker 容器与虚拟机的区别

Docker 容器与虚拟机很相似,但它们之间又有着很大的区别。

虚拟机是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。创建虚拟机时,会将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存,每个虚拟机都有独立的硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

虚拟机会消耗大量系统资源和开销,尤其是当多个虚拟机在同一物理服务器上运行时,每个虚拟机都有自己的子操作系统,大量精力以及资源被用于虚拟化的部署和运行上。

容器类似于虚拟机,只是容器不是完整的操作系统,容器通常只包含必要的操作系统包和应用程序,这就是它们轻量级的原因。

在这里插入图片描述

Docker 与虚拟机

可以出,传统的虚拟机是在宿主机之上,又添加了一个新的操作系统,这就导致了虚拟机的臃肿,不适合迁移。而 Docker 是直接寄存在宿主机上,完全就会避免大部分虚拟机带来的困扰。

Docker 是一个黑盒的进程,区别于传统的进程,Docker 可以独立出一个自己的空间,不会使得在 Docker 中的行为以及变量溢出到宿主机上。

容器与虚拟机的各项区别:
在这里插入图片描述

容器与虚拟机的区别

Docker 能做什么?

那么,当在开发中使用了 Docker 能为我们带来哪些便利呢?先来看一张图。

在这里插入图片描述

Docker 使用前后对比

在没有使用 Docker 时,我们开发完毕一个项目,需要打成 war 包或 jar 包。然后,在服务器上进行各种环境的安装、配置以及应用程序维护,比如:JDK、Tomcat、数据库等。

而且,上述的配置在开发环境、测试服务器、生产服务器(通常会有很多个),都需要进行一遍同样的操作,工作量相当繁重。在使用了 Docker 之后,我们可以自己创建一个空的镜像从头构建,也可以使用公共仓库中已经构建好的镜像,直接使用。当需要在不同环境中进行部署时,直接使用构建好的镜像即可,一次构建,多环境多次使用,方便快捷。

4.Docker 的 6 大优势

对比传统的运维发布方式,Docker 有以下 6 大优势:

1、更高效地利用系统资源

Docker 对系统资源的利用率更高。因为容器不用硬件虚拟以及运行完整操作系统等额外开销,无论是应用执行速度、内存损耗或者文件的存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,相同配置的主机,往往可以运行更多数量的应用。

2、更快的启动时间

传统的虚拟机技术启动应用服务往往是分钟级别的,而 Docker 由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间,大大的节约了开发、测试、部署的时间。

3、一致的运行环境

开发中常见的问题是环境一致性问题,由于开发测试生产环境的不一致,导致有些 bug 没能在开发过程中被发现,而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“代码在我机器上能跑,这不怪我啊”这类问题。

4、持续交付和部署

对开发和运维(DevOps)来说,最希望的就是一次创建或配置,可以在任意地方正常运行,使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。

5、更轻松迁移

Docker 确保了执行环境的一致性,使得应用的迁移更加容易,Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户不用担心运行环境的变化导致应用无法正常运行的情况。

6、更轻松的维护和拓展

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

Docker 的基础概念
在使用 Docker 时,我们要掌握 Docker 中的一些核心组件及概念。

来看一张 Docker 的架构图:
Docker 架构图
Docker 架构图

Docker 的基本组成是由镜像(image)、容器(container)、仓库(repository)构成

镜像(image)
Docker 镜像就是一个只读的模板,是文件与 meta data 的集合。镜像是基于分层的实现的,每一层都可以添加删除文件,从而形成新的镜像。

镜像可以理解为是一个树状结构,每一个镜像都会依赖于另一个镜像,这个依赖关系体现在 Docker 镜像制作的 Dockerfile 中的 FROM 指令上的。关于 Dockerfile 及其中的 FROM 指令,需要注意的是:如果是树的根,那么就需要"FROM scratch"。

镜像可以用来创建 Docker 容器,一个镜像可以创建多个容器。

容器(container)
Docker 利用容器独立运行的一个或一组应用。容器是用镜像创建的运行实例,是在 image 的最后一层上面再添加一层。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

容器与镜像相对比:镜像负责存储和分发,容器负责运行,它们之间的关系可以类比 Java 中类和实例的关系。

容器可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境和运行在其中的应用程序。

仓库(repository)
仓库是集中存放镜像文件的场所,它有点类似于 Maven/Git 的仓库,当我们需要镜像文件时,可以从远程仓库中拉取。

仓库和仓库注册服务器(Registry)是有区别的。仓库注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。目前最大的公开仓库是 Docker Hub。

小结

通过本篇给大家讲解了 Docker 的基本使用场景、相关概念、Docker 能为我们带来什么、Docker 的优势等,想必大家通过本篇文章已经能够从整体上了解了 Docker 的概况。

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

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

相关文章

一键生成代码

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

C++/C按照时间命名保存bin文件

背景 在Linux应用编程过程中,使用C或者C语言保存、读取bin文件是比较常见的需求。这里详细记录一下使用C保存bin文件,也可以使用C语言实现。 代码 C/C语言保存bin文件函数,C中也能使用 正确写入返回0,错误返回-1 // C 保存bi…

ASP.NET Core Web API入门:创建新项目

ASP.NET Core Web API入门:创建新项目 一、引言二、创建新项目三、加入Startup类,并替换Program.cs内容四、编辑Program.cs代码五、修改控制器的路由六、运行项目 一、引言 最近闲着,想着没真正从0-1开发过ASP.NET Core Web API的项目&#…

找不到xinput1_3.dll怎么办?xinput1_3.dll丢失的四个修复方法

在我们打开游戏的或者软件的时候,电脑提示“找不到xinput1_3.dll,无法继续执行此代码”怎么办?相信困扰着不少小伙伴,我再在打开吃鸡的时候,然后花了一上午的时候时间研究,现在终于知道xinput1_3.dll文件是…

中国电子学会2023年05月份青少年软件编程Scratch图形化等级考试试卷三级真题(含答案)

2023-05 Scratch三级真题 分数:100 题数:38 测试时长:60min 一、单选题(共25题,共50分) 1. 关于变量,下列描述错误的是?(A )(2分) A.只能建一个变量 …

Visual Studio 2022 v17.6 正式发布

Visual Studio 17.6 正式发布,这个最新版本提供了一系列强大的工具和功能,旨在使你能够制作出最先进的应用程序。 提高生产力 通过 Visual Studio 2022,目标是帮助你在更短的时间内完成 IDE 内的所有开发任务,在这个版本中&…

OpenPCDet安装、使用方式及自定义数据集训练

OpenPCDet安装、使用方式及自定义数据集训练 个人博客 OpenPCDet安装 # 先根据自己的cuda版本,安装对应的spconv pip install spconv-cu113# 下载OpenPCDet并安装 git clone https://github.com/open-mmlab/OpenPCDet.git cd OpenPCDet pip install -r requireme…

Linux 负载均衡集群 LVS_NAT模式 LVS_DR模式

集群 由多台主机组成,只做一件事,对外表现为一个整体。 只干一件事 :集群 干不同的事:分布式 企业集群分类 负载均衡群集(load balance cluster) 提高系统响应效率,处理更多的访问请…

深度学习的低秩优化:在紧凑架构和快速训练之间取得平衡(上)

论文出处:[2303.13635] Low Rank Optimization for Efficient Deep Learning: Making A Balance between Compact Architecture and Fast Training (arxiv.org) 由于篇幅有限,本篇博客仅引出问题的背景、各种张量分解方法及其分解FC/Conv层的方法&#x…

车牌识别之UI(Tkinter + OpenCV显示Picture和Video)

画一张总图: 图形界面开发 本篇只介绍图形界面开发。 遇到的第一个问题就是选择什么开发语言和技术。因为我之前用Python做过Tkinter的小东西,所以这次还是用Python Tkinter OpenCV来搞吧。 这里面需要注意几个地方: 1. Tkinter 的布局 …

冒泡排序、插入排序、希尔排序、选择排序

一、排序协议的定义 在博客的开头的,我们先给出排序协议的定义。因为我们本篇博客含有多种排序方式,为了使每种排序方法对外调用方式一致,我们需要定义一个排序的相关协议。所有排序的相关类都必须遵循该协议,让此协议来定义具体…

快速实现一个分布式定时器

定时器(Timer)是一种在业务开发中常用的组件,主要用在执行延时通知任务上。本文以笔者在工作中的实践作为基础,介绍如何使用平时部门最常用的组件快速实现一个业务常用的分布式定时器服务。同时介绍了过程中遇到问题的一些解决方案…

Android AIDL的使用(配源码)

零、完整源代码 链接: https://github.com/jx0260/TestGradle 一、创建AIDL文件 // IShopAidlInterface.aidl package com.example.testgradle;// Declare any non-default types here with import statementsinterface IShopAidlInterface {String getProductInfo(int prod…

【2023最新教程】一文3000字从0到1教你做app自动化测试(保姆级教程)

一、什么是App自动化?为什么要做App自动化? App自动化是指给 Android或iOS上的软件应用程序做的自动化测试。手工测试和自动化测试的对比如下: 手工测试优势:不可替代、发现更多bug、包含了人的想象力与理解力。 注意&#xff0c…

迅为iTOP-RK3588开发板Android12源码定制开发kernel开发

内核版本是 5.10.66 版本,内核默认的配置文件是 3588-android12/kernel-5.10/arch/arm64/configs/rockchip_defconfig 如果我们要使用图形化界面配置内核,操作方法如下所示: 方法一: 1 首先将默认的配置文件 rockchip_defconf…

博客系统测试用例设计之自动化测试

测试用例设计之自动化测试 🌷 一 测试用例设计🌺 1 功能测试🌸 (1)登录功能🌸 (2)列表页功能🌸 (3)编辑博客功能🌸 (4&…

DC LAB8SDC约束四种时序路径分析

DC LAB 1.启动DC2.读入设计3. 查看所有违例的约束报告3.1 report_constraint -all_violators (alias rc)3.2 view report_constraint -all_violators -verbose -significant_digits 4 (打印详细报告) 4.查看时序报告 report_timing -significant_digits 45. 约束组合逻辑(adr_i…

17 条件随机场

文章目录 17 条件随机场——CRF(Condition Random Field)17.1 背景介绍17.2 HMM与MEMM的区别17.3 MEMM与CRF的区别17.4 CRF模型17.4.1 CRF的概率密度函数17.4.2 CRF概率密度函数简化(向量形式) 17.5 CRF需要解决的问题17.6 边缘概…

测试者必知—如何做Web测试?常见测试点总结

目录 前言: 一、Web应用程序 二、功能测试 三、易用性测试(界面测试) 四、兼容性测试 五、安全性测试 六、性能测试 前言: Web测试是指对基于Web技术的应用程序进行测试,以测试其功能、性能、安全和稳定性等方面的表…

【图书推荐 | 12】前端系列

【赠书活动第十二期 】 图书推荐 本期书籍:前端系列 图书列表: Vue.js核心技术解析Nuxt.js实战Nuxt.js Web开发实战HTML5CSS 从入门到精通Flutter2 开发实例精解Electron项目开发实战 Vue.js核心技术解析 Nuxt.js实战 Nuxt.js Web开发实战 HTML5CSS 从入…
最新文章