Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 概述

news2024/11/16 7:26:56

容器技术是云原生的核心技术之一,利用容器化技术,可以将微服务以及它所需要的配置、依赖关系、环境变了等都可以便捷地部署到新的服务器节点上,而不用再次重新配置,这就使得微服务具备了强大的可移植性。

一、Docker 概述

Docker 仅是容器化技术,它不等于容器。容器的概念是 1979 年提出的 Unix chroot(实现进程间隔离),而 Docker 是 2013 年发布第一个版本。容器和虚拟机是类似的,容器技术本质上是一种资源隔离的虚拟化技术。

容器 = cgroups(资源控制)+ namaspace(访问隔离)+ rootfs(文件系统)+ engine(容器生命周期管理)

1、容器与虚拟机

维基百科:Virtualization

虚拟化是指创建某些资源的虚拟(而不是实际)版本的行为,包括虚拟计算机硬件平台、存储设备和计算机网络资源。虚拟化始于 20 世纪 60 年代,是一种将大型计算机提供的系统资源在不同应用程序之间进行逻辑划分的方法。

虚拟化技术可针对具体应用系统创建特定目的的虚拟环境,安全,效率高,快照、克隆、备份、迁移等非常方便。系统虚拟化是将一台物理计算机虚拟成一台或多台虚拟计算机系统,每个计算机系统都有自己的虚拟硬件,其上的操作系统认为自己运行在一台独立的主机上,计算机软件在一个虚拟平台上,而不是真实的硬件平台上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程,允许一个平台同时运行多个操作系统,并且应用程序可以在相互独立的空间内运行而互不影响。虚拟化技术在降低硬件成本的同时,还可以显著提高系统的工作效率和安全性。

容器和虚拟机都是虚拟化技术,其目标是为上层应用提供资源隔离的运行环境,但容器和虚拟机在实现技术上有着本质的区别。两者架构对比如下图所示:

(图片来自于网络)

容器是在 Linux 主机上本机运行的独立进程,与其他容器共享主机的内核,无须模拟操作系统指令,通过在操作系统层面进行虚拟化和进程资源隔离,容器可以在宿主机上轻松运行,几乎不占用额外的 CPU 和内存资源。典型的容器镜像大小通常在 MB 级别,可以在数秒内启动,提供了快速部署和轻量级的应用环境。

而虚拟机事需要运行完整的操作系统,并且每个虚拟机都有自己独立的操作系统内核,虚拟机通用软件模拟宿主机的操作系统指令,创建多个相对独立的操作系统实例,并在其上构建程序运行环境。因此虚拟机的隔离性更好,但相应地需要更多的资源,虚拟机的体积通常在 GB 级别,启动时间比较长,一般在数分钟以上。

容器相比虚拟机具有更快的启动时间和更轻量级的资源占用,适用于快速部署和轻量级应用场景。而虚拟机则提供了更好的隔离性,适用于需要更严格隔离和安全性的场景。

2、Docker 的发展史

Docker 的发展历程一般包括以下四个阶段:

起源阶段:2013 年前

Docker 的前身可以追溯到 Linux 容器技术的发展,该技术最早由 Linux 内核开发人员创建。2013 年,Docker 公司成立,由于 Docker 引入了易于使用的容器管理工具,使得容器技术开始受到广泛关注。

引爆点:2013 年-2014 年

Docker 在 2013 年推出首个公开测试版本,并在同年 3 月发布了第一个稳定版本。由于 Docker 的简单易用性和高效性,迅速引发了开发者和企业的关注。越来越多的公司开始使用 Docker 来构建、部署和管理应用程序。

生态系统的建立:2014 年-2016 年

在 Docker 的成功推动下,以 Docker 为核心的容器生态系统开始建立起来。越来越多的开源项目和商业产品围绕 Docker 进行开发和集成,如 Kubernetes、Docker Compose、Docker Swarm 等。这一时期,Docker 成为了容器技术的事实标准。

容器编排工具的崛起:2016 年后

