【DevOps】 什么是容器 - 一种全新的软件部署方式

目录

引言

一、什么是容器

二、容器的工作原理

三、容器的主要特性

四、容器技术带来的变革

五、容器技术的主要应用场景

六、容器技术的主要挑战

七、容器技术的发展趋势


引言

在过去的几十年里,软件行业经历了飞速的发展。从最初的大型机时代,到后来的个人电脑时代,再到如今的云计算时代,软件和硬件的架构都发生了翻天覆地的变化。

其中,容器技术的出现无疑是近年来最引人注目的一个重大变革。它彻底颠覆了传统的软件部署方式,给整个软件行业带来了全新的发展机遇。

那么,什么是容器?它与传统的软件部署方式有什么不同?它究竟带来了哪些革命性的变革?让我们一起来详细探讨这个全新的软件部署方式。

一、什么是容器

容器,英文名称为Container,是一种全新的软件打包和部署方式。它将应用程序及其依赖的运行环境(包括代码、运行时、系统工具、系统库等)封装到一个标准化的执行单元中,从而实现软件在任何环境下都能够可靠地运行。

这与传统的软件部署方式有很大不同。在过去,我们通常会将应用程序安装到特定的操作系统上,并依赖于该操作系统提供的各种库和工具。这就意味着,应用程序必须与宿主操作系统环境保持高度一致,否则很可能会出现各种兼容性问题。

而容器则完全颠覆了这种做法。它将应用程序及其依赖的运行环境打包到一个标准化的镜像中,这个镜像可以在任何支持容器技术的平台上运行,而不需要关心底层操作系统的具体情况。

这种做法带来了很多好处:

1、环境一致性:容器可以保证应用程序在任何环境下都能够可靠地运行,因为它携带了所有必需的依赖项。这大大降低了由于环境差异导致的兼容性问题。

2、快速部署:由于容器是一个标准化的软件包,因此可以非常快速地部署和启动。相比传统的安装部署过程,容器部署通常只需要几秒钟的时间。

3、轻量高效:容器是一种轻量级的虚拟化技术,它不需要像虚拟机那样完整的操作系统,因此占用的资源更少,性能也更出色。

4、可移植性:容器镜像可以在任何支持容器技术的平台上运行,这大大提高了软件的可移植性。开发人员可以在笔记本电脑上开发,然后直接部署到生产环境中,而不需要担心环境差异的问题。

5、隔离性:容器提供了一定程度的隔离机制,可以将应用程序与底层操作系统和其他应用程序隔离开来,增强系统的安全性和稳定性。

总的来说,容器技术为软件的开发、部署和运行带来了全新的思路,彻底改变了传统的软件交付方式。下面我们就来详细了解容器的工作原理和主要特性。

二、容器的工作原理

容器的工作原理其实并不复杂,它的核心思想就是将应用程序及其所需的运行环境封装到一个标准化的镜像中,然后在任何支持容器技术的平台上启动和运行这个镜像。

这个过程可以分为以下几个步骤:

1、创建容器镜像
容器镜像是容器技术的核心,它包含了应用程序及其所需的所有依赖项,比如代码、运行时、系统工具、系统库等。镜像的创建通常由开发人员完成,他们会编写一个特殊的文件(称为Dockerfile)来定义镜像的构建过程。

Dockerfile 文件包含了一系列的指令,用于指定如何构建容器镜像。比如,可以指定基础镜像、安装依赖包、复制代码、设置环境变量等。通过执行Dockerfile,就可以生成一个标准化的容器镜像。

2、推送容器镜像
创建好容器镜像之后,通常会将其推送到容器镜像仓库中,以便后续使用。容器镜像仓库类似于代码仓库,它提供了容器镜像的存储和分发功能。常见的容器镜像仓库有Docker Hub、AWS ECR、Google Container Registry等。

3、部署容器
当需要运行应用程序时,就可以从容器镜像仓库中拉取对应的镜像,然后在支持容器技术的平台上启动一个容器实例。容器平台负责管理容器的生命周期,包括容器的创建、启动、停止、扩缩容等操作。

常见的容器平台有Docker、Kubernetes、AWS ECS、Azure Container Instances等。这些平台提供了丰富的功能,比如容器编排、负载均衡、自动伸缩等,使得容器的部署和管理变得更加简单高效。

