为什么我们需要Docker?

与虚拟机的比较


虚拟机也是一种虚拟化技术,它与Docker最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。

启动速度

启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢。

启动Docker相当于启动宿主机操作系统上的一个进程,为秒级别。

占用资源

虚拟机是一个完整的操作系统,需要占用大量的磁盘空间、内存和CPU资源;

Docker只是一个进程,只需要将应用及相关的组件打包,在运行时占用很少的资源,一台机器上可以开启成千上万个Docker。

镜像与容器

镜像是一种静态的结构,可以理解为是容器的源代码,也可以看作是面向对象中的类,而容器是镜像(类)的一个实例。

镜像包含着容器运行时所需要的代码及其它组件,它是一种分层结构,每次层都是只读的(Read-only layers)。

构建镜像时,会一层层构建,前一层是后一层的基础,镜像的这种分层结构很适合镜像的复用及定制。构建容器时,通过在镜像的基础上添加一个可写层,用来保存着容器运行过程中的修改。

优点

1.部署方便

在我们最开始学习编程的时候,搭建环境这一步往往要耗费我们很长时间,其中一个小问题也有可能需要很长时间去解决。

而有了容器之后,这些都变得非常容易,我们的开发环境就只是一个或者几个容器镜像的地址,最多在再需要一个控制部署流程的执行脚本,或者进一步将你的环境镜像以及镜像脚本放入一个Git项目发布到云端,需要的时候将它拉取到本地即可。

# git clone https://github.com/my-project

# sh ./my-build-boot.sh

2.部署安全

当我们收到一个bug反馈的时候,很多时候心里的第一反应都是"在我本地就是好的啊,是不是你环境有问题?"

这种情况的发生就在于本地环境的不一致(也既我们常说的异构),我们在开发环境中调试往往不能保证其它环境的问题,但却要为此买单,有了容器之后,各个环节采用统一标准(环境),这种情况将很少发生。

我们可以通过容器技术将开发环境和测试环境以及生产环境保持版本和依赖上的统一,保证我们的代码在一个高度统一的标准上执行,而测试环境的同意,也同样能解决CI(持续集成)流程对环境的要求。

在分布式技术和扩容需求日益增长的今天,如果运维能够通过容器技术来进行环境的统一部署,不仅在部署的时间上节省不少,也能把很多人工配置环境过程中产生的失误降到最低。

3.隔离性好

不管是开发还是生产,往往我们一台机器上可能要跑多个服务,而服务各自依赖的配置又不尽相同,假如说两个应用需要使用同一依赖,或者两个应用需要的依赖之间有一些冲突,这个时候就很容易出现问题,所以同一台服务器上不同应用提供的不同服务,最好还是将其隔离起来。

而容器在这一方面就有其天然的优势,每一个容器就是一个隔离的环境,容器内部所提供的服务对环境依赖的要求,容器可以自内部全部提供,这种高内聚的表现可以快速分离有问题的服务,在一些复杂应用系统中能够实现快速拍错和即时处理。

4.快速回滚

容器之前的回滚机制,一般要基于上个版本的应用重新部署,且替换掉目前有问题的版本,在最初的时代,可能是一套完成的从开发到部署的流程,而执行这一套流程往往需要花费很长时间,在基于Git的环境中,可能是回退某个历史提交,然后重新部署,这些跟容器相比,都不够快,而且可能会产生新的问题。

而容器技术天生带有回滚特性,因为每个历史容器或者镜像都会保存,而替换某个容器或者镜像是非常快速和简单的。

5.成本低

这可能是一个最明显和有用的优点了,在容器出现之前,我们往往会因为构筑一个服务,就要提供一台服务器或者一台虚拟机,服务器的购置成本和运维成本都比较高,而虚拟机所占用的资源又相对较高,相比之下,容器就小巧轻便的多,只需要给一个容器内部构建应用所需的依赖就可以了,这也是容器技术发展如此迅速的最主要原因。

6.管理成本低

随着容器技术的不断普及和发展,随之而来的容器管理和编排技术也同样得到发展,诸如Docker Swarm、K8S,Mesos等容器编排工具也在不停的迭代更新,这让容器技术在生产环境中拥有了更大的可能性和更多的发挥空间,随着大环境的发展,docker等容器的使用和学习成本也越来越低,成为更多开发者和企业的选择。

缺点

1.隔离性

Java面试核心知识点笔记

其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

Java中高级面试高频考点整理

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

最后分享Java进阶学习及面试必备的视频教学

蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6

中高级面试高频考点整理**

[外链图片转存中…(img-NefUwJeY-1718873913222)]

[外链图片转存中…(img-y3w0wLEi-1718873913223)]

最后分享Java进阶学习及面试必备的视频教学

[外链图片转存中…(img-0aRhBXSl-1718873913223)]

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个流行的容器化平台,它主要用于软件打包、部署和运行。以下是使用Docker的主要原因: 1. **应用封装**:Docker将应用程序及其依赖项打包到一个轻量级的容器中,确保在不同环境(如开发、测试、生产)中的一致性。 2. **环境隔离**:每个容器都有自己的运行时环境,包括操作系统层,这意味着开发者可以在本地开发环境中构建并运行容器,而不会影响主机系统的其他应用。 3. **资源高效**:Docker利用操作系统级别的隔离,使得容器启动快,资源占用小,提高了资源利用率。 4. **部署便捷**:Docker镜像的复用性使得部署和迁移应用变得简单快捷,减少配置复杂性。 5. **版本管理和生命周期管理**:Docker提供了一致的方式来管理应用的生命周期,从创建镜像到运行容器,再到更新和停止。 6. **可移植性**:Docker容器可以在不同的计算平台(包括云服务提供商、虚拟机、物理服务器)上运行,提高了应用的部署灵活性。 7. **持续集成/持续部署(CI/CD)**:Docker是自动化部署流水线的重要组件,有助于快速迭代和交付。 Docker的应用范围广泛,包括但不限于: - **Web应用**:前端、后端、API服务等都可以容器化部署。 - **微服务架构**:将服务拆分成独立的容器,方便协作和扩展。 - **DevOps**:加速开发者的本地开发和测试环境的搭建。 - **云计算**:在AWS、Google Cloud、Azure等云平台上,Docker容器编排工具(如Kubernetes)的基础。 - **大数据和机器学习**:Hadoop、Spark和TensorFlow等可以通过Docker部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值