随着容器技术的普及,容器编排工具成为了管理大规模容器集群的必备工具。Kubernetes 作为最流行的容器编排工具之一,在 2016 年后开始迅速崛起,并逐渐超越 Docker Swarm 成为容器集群管理的首选方案。此外,Docker 公司也将重心从容器编排转向了容器安全和开发者工具链等领域的发展。

Docker 的发展历程经历了从容器技术的开创阶段到容器生态系统的建立和壮大阶段,最终到容器编排工具的崛起阶段。作为容器技术的先驱和领导者之一,Docker 在推动整个容器生态系统的发展过程中发挥了重要作用。

3、Docker 的构成

(图片来自于网络)

上图是官方 Docker 引擎的组成架构,作为 Docker 的核心,采用 C/S 架构模式,包含三个组成部分:

服务器

这是 Docker 的守护进程,对应指令是:dockerd,用于创建管理 Docker 对象,包括容器、镜像、网络、卷等。

API

也称为描述性状态转移 API,提供用于与 Docker 守护进程进行通信并下达指令的接口。

客户端

指命令行界面,提供命令行接口,对应指令是:docker,通用 REST API 与守护进程进行通信并下达指令。

Docker 客户端和守护进程既可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程,CLI 使用 REST API 通过脚本或直接通过 CLI 命令来控制 Docker 守护进程或与之交互。守护进程创建并管理 Docker 对象,如镜像、容器、网络和数据卷。Docker 客户端通过守护进程操作 Docker 容器,而容器是通过镜像创建的,Docker 镜像保存在 Docker 仓库中,整个 Docker 架构如图所示:

(图片来自于网络)

从上图可以看出,在 Docker 宿主机上启动和运行 Docker 容器需要涉及三个关键组件:Docker 镜像、Docker 镜像仓库和 Docker 容器。

Docker 镜像(Image)

镜像是容器的基石,它类似于容器的源代码,包含了启动容器所需的所有条件,如应用代码、依赖库、环境变量和配置文件等。

Docker 镜像仓库(Registry)

Docker 镜像仓库用于存储用户创建的镜像,分为公共和私有两种类型。Docker 公司提供了 Docker Hub 作为官方的镜像仓库,用户可以在其中创建账户、分享和管理自己的镜像。此外,用户也可以搭建私有镜像仓库,用于内部部署和管理镜像。

Docker 容器(Container)

容器是 Docker 的运行实体,通过镜像启动。容器可以包含多个客户端进程,在容器内部运行。如果说镜像是 Docker 生命周期中构建和打包阶段的产物,那么容器则扮演了启动和执行阶段的角色。

4、Docker 的处理流程

(图片来自于网络)

如上图所示,启动一个 Docker 应用 app1 的流程说明如下:

  • 通过 Docker 客户端向守护进程发送启动 app1 指令
  • Docker 守护进程发请求给镜像仓库,检索 app1 的镜像
  • 找到 app1 镜像,下载到服务器
  • Docker 守护进程启动 app1 应用
  • app1 应用是否启动成功的结果返回给 Docker 客户端

5、Docker 的优势

Docker 重新定义了应用程序的开发、测试和部署流程,将其打包成一个可移植的容器,核心理念是“一次构建,多次运行”。这一革命性的技术在开发和运维领域提供了持续集成和持续部署的服务。

标准化和版本控制

Docker 是软件工程领域的“标准化”交付组件,类似于货物运输中的集装箱。集装箱提供了一种通用的封装货物的标准,大大提高了物流效率。同样地,Docker 的标准化交付物称为“镜像”,包含了应用程序及其所依赖的运行环境,使应用交付变得简单和标准化。此外,Docker 容器还类似于 Git 仓库,允许将变更提交到镜像中,并通过版本管理进行管理,轻松实现应用程序的回滚和管理。

一次构建,多次交付

