【Docker】进阶之路:(二)Docker简介

news2024/10/6 2:26:47

【Docker】进阶之路:(二)Docker简介

  • 什么是 Docker
  • Docker 由来与发展历程
  • Docker的架构与组成
  • Docker容器生态
    • 容器核心技术
      • 容器规范
      • 容器平台技术
  • 为什么使用Docker
    • Docker的应用场景

什么是 Docker

简单地讲,Docker就是一个应用容器引擎,通过Docker,管理员可以非常方便地对容器进行管理。Docker基于Go语言开发,并且遵从Apache 2.0开源协议。
Docker提供了对容器镜像的打包封装功能。利用Docker,开发者可以将他们开发的应用系统以及依赖打包起来,放到一个轻量级的、可移植的容器中,然后发布到任何的Linux或者Windows上面。这样的话,Docker就统一了整个开发、测试和部署的环境和流程,极大地减少运维成本。
Docker完全使用沙箱机制,容器之间不会有任何的接口。

Docker 由来与发展历程

2010年,几个大胡子年轻人在美国旧金山成立了一家做PaaS(Platform-as-a-Service,平台即服务)平台的公司,并且起名为dotCloud。虽然dotCloud公司曾经获得过一些融资,但随着大厂商,包括微软、谷歌以及亚马逊等杀入云计算领域,dotCloud公司举步维艰。
幸运的是,上帝每关上一扇门,就会打开一扇窗。2013年初,dotCloud公司的工程师们决定将他们的核心技术Docker开源,这项技术能够将Linux容器中的应用代码打包,轻松地在服务器之间迁移。
令所有人意想不到的是,开源之后Docker技术风靡全球,于是,dotCloud公司决定改名为Docker,全身心投入到Docker的开发中。2014年8月,Docker公司宣布把PaaS业务dotCloud出售给位于德国柏林的PaaS服务提供商cloudControl,自此,dotCloud和Docker分道扬镳。

Docker的架构与组成

Docker采用C/S架构,即客户端/服务器架构。管理员通过Docker客户端与Docker服务器进行交互。Docker服务器端负责构建、运行和分发Docker镜像。用户可以把Docker的客户端和服务器部署在同一台机器上面,也可以分别部署在不同的机器上面,两者之间通过各种接口进行通信。
Docker的典型体系架构如图所示。
在这里插入图片描述

Docker容器生态

容器核心技术

容器核心技术是指能够让 container 在 host 上运行起来的那些技术。 这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry以及容器OS,下面分别介绍。

容器规范

容器不仅有 Docker,还有如 CoreOS 的 rkt等其他容器。为了保证容器生态的健康发展,保证不同容器之间能够兼容,包括Docker、CoreOS、Google等在内的若干公司共同成立了 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。OCI已发布了两个规范:runtime spec 和 image format spec。 有了这两个规范,不同组织和厂商开发的容器能够在不同的 runtime 上运行,保证了容器的可移植性和互操作性。

容器平台技术

容器核心技术使得容器能够在单个 host 上运行,而容器平台技术能够让容器作为集群在分布式环境中运行。容器平台技术包括容器编排引擎、容器管理平台和基于容器的 PaaS。下面将介绍这几块内容。

容器编排引擎

基于容器的应用一般会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过 API 对外提供服务。为了保证应用的高可用,每个组件都可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。
这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群,这就是容器编排引擎要负责的工作。
所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机地组合成微服务应用,以实现业务需求。

为什么使用Docker

Docker的应用场景