4、访问容器
当容器实例启动后,就可以通过容器的网络地址访问里面运行的应用程序。容器平台通常会负责容器的网络配置和负载均衡,确保应用程序能够被正确访问。

总的来说,容器的工作原理就是将应用程序及其依赖项打包成一个标准化的镜像,然后在任何支持容器技术的平台上启动和运行这个镜像。这种方式大大简化了软件的部署和交付过程,并带来了诸多好处。

三、容器的主要特性

容器技术相比传统的软件部署方式具有许多独特的特性,这些特性是它能够快速普及并广泛应用的重要原因。

1、标准化
容器技术的核心在于提供一种标准化的软件打包和部署方式。通过Dockerfile等定义容器镜像的方式,开发人员可以将应用程序及其所有依赖项打包到一个标准化的容器镜像中。这个镜像可以在任何支持容器技术的平台上运行,大大提高了软件的可移植性。

2、轻量高效
容器是一种轻量级的虚拟化技术,它不需要像虚拟机那样完整的操作系统。相反,容器只需要包含应用程序所需的最小运行时环境,因此占用的系统资源更少,启动和停止也更快。这使得容器非常适合于微服务架构和快速部署的场景。

3、隔离性
容器提供了一定程度的隔离机制,可以将应用程序与底层操作系统和其他应用程序隔离开来。这样可以增强系统的安全性和稳定性,因为一个容器内的故障不会影响到其他容器或宿主系统。

4、可扩展性
容器技术天生支持水平扩展。开发人员可以根据业务需求,快速创建和销毁容器实例,从而实现应用程序的动态伸缩。这对于处理突发流量或应对业务高峰非常有帮助。

5、可重复性
容器镜像是一种可重复使用的软件包,开发人员可以将其部署到任何支持容器技术的环境中。这大大提高了软件交付的一致性和可靠性,减少了由于环境差异导致的问题。

6、持续交付
容器技术与持续集成/持续交付(CI/CD)流程高度集成,使得软件的构建、测试和部署变得更加自动化和高效。开发人员只需要定义好容器镜像的构建过程,后续的部署工作就可以完全自动化完成。

7、持续交付
容器技术与持续集成/持续交付(CI/CD)流程高度集成,使得软件的构建、测试和部署变得更加自动化和高效。开发人员只需要定义好容器镜像的构建过程,后续的部署工作就可以完全自动化完成。

8、生态丰富
容器技术已经形成了一个非常丰富的生态圈,拥有大量的工具、平台和服务。比如Docker、Kubernetes、AWS ECS等,它们为容器的管理、编排、监控等提供了强大的支持。这使得容器技术在企业级应用中的应用变得更加简单和高效。

总的来说,容器技术的这些独特特性,使其成为近年来软件行业中最重要的技术革新之一。下面我们就来看看容器技术在实际应用中带来的一些变革。

四、容器技术带来的变革

容器技术的出现,不仅改变了软件的部署方式,也深刻影响了整个软件行业的发展。以下是一些主要的变革:

1、微服务架构的兴起
容器技术非常适合于微服务架构。微服务将复杂的应用程序拆分成一系列松耦合的服务,每个服务都可以独立开发、部署和扩展。容器正好可以将每个微服务打包到一个标准化的镜像中,方便快速部署和水平扩展。

这种架构模式大大提高了应用程序的灵活性和可扩展性,使得企业能够更好地应对瞬息万变的业务需求。同时,微服务架构也为容器技术的广泛应用提供了绝佳的场景。

2、DevOps 实践的普及
容器技术与DevOps实践高度契合。DevOps强调开发和运维的紧密协作,以提高软件的交付效率和质量。容器正好可以帮助实现这一目标 - 开发人员可以将应用程序及其依赖项打包成标准化的容器镜像,运维人员则负责容器的部署和管理。这种基于容器的DevOps实践,使得软件的构建、测试和部署变得更加自动化和高效。同时,容器的轻量级特性也使得开发人员能够更快速地进行迭代和部署。

3、云原生应用的崛起
容器技术的出现,推动了云原生应用的快速发展。云原生应用是一种专门为云环境设计的应用程序,它们充分利用了云计算的弹性、可扩展性和高可用性等特点。容器正好可以为云原生应用提供一个标准化的运行环境。开发人员可以将应用程序及其依赖项打包成容器镜像,然后部署到公有云或私有云平台上。这不仅简化了应用程序的部署和管理,也大大提高了应用程序的可移植性和可扩展性。