Docker 镜像实现了“一次构建,多次交付”的理念,类似于货物运输中的“一次装箱,多次运输”。这使得 Docker 镜像在应用程序多副本部署或应用程序迁移等方面展现出了巨大的价值。由于容器技术已经形成了事实标准,并且 Docker 提供了良好的可移植性,Docker 镜像能够轻松地在不同的云平台之间移植,而不需要做任何修改。

应用隔离

Docker 容器实现了应用程序之间的隔离,类似于货物运输中的货物隔离。与传统的虚拟机相比,Docker 容器的开销更小。每个容器都拥有自己的资源,并与其他容器隔离。这意味着可以在不同的容器中运行使用不同堆栈的应用程序,同时确保资源的分配和利用的合理性。此外,Docker 还能够确保应用程序的彻底清除,通过简单地删除容器即可完成,不会在宿主机操作系统上留下任何的临时文件或配置文件。

以上是 Docker 技术带来的革命性变革,它为软件开发、测试和部署提供了全新的方式,使得应用程序的交付变得更加简单、标准化和可靠。

6、Docker 的常用命令

关于 Docker 的常用命令,本文灸哥就不再一一赘述了,各位读者自行查阅学习,送上 Docker 官网的 Docker 命令关系图:

(图片来自于网络)

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

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

相关文章

【前端系列】CSS 常见的选择器

CSS 常见的选择器 CSS(层叠样式表)是一种用于描述网页样式的标记语言,它定义了网页中各个元素的外观和布局。在 CSS 中,选择器是一种用于选择要应用样式的 HTML 元素的模式。选择器允许开发人员根据元素的类型、属性、关系等来选…

Android平台实现无纸化同屏并推送RTMP或轻量级RTSP服务(毫秒级延迟)

技术背景 在写这篇文章之前,实际上几年之前,我们就有非常稳定的无纸化同屏的模块,本文借demo更新,算是做个新的总结,废话不多说,先看图,本文以Android平台屏幕实时采集推送,Windows…

javaEE6(网站第3章-jsp练习中三个例题动手做一遍;课后题2(1),(2))

两个数求和 用javascript实现。 输入、处理、输出用同一个页面(自己处理自己)。 输入1.jsp,处理和输出2.jsp。 (4)输入1.jsp,处理2.jsp,处理完转回1.jsp显示结果。 (5)输入1.jsp,处…

【Prometheus】k8s集群部署node-exporter

​ 目录 一、概述 1.1 prometheus简介 1.2 prometheus架构图 1.3 Exporter介绍 1.4 监控指标 1.5 参数定义 1.6 默认启用的参数 1.7 prometheus如何收集k8s/服务的–三种方式收集 二、安装node-exporter组件 【Prometheus】概念和工作原理介绍-CSDN博客 【云原生】ku…

堆宝塔(Python)

作者 陈越 单位 浙江大学 堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下: 首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于…

计算表达式x*(2^i)的值math.ldexp(x, i)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算表达式x*(2^i)的值 math.ldexp(x, i) [太阳]选择题 关于以下代码输出的结果说法正确的是? import math print("【执行】math.ldexp(3,2)") print(math.ldexp(3,2)) …

PromptBreeder---针对特定领域演化和发展提示词的方法

原文地址:promptbreeder-evolves-adapts-prompts-for-a-given-domain 论文地址:https://arxiv.org/pdf/2309.16797.pdf 2023 年 10 月 6 日 提示方法分为两大类 硬提示是由人工精心设计的文本提示,包含离散的输入令牌;其缺点…

报名开启丨掘金海外,探寻泛娱乐社交APP出海新风口

随着国内泛娱乐行业用户规模趋于见顶,泛娱乐社交APP转向出海是必然趋势。 根据行业数据显示,有超过35%的国内实时社交企业已启动或者正在规划出海,而其中出海商户的音视频流量增长均超过了100%。尤其是在东南亚、中东、拉美等新兴…

简介:CMMI软件能力成熟度集成模型

前言 CMMI是英文Capability Maturity Model Integration的缩写。 CMMI认证简称软件能力成熟度集成模型,是鉴定企业在开发流程化和质量管理上的国际通行标准,全球软件生产标准大都以此为基点,并都努力争取成为CMMI认证队伍中的一分子。 对一个…