Docker提供轻量级的虚拟化服务。每个Docker容器都可以运行一个独立的应用。例如,用户可以将Java应用服务器Apache Tomcat运行在一个容器中,而MySQL数据库服务器运行在另外一个容器中。
目前,Docker的应用场景非常广泛,主要有以下几种。

  1. 简化配置
    这是Docker的初始目的。Docker将应用程序代码、运行环境以及配置进行打包。用户在部署时,只要以该镜像为模板创建容器即可。实际上,这实现了应用环境和底层环境的解耦。
  2. 简化部署过程
    Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,即可实现虚拟化。
    Docker改变了传统的虚拟化方式,使得开发者可以直接将自己开发的应用放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的任务,在Docker容器的处理下,只需要数分钟就能完成。
  3. 节省开支
    另一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker改变了高性能必然高价格的思维定势。Docker与云计算机的结合,不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker的广泛应用极大地降低了IT设施的运维成本。具体来说,主要体现在以下方面。

  • 轻量级的虚拟化。与传统的服务器或者主机虚拟化相比,Docker实现了更加轻量级的虚拟化。这对于应用部署来说,可以减少部署的时间成本和人力成本。
  • 标准化应用发布。Docker容器包含了运行环境和可执行程序,可以跨平台和主机使用。
  • 节约启动时间。传统的虚拟主机的启动一般是分钟级,而Docker容器启动是秒级。
  • 节约存储成本。以前一个虚拟机至少需要几个GB的磁盘空间,而Docker容器可以减少到MB级。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Axios 进行网络请求的全面指南

使用 Axios 进行网络请求的全面指南 本文将向您介绍如何使用 Axios 进行网络请求。通过分步指南和示例代码,您将学习如何使用 Axios 库在前端应用程序中发送 GET、POST、PUT 和 DELETE 请求,并处理响应数据和错误。 准备工作 在开始之前,请…

Opencv UI自动化应用人脸识别

OpenCV: Open Source Computer Vision Library OpenCV是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法 OpenCV官网:http://www.opencv.org.cn/ OpenCV 使用 C/C 开发,同时也提供了 Python、Ja…

【C语言】——函数递归,用递归简化并实现复杂问题

文章目录 前言一、什么是递归二、递归的限制条件三、递归举例1.求n的阶乘2. 举例2:顺序打印一个整数的每一位 四、递归的优劣总结 前言 不多废话了,直接开始。 一、什么是递归 递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢&#xf…

科学指南针助力江西高校开展《透射电子显微镜简介及案例分析课程》讲座