4、应用程序的快速交付
容器技术大大缩短了应用程序的交付周期。传统的软件部署通常需要复杂的安装和配置过程,容易出现各种兼容性问题。而容器则提供了一种标准化的软件包,可以快速部署到任何支持容器的环境中。这不仅提高了部署的效率,也降低了由于环境差异导致的问题。开发人员可以更专注于应用程序的功能开发,而不需要过多地考虑部署和运维的问题。

5、应用程序的可移植性
容器技术大幅提高了应用程序的可移植性。传统的应用程序通常与特定的操作系统和硬件环境高度耦合,这限制了它们在不同平台上的部署。而容器则完全解决了这个问题 - 它将应用程序及其依赖项打包成一个标准化的镜像,可以在任何支持容器技术的平台上运行。这使得应用程序的部署变得更加灵活和自由,开发人员可以将应用程序部署到公有云、私有云或者本地环境,而不需要担心环境兼容性的问题。

总的来说,容器技术的出现,不仅改变了软件的部署方式,也深刻影响了整个软件行业的发展方向。它推动了微服务架构、DevOps实践和云原生应用的普及,大大提高了应用程序的交付效率和可移植性。

五、容器技术的主要应用场景

容器技术广泛应用于各个行业和领域,以下是一些典型的应用场景:

1、微服务架构
容器技术非常适合于微服务架构。开发人员可以将每个微服务打包成一个独立的容器镜像,然后部署到容器平台上。这样可以实现微服务的快速部署和独立扩展,提高应用程序的灵活性和可扩展性。

2、云原生应用
容器技术是云原生应用的基础。云原生应用专门为云环境设计,充分利用了云计算的弹性、可扩展性和高可用性等特点。容器正好可以为这类应用程序提供一个标准化的运行环境,使得它们能够更好地适应云计算的特点。

3、持续交付
容器技术与持续集成/持续交付(CI/CD)流程高度集成。开发人员可以将应用程序打包成容器镜像,然后通过自动化的流水线部署到生产环境。这大大提高了软件交付的效率和可靠性。

4、开发测试环境
容器技术可以帮助简化开发测试环境的搭建和维护。开发人员可以将整个开发环境打包成容器镜像,在任何地方都可以快速复制和部署。这样可以避免环境差异导致的问题,提高开发效率。

5、应用程序迁移
容器技术可以帮助企业轻松地将应用程序从本地环境迁移到云平台。只需要将应用程序打包成容器镜像,然后部署到云上的容器平台即可,无需重新设计或重写应用程序。这大大降低了应用程序迁移的难度和风险。

6、混合云/多云部署
容器技术支持跨平台部署,使得应用程序可以在公有云、私有云和本地环境之间自由迁移。这种混合云或多云的部署模式,可以帮助企业充分利用不同云平台的优势,提高应用程序的可用性和容错性。

7、批处理任务
容器技术也适用于批处理任务的运行。开发人员可以将批处理作业打包成容器镜像,然后部署到容器平台上进行处理。这种方式可以提高批处理任务的效率和可靠性,并且支持横向扩展以应对高并发的需求。

8、物联网和边缘计算
容器技术也被应用于物联网和边缘计算领域。由于容器具有轻量级和可移植性的特点,非常适合部署在资源受限的边缘设备上。这使得企业能够在边缘端快速部署和运行各种应用程序,提高响应速度和减少网络传输延迟。

容器技术凭借其标准化、轻量高效、隔离性等特点,广泛应用于微服务架构、云原生应用、持续交付、开发测试环境等场景,为企业带来了诸多好处。随着容器生态系统的不断完善,容器技术必将在未来软件行业中扮演越来越重要的角色。

六、容器技术的主要挑战

尽管容器技术已经取得了巨大的成功,但在实际应用中仍然面临着一些挑战和问题,需要进一步解决和优化。以下是一些主要的挑战:

1、安全性
容器技术提供了一定程度的隔离,但并不能完全杜绝安全漏洞和攻击风险。容器镜像中可能包含安全隐患,如果没有妥善管理,很容易被黑客利用。同时,容器的网络连接和权限管理也需要特别注意,以防止安全事故的发生。