Java算法之动态规划

Java算法之动态规划 前言 ​ 最近这一段时间一直在刷算法题,基本上一有时间就会做一两道,这两天做了几道动态规划的问题,动态规划之前一直是我比较头疼的一个问题,感觉好复杂,一遇到这样的问题就想跳过,昨…

科技引领品质:飞利浦智能锁“12年免费换新机”重塑行业新标杆

随着智能锁行业的竞争愈发火热,各大品牌在技术创新和服务升级方面不断推陈出新。售后服务的形态正发生深刻变化,从传统的保修维修到如今的技术支持、24小时在线客服等,各大品牌都在不断地提升售后服务水平,以创新的服务理念和先进…

【C++】十大排序算法之 桶排序 基数排序

本次介绍内容参考自:十大经典排序算法(C实现) - fengMisaka - 博客园 (cnblogs.com) 排序算法是《数据结构与算法》中最基本的算法之一。 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序…

5G网络助力智慧文旅发展:实现旅游资源的优化配置与高效利用

目录 一、5G网络在智慧文旅中的关键作用 1、高速率传输提升数据处理能力 2、低时延助力实时决策与调度 3、大连接实现全面覆盖与精细化管理 二、5G网络助力实现旅游资源的优化配置 1、精准匹配游客需求与旅游资源 2、促进旅游资源的跨区域合作与共享 三、5G网络助力实现…

JavaSE-集合

● 在开发实践中,我们需要一些能够动态增长长度的容器来保存我们的数据,java中为了解决数据存储单一的情况,java中就提供了不同结构的集合类,可以让我们根据不同的场景进行数据存储的选择,如Java中提供了 数组实现的集…

【DimPlot】【FeaturePlot】使用小tips

目录 DimPlot函数参数解析 栅格化点图 放大 ggplot2 图例的点,修改图例的标题 FeaturePlot函数参数解析 调整FeaturePlot颜色 分组绘制featureplot 随手笔记,持续更新中。。。 Reference DimPlot函数参数解析 object: 一个Seurat对象,…

基于spring boot技术的签到管理系统的设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SpringBoot框架 3 1.2 Vue框架 3 1.3 ECharts 3 1.4 JQuery技术 4 1.5 本章小结 4 2 系统分析 5 2.1 需求分析 5 2.2 非功能需求 8 2.3 本章小结 8 3 系统设计 9 3.1 系统总体设计 9 3.1.1 系统体系结构 9 3.1.2 系统目录…

【深入理解LRU Cache】:缓存算法的经典之作

目录 一、什么是LRU Cache? 二、LRU Cache的实现 1.JDK中类似LRUCahe的数据结构LinkedHashMap 2.自己实现双向链表 三、LRU Cache的OJ 一、什么是LRU Cache? LRU Cache(Least Recently Used的缩写,即最近最少使用&#xff0…

python INI文件操作与configparser内置库

目录 INI文件 configparser内置库 类与方法 操作实例 导入INI文件 查询所有节的列表 判断某个节是否存在 查询某个节的所有键的列表 判断节下是否存在某个键 增加节点 删除节点 增加节点的键 修改键值 保存修改结果 获取键值 获取节点所有键值 其他读取方式 …

JAVA实战开源项目:超市自助付款系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 商品类型模块2.2 商品模块2.3 超市账单模块 三、界面展示3.1 登录注册模块3.2 超市商品类型模块3.3 超市商品模块3.4 商品购买模块3.5 超市账单模块 四、部分源码展示4.1 实体类定义4.2 控制器接口 五、配套文档展示六、…

【APP逆向】酒仙网预约茅台(附带源码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:爬虫实战,零基础、进阶教学 景天的主页:景天科技苑 文章目录 酒仙网预约抢购茅台1.抓包分析,账户名和密码登录2.短信登录3.登录+茅台预约 密码登录酒仙网预约抢购茅台 目标:账号登…