2023年11月,科学指南针与江西各大高校合作,共同开展了一场关于《透射电子显微镜的简介及案例分析课程》讲座。该讲座旨在加强学生对于透射电子显微镜的了解,提高他们在科学研究中的实践能力。 透射电子显微镜(简称TEM&#xff09…

《师兄啊师兄》第二季确认定档!海神扬名,稳健回归!

近日,《师兄啊师兄》第二季的定档海报和PV终于发布,确认将于12月14日上午10点强势回归!这部备受瞩目的国漫作品自第一季播出以来,便以其独特的剧情设定和唯美的画风,赢得了广大观众的喜爱。如今,动画第二季…

“轻松管理文件,一键导出表格,让您的归档工作井井有条“

在忙碌的工作中,我们经常会被大量的文件和数据所困扰。如何有效地管理和整理这些资料,成为了一个让人头疼的问题。今天,我们向您介绍一款强大的文件管理工具——一键导出表格,帮助您轻松解决这个问题。 第一步,首先我们…

【uC/OS-II】

uC/OS-II 1. uC/OS-II1.1 代码组成1.2 任务基本概念1.3 任务控制块![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/23fe7cd390b94b7eb06a110b10165d22.png)1.4 任务的状态与切换1.5 任务创建的代码 2 任务2.1 系统任务2.2 任务管理相关函数2.3 任务基本属性2.4 uC/…

Java当中常用的算法

文章目录 算法二叉树左右变换数据二分法实现 冒泡排序算法插入排序算法快速排序算法希尔排序算法归并排序算法桶排序算法基数排序算法分治算法汉诺塔问题动态规划算法引子代码实现背包问题 KMP算法什么是KMP算法暴力匹配KMP算法实现 今天我们来看看常用的算法,开干。…

SVN版本回退

文章目录 SVN版本回退 SVN版本回退 一、revert to this version和revert to this version的区别: 基于4674版本执行"revert to this version"操作效果: 基于4674版本执行"revert changes from this version"操作效果&#xff1…

探索 SNMPv3 魔法:armbian系统安装snmp服务并通过SNMPV3进行连接控制

文章目录 说明SNMP服务的安装本机连接SNMPV3操作MIB Browser连接SNMPV3问题总结密码过短权限配置错误,导致OID不存在 说明 工具 建议尝试专业版ireasoning MIB brower,因为只有专业版支持SNMP v3的连接。当然,也可以尝试其他SNMP客户端工具 …

Java中的异常:理解与处理编程中的“预期之外”

文章目录 什么是Java 异常?Java中异常有哪些类型?怎么处理编译时异常?总结 今天咱们聊聊Java世界里不可或缺的一部分——异常(Exception)。就像人生中的起起落落,编程世界也充满了不可预知的风险和状况,这就是我们今天…

微信小程序适配方案:rpx(responsive pixel响应式像素单位)

小程序适配单位:rpx 规定任何屏幕下宽度为750rpx 小程序会根据屏幕的宽度自动计算rpx值的大小 Iphone6下:1rpx 1物理像素 0.5css 小程序编译后,rpx会做一次px换算,换算是以375个物理像素为基准,也就是在一个宽度…

算法备胎hash和队列的特征——第五关青铜挑战

内容1.Hash存储方式2.Hash处理冲突的方式3.队列存储的基本特征4.如何使用链表来实现栈 1.Hash 基础 1.1Hash的概念和基本特征 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出&#…

每日一题 2048. 下一个更大的数值平衡数(枚举)

乍一看没什么想法,但它的 x 是有限的,而题目规定的数值平衡数的要求很严格,相对来说只有少部分数满足要求,所以想到了枚举的方法通过寻找所有在范围内的全排列中满足数值平衡数的要求的数,找到最接近 n 的一个官方给出…

uniapp实战 —— 竖排多级分类展示

效果预览 完整范例代码 页面 src\pages\category\category.vue <script setup lang"ts"> import { getCategoryTopAPI } from /apis/category import type { CategoryTopItem } from /types/category import { onLoad } from dcloudio/uni-app import { compu…

RabbitMQ使用指南

介绍主要特点常用插件使用RabbitMQ的插件常用插件列表 应用场景Kafka与RabbitMq的区别主要优缺点安装步骤插件安装步骤 使用RabbitMqJava代码示例拓展 介绍 RabbitMQ是由Erlang语言开发的&#xff0c;基于AMQP&#xff08;高级消息队列协议&#xff09;协议实现的开源消息代理…

皮卡丘软件的使用教程,python皮卡丘编程代码

本篇文章给大家谈谈皮卡丘软件的使用教程&#xff0c;以及python皮卡丘编程代码&#xff0c;希望对各位有所帮助&#xff0c;不要忘了收藏本站喔。 嗨害大家好鸭&#xff01;我是小熊猫❤ 昨天企鹅裙里有小伙伴说想让我用Python整个桌面小挂件~ 做个日历什么的感觉不够好玩~ 今…

智能统计账户支出,掌控财务状况,轻松修改明细。

在这个快节奏的时代&#xff0c;我们的生活每天都在发生着变化。无论是工资收入、购物消费&#xff0c;还是房租支出、投资理财&#xff0c;我们的财务状况也因此变得日益复杂。那么&#xff0c;有没有一种方法可以让我们轻松掌握自己的财务状况&#xff0c;实现智慧理财呢&…

springboot助农管理系统

springboot助农管理系统 源码获取&#xff1a; https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

小科普:什么是 API(应用程序编程接口)

API 是一种为客户提供服务的方式。 编者按&#xff1a;何为API&#xff1f;如果你在百度百科上搜索&#xff0c;你会得到如下结果&#xff1a;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;是一些预先定义的函数&#xff0c;目的…