2、监控和可观测性
由于容器的高度动态性和分布式特点,对容器的监控和可观测性成为一大挑战。需要采用专门的监控工具和方法,对容器的资源使用、日志、指标等进行全面的监控和分析,以确保容器应用的稳定运行。

3、数据持久性
容器是无状态的,这意味着容器内的数据在容器停止或销毁时会丢失。因此,如何保证容器应用的数据持久性是一个需要解决的问题。通常需要使用外部存储系统或者数据卷等方式来实现数据的持久化。

4、网络管理
容器的网络管理也是一大挑战。容器可能需要跨主机进行通信,需要解决容器IP地址的分配、服务发现、负载均衡等问题。同时,容器的网络策略和安全规则也需要特别管理和配置。

5、编排和管理
随着容器规模的不断增大,手动管理容器变得越来越困难。因此需要借助容器编排工具(如Kubernetes)来自动化地管理和编排容器。但这些工具本身也有一定的复杂性,需要投入大量的学习和实践。

6、标准化和生态
尽管容器技术已经相当成熟,但由于缺乏统一的标准,不同容器平台之间的兼容性和互操作性仍然是一个挑战。同时,容器生态系统中也存在着工具碎片化的问题,需要进一步整合和规范化。

7、性能问题
容器的隔离性和轻量级特点,也可能带来一些性能问题。比如,容器的网络性能、I/O性能等可能会受到影响。因此需要对容器的性能进行优化和调优,以满足不同应用场景的需求。

尽管容器技术已经取得了巨大的成功,但在实际应用中仍然存在着一些挑战和问题。这些挑战需要通过不断的创新和实践来解决,以确保容器技术能够更好地服务于各行各业。

七、容器技术的发展趋势

随着容器技术的不断成熟和普及,未来它的发展趋势可能体现在以下几个方面:

1、容器编排和管理的进一步自动化
随着容器规模的不断扩大,手动管理容器变得越来越困难。因此,容器编排和管理工具(如Kubernetes)将会进一步发展,提供更加智能和自动化的功能,帮助企业更好地管理和编排容器。

2、安全性的持续改善
容器的安全性一直是一个重点关注的问题。未来,容器技术将继续优化安全机制,如增强容器的隔离能力、提升镜像安全性、加强网络安全等,以确保容器应用的安全性。

3、数据管理和存储的优化
容器的无状态特点给数据管理带来了挑战。未来,容器技术将与存储系统进一步融合,提供更好的数据持久性和可靠性解决方案,满足各种应用场景的需求。同时,容器也将支持更加灵活的数据卷管理机制。

4、性能优化和可观测性增强
随着容器应用规模的不断扩大,性能优化和可观测性将成为重点关注的领域。未来容器技术将提供更加精细的性能监控和分析工具,帮助用户快速定位和解决性能问题。同时,容器的可观测性也将得到进一步增强。

5、跨平台和异构支持的加强
容器技术的跨平台和异构支持能力将进一步增强。未来,容器将能够更好地支持不同操作系统、硬件架构以及云平台,提高应用程序的可移植性。同时,容器也将支持更多种类的应用类型,如IoT、AI等。

6、边缘计算和物联网的应用
随着边缘计算和物联网的快速发展,容器技术将在这些领域扮演越来越重要的角色。轻量级、可移植的容器特性非常适合部署在资源受限的边缘设备上,支持在边缘端快速部署和运行各种应用程序。

7、无服务器(Serverless)模式的兴起
容器技术与无服务器(Serverless)计算模式高度契合。未来,容器可能会与无服务器平台进一步融合,为用户提供更加自动化和无缝的应用部署和运行体验,进一步降低用户的运维负担。

8、开源生态的持续繁荣
容器技术的发展离不开开源生态圈的支持。未来,开源容器技术和工具将会持续繁荣,为用户提供更加丰富和成熟的解决方案。同时,容器技术也将与其他开源项目(如Kubernetes、Prometheus等)进一步融合,形成更加完整的生态系统。

容器技术的未来发展将围绕着进一步提升容器的自动化管理、安全性、性能、可观测性,以及跨平台支持、边缘计算应用、无服务器模式等方向不断前进。随着容器生态的持续繁荣,容器技术必将在未来软件行业中扮演越来越重要的角色。

八、总结
容器技术的出现,彻底改变了软件的部署和交付方式。它将应用程序及其依赖项打包成一个标准化的镜像,可以在任何支持容器技术的平台上快速部署和运行。这种方式大大提高了软件的可移植性、可扩展性和一致性,给整个软件行业带来了全新的发展机遇。

容器技术的主要特点包括标准化、轻量高效、隔离性、可扩展性等,这些特点使其在微服务架构、云原生应用、持续交付等场景中广受青睐。同时,容器技术也正在推动着软件行业的诸多变革,如微服务架构的兴起、DevOps实践的普及、云原生应用的崛起等。

尽管容器技术已经取得了巨大的成功,但在实际应用中仍然面临着一些挑战,如安全性、监控可观测性、数据持久性等问题需要进一步解决。未来,容器技术的发展趋势将围绕着进一步提升自动化管理、安全性、性能等方面,同时也将在边缘计算、无服务器等新兴领域发挥重要作用。

容器技术的出现无疑是软件行业发展史上的一个重大里程碑。它不仅改变了软件的部署方式,也深刻影响了整个行业的发展方向。相信在不久的将来,容器技术必将成为软件行业的标准配置,为企业和开发者带来更多的创新可能。

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

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

相关文章

【Mongodb-01】Mongodb亿级数据性能测试和压测

mongodb数据性能测试 一,mongodb数据性能测试1,mongodb数据库创建和索引设置2,线程池批量方式插入数据3,一千万数据性能测试4,两千万数据性能测试5,五千万数据性能测试6,一亿条数据性能测试7&am…

MySQL-----InnoDB的自适应哈希索引

InnoDB存储引擎监测到同样的二级索引不断被使用,那么它会根据这个二级索引,在内存上根据二级索引树(B树)上的二级索引值,在内存上构建一个哈希索引,来加速搜索。 查看是否开启自适应哈希索引 show variables like innodb_adapti…

JavaScript常见面试题(一)

文章目录 1. JavaScript有哪些数据类型,它们的区别?2.数据类型检测的方式有哪些3. 判断数组的方式有哪些4.null和undefined区别5.typeof null 的结果是什么,为什么?6.intanceof 操作符的实现原理及实现7.为什么0.10.2 ! 0.3&…

Fluent固体运动的设置方法(1)

1 概述 固体运动是某些CFD问题中必须要考虑的因素,如风扇的旋转。相关问题可分类如下: 问题类型是否为刚体运动规律是否已知无特定称呼YY六自由度运动问题YN流固耦合问题NN 在 Fluent 中,有多种方法表征固体运动,包括&#xff1…

【医学图像处理】从ADNI中下载样本的MMSE数据

MMSE是什么? 简易精神状态检查(MMSE,Mini-Mental State Examination)是一种广泛使用的认知功能评估工具。它通常用于临床和研究环境中筛查痴呆症及评估其严重程度。MMSE通过考察患者的多种认知功能来进行评估,包括算术…

深度学习(八)——神经网络:卷积层

一、卷积层Convolution Layers函数简介 官网网址:torch.nn.functional — PyTorch 2.0 documentation 由于是图像处理,所以主要介绍Conv2d。 class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, b…

C++初学者指南第一步---3.输入和输出(基础)

C初学者指南第一步—3.输入和输出&#xff08;基础&#xff09; 1. I/O Streams(I/O流) #include <iostream>int main () {int i;// read value into istd::cin >> i; // print value of istd::cout << i << \n; }数据的来源和目标 …

解决MyBatis获取刚插入数据的ID值

解决MyBatis获取刚插入数据的ID值 Mybatis获取刚插入数据的ID值有很多解决方法&#xff0c;目前采用以下方式进行获取。 添加完数据后直接返回刚添加数据的id // UserDao.java public static void addUser() throws Exception{InputStream resourceAsStream Resources.getR…

绝了!篇篇10万+的AI治愈系插画,完整版项目拆解(附提示词)!

大家好&#xff0c;我是向阳 最近&#xff0c;治愈系插画在小某薯上热度很高&#xff0c;比如这个号&#xff0c;每一篇的笔记数据都不错&#xff0c;2个月时间涨粉7.3万。 然后&#xff0c;我偶然发现&#xff0c;有人把这样的治愈插画用到公某号爆文的配图上&#xff0c;每一…

Passper for ZIP 安装教程 (ZIP密码恢复软件)

前言 Passper for ZIP是一款功能强大且实用的ZIP密码恢复软件。当你忘记了压缩包的密码时&#xff0c;这个工具可以轻松解决这个问题。只需按照界面上的提示操作&#xff0c;选择文件&#xff0c;然后选择解码的方式&#xff0c;即可轻松等待恢复完成。该软件支持四种密码恢复…

软考初级网络管理员__Web网站的建立、管理维护以及网页制作单选题

1.在HTML 中&#xff0c;用于输出“>”符号应使用()。 gt \gt > %gt 2.浏览器本质上是一个&#xff08;&#xff09;。 连入Internet的TCP/IP程序 连入Internet的SNMP程序 浏览Web页面的服务器程序 浏览Web页面的客户程序 3.HTML 语言中&#xff0c;单选按钮的…

ollama 多模态llava图像识别理解模型使用

参考: https://llava-vl.github.io/ https://ollama.com/blog/vision-models https://blog.csdn.net/weixin_42357472/article/details/137666022 下载: ollama run llava:13bcli使用 图片地址前面空格就行 describe this image: /ai/a1.jpg

笔记本电脑安装属于自己的Llama 3 8B大模型和对话客户端

选择 Llama 3 模型版本&#xff08;8B&#xff0c;80 亿参数&#xff09; 特别注意&#xff1a; Meta 虽然开源了 Llama 3 大模型&#xff0c;但是每个版本都有 Meta 的许可协议&#xff0c;建议大家在接受使用这些模型所需的条款之前仔细阅读。 Llama 3 模型版本有几个&…

在矩池云使用GLM-4的详细指南(无感连GitHubHuggingFace)

GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本&#xff0c;在多项测试中表现出超越已有同等规模开源模型的性能&#xff0c;它能兼顾多轮对话、网页浏览、代码执行、多语言、长文本推理等多种功能&#xff0c;性能更加强大。其多模态语言模型GLM-4V-9B在…

socket收发数据的处理

1. TCP 协议是一种基于数据流的协议 Socket的Receive方法只是把接收缓冲区的数据提取出来,当系统的接收缓冲区为空,Receive方法会被阻塞,直到里面有数据。 Socket的Send方法只是把数据写入到发送缓冲区里,具体的发送过程由操作系统负责。当操作系统的发送缓冲区满了,Send方法会…

《TCP/IP网络编程》(第十五章)套接字和标准I/O

之前数据通信时&#xff0c;使用的是read&write函数以及其他各种I/O函数&#xff0c;本章将使用标准I/O函数&#xff0c;例如C语言的fopen、fgetc、fputs等等&#xff1b;C语言的cout、cin等等 1.使用标准I/O函数的优点 ①跨平台兼容性&#xff1a; 标准I/O函数通常是跨平…

大数据实训项目(小麦种子)-04、大数据实训项目JavaWeb环境搭建

文章目录 前言运行前准备工作1、安装Hadoop3.1.0配置winutils原因描述配置方式注意点&#xff08;hadoop.dll拷贝System32目录下&#xff09; 2、hive运行报错&#xff08;The dir: /tmp/hive on HDFS should be writable. &#xff09; 项目环境搭建参考资料 前言 博主介绍&a…

【LLM之RAG】RAFT论文阅读笔记

研究背景 论文针对的主要问题是如何将预训练的大型语言模型&#xff08;LLMs&#xff09;适应特定领域的检索增强生成&#xff08;RAG&#xff09;。这些模型通常在广泛的文本数据上进行预训练&#xff0c;已经表现出在广义知识推理任务上的优越性能。然而&#xff0c;在特定领…

Google Earth Engine(GEE)——在控制台上答应出一个button按钮

函数: ui.Button(label, onClick, disabled, style) A clickable button with a text label. Arguments: label (String, optional): The buttons label. Defaults to an empty string. onClick (Function, optional): A callback fired when the button is clicked. T…

面试题 17.06. 2出现的次数

题解&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;. - 力扣&#xff08;LeetCode&#xff09; 数位 DP 通用模板_哔哩哔哩_bilibili class Solution { public:int numberOf2sInRange(int n) {std::string str to_string(n);int len str.size();std::vector<std:…