适合Docker的场景以及不适合的场景

news2024/11/16 15:50:04

文章来自:When to use and when not to use Docker和7 Cases When You Should Not Use Docker,以及互联网网上的一些零散内容。这篇文章只是基于我自己的理解,进行简单的概述。

适合的场景

  1. 你的团队不是一成不变的。
    当有新的成员加入,在他们开始编码之前,他们必须为项目设置本地开发环境,例如据库或其它第三方工具。这可能会花很多时间,比如我之前在做CRM系统时,本地要安装Oracle,Siebel,SVN等等这些东西,一个一个安起来非常麻烦,各种问题,安了两天才成功完成。而如果有了Docker,利用Docker Compose,通过编写docker-compose.yml一键就可以把它们全部安装,包括设定谁前谁后,环境变量等,如下图是安装ELK(ElasticSearch,Logstash,Kibana,做日志的东西;根据我的经验,你一个一个安会很痛苦的,安装时出了问题也不好找)的docker-compose.yml文件。
    而且团队越大,团队成员的变动就越多,Docker可以大大减少在安装上浪费的时间。

    version: '3.2'
    
    services:
        elasticsearch:
            image: elasticsearch:7.17.4
            volumes:
                - /etc/localtime:/etc/localtime
                - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
                - ./es/data:/usr/share/elasticsearch/data #数据文件挂载
            ports:
                - '9200:9200'
                - '9300:9300'
            container_name: elasticsearch
            restart: always
            environment:
                - 'cluster.name=elasticsearch' #设置集群名称为elasticsearch
                - 'discovery.type=single-node' #以单一节点模式启动
                - 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m' #设置使用jvm内存大小
            networks:
                - elk
        logstash:
            image: logstash:7.17.4
            container_name: logstash
            restart: always
            volumes:
                - /etc/localtime:/etc/localtime
                - './logstash/pipelines.yml:/usr/share/logstash/config/pipelines.yml'
                - './logstash/logstash-audit.conf:/usr/share/logstash/pipeline/logstash-audit.conf'
                - './logstash/logstash-user-action.conf:/usr/share/logstash/pipeline/logstash-user-action.conf'
            ports:
                - '5044:5044'
                - '50000:50000/tcp'
                - '50000:50000/udp'
                - '9600:9600'
            environment:
                LS_JAVA_OPTS: -Xms1024m -Xmx1024m
                TZ: Asia/Shanghai
                MONITORING_ENABLED: false
            links:
                - elasticsearch:es #可以用es这个域名访问elasticsearch服务
            networks:
                - elk
            depends_on:
                - elasticsearch
        kibana:
            image: kibana:7.17.4
            container_name: kibana
            restart: always
            volumes:
                - /etc/localtime:/etc/localtime
                - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
            ports:
                - '5601:5601'
            links:
                - elasticsearch:es #可以用es这个域名访问elasticsearch服务
            environment:
                - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址
                - 'elasticsearch.hosts=http://es:9200' #设置访问elasticsearch的地址
                - I18N_LOCALE=zh-CN
            networks:
                - elk
            depends_on:
                - elasticsearch
    networks:
        elk:
            name: elk
            driver:
                bridge
    
  2. 你的软件运行在不同的环境中
    我们平时开发人员是在开发环境中进行开发,当编写好、测试好代码后,要提交到生产环境。因为你的开发环境不可能和生产环境一模一样,所以可能会遇到一些无法预料的问题。而Docker一个个Container具有很好的隔离性,会大大降低外界环境的影响。而且也利用Docker的可移植性,也就是说比如你从一台服务器移动到另一台服务器,只要安装好相同的镜像,运行启动即可使用。
    在这里插入图片描述
    这里要额外说明一下,进入Docker官网后,这里安装的是Docker Desktop,也就是一个桌面应用,可以可视化一些操作内容。而它不同的版本Apple、Windows,安装后Docker的内部其实还是Linux,并不是Apple、Windows的系统。因为Docker本身就是基于Linux的,在非Linux上安装,本质上是利用Windos或Apple的一些特性,安装了Linux虚拟机。
    在这里插入图片描述

  3. 你的软件由许多部分组成
    这点依然用到了第一点提到的Docker Compose。随着软件的成长,组件越来越多,越来越不好管理,通过Docker Compose可以解决这个问题,一个docker-compose.yml文件。就可以管理好个个组件的关系。

  4. 你希望你的软件是可扩展的
    Docker本身并不支持动态扩容,但是它可以很方便的进行横向扩展,也就是在run一个images。之后再通过负载均衡从而达到扩展的目的。

不适合的场景

  1. 桌面应用
    Docker本身是可以运行GUI(图形用户界面)的,但是Docker 的设计初衷是为了在不同的环境中运行应用程序,而桌面应用程序通常需要与操作系统进行交互,比如要访问本地文件系统、音频系统等其他资源,由于Docker容器本身是隔离的,这些功能在 Docker 中可能无法直接实现,因此需要额外的工作来解决这些问题。

  2. 你的软件规模比较小
    Docker本身并不是开箱即用的,会涉及很多内容,命令、文件挂在、日志输出等等,比如说如果你的软件只涉及一个服务器,那完全没有必要使用Docker。

  3. 你想加快你应用的速度
    在大多数情况下,Docker 的性能开销对你来说是不可见的,因为Docker仅仅是基于Linux的LXC虚拟技术,利用它的namespace(隔离开),cgroup(限制住自己)技术,也就说仅仅是做了分离,而不是像虚拟机那样,又重新造一个系统。但可能一定程度上会受到影响,因为使用Docker会在应用和操作系统之间又多了“一层”。如果你的目标是提高应用程序的速度,Docker本身是无能为力的。

  4. 你非常注重安全
    对于安全并不是太懂,简单来讲Docker是基于Linux的namespace进行隔离的,隔离性是远不如虚拟机的,比如时间就隔离不了,容器一更改时间,主机也会改。而且对于Docker,所有容器都是可以访问主机内核的,可能会造成风险。而传统的虚拟机同样地很多操作都需要通过内核处理,但这只是虚拟机的内核,并非宿主主机内核,因此万一出现问题时,最多只影响到虚拟系统本身。

总结

Docker的好处:

  • 利用其可移植性,镜像提供了除内核外完整的运行环境,确保了应用运行环境的一致性,可以方便的在不同环境中进行安装运行;
  • 利用其隔离性,可以不用像虚拟机一样,占用过多资源,而且也比虚拟机启动更快;让自己的运行环境不受外部干扰,让资源不会容易受到其他用户的影响(与可移植性类似);
  • 可以方便的进行不同组件的管理,以及快速搭建系统的整体的环境;
  • 可以方便的对服务进行横向扩展
  • 利用以上特性,更加适合云原生的发展,实现像是持续集成和部署。

Docker的坏处:

  • 由于隔离的限制,不适合桌面应用的安装;
  • 软件规模较小时,没有必要使用,会大大增加复杂度;
  • 无法提高应用的性能;
  • 一定程度上可能会影响安全,因为它并不像虚拟机隔离的彻底

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

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

相关文章

写作技巧:如何让你的文章充满生命力?

在写作中,让文章充满生命力是很重要的一点。如果一篇文章缺乏生命力,那么读者很难被吸引,也很难从中获得任何收获。那么,如何让你的文章充满生命力呢? 以下是几个建议: 1.真实感情:写作的时候要…

Django_视图中的request对象详解(八)

目录 Request 属性 方法 QueryDict 源码等资料获取方法 Request 当URLconf文件匹配到用户输入的路径后,会调用对应的view函数,并创建一个包含请求元数据的 HttpRequest 对象 传入该函数的第一个参数,常用request表示。 HttpRequest实…

为什么要学习使用C++软件常用分析工具?学会这些工具都有哪些好处?

目录 1、为什么要学习使用C软件常用分析工具? 2、C常用分析工具有哪些?都能处理哪些具体的问题? 2.1、SPY 2.2、Dependency Walker 2.3、GDIView 2.4、Process Explorer 2.5、Process Monitor 2.6、调试器Windbg 2.7、反汇编工具IDA…

Android 13 startActivity报错ActivityNotFoundException

最近遇到一个问题,就是在google pixel 4(android 13)的手机上startactivity的时候报错activity找不到,其他非13的是好的,这里对问题进行记录: 查阅google官方的文档,有这么一段话, …

前端mock数据的几种方式

前端mock数据的几种方式 前端在开发具体需求前,后端往往只提供接口文档,对于前端来说,最简单的方式就是把想要的数据写死在代码里进行开发,但这样的坏处就是和后端联调前还需要再把写死的数据从代码里删除,最好的方式…

开发中易犯错的事务问题

1.不指定rollbackFor 使用spring的声明式事务(即Transactional注解)时,如果不指定rollbackFor,那么当程序发生Error时,事务将不会回滚!!!显然这将导致数据不一致! 如下述…

spring8-getBean()方法使用

;:getBean使用,要传数据,一个是字符串, 就是文件里的UserService 而这里的UserService就是我们配置文件的id:,第一个API 第二个API可以传入一个字节码类型。 如果某一个容器存在多个&#xff…

windows系统如何部署nacos

1.安装nacos 去nacos github下载nacos最新稳定版本,我用的是nacos-server-2.2.3.zip,下载后解压 2.创建数据库 启动mysql,创建数据库nacos,数据库名字是从conf/application.properties文件获得的 把db这三行取消注释&#xff…

【Hello mysql】 mysql的约束

Mysql专栏:Mysql 本篇博客简介:介绍mysql的约束 mysql的约束 表的约束空属性默认值列描述zerofill主键自增长唯一键外键总结 表的约束 为什么要有约束? 我们在收集一些数据的时候会要求该数据必须存在 比如说像是国家在登记公民信息的时候身…

实验二 常用网络命令

实验目的 了解常用网络命令及其使用方法。通过网络命令了解网络状态,并利用网络命令对网络进行简单的操作。 实验原理 1. 通过 ping 命令检测网络故障 (1)命令格式: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v T…

conic-gradient

The conic-gradient() CSS function creates an image consisting of a gradient with color transitions rotated around a center point conic-gradient方法创建了一个由围绕中心点旋转渐变组成的图片 background: conic-gradient( red 6deg, orange 6deg 18deg, yellow…

位图|布隆过滤器模拟实现|STL源码剖析系列|手撕STL

今天博主给大家带来位图和布隆过滤器的模拟实现。 前言 那么这里博主先安利一下一些干货满满的专栏啦! 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结,每一篇…

并发编程 - 利用Event Bus模式实现目录文件变化捕捉

文章目录 Pre需求CodeDirectoryTargetMonitorFileChangeEventFileChangeListener测试 Pre 并发编程 - Event Bus 设计模式 需求 JDK自1.7版本后提供了WatchService类,该类可以基于事件通知的方式监控文件或者目录的任何变化,文件的改变相当于每一个事件…

Java继承和多态

文章目录 继承继承概念继承的语法 super关键字super和this继承方式多态多态的概念多态实现条件 重写重写和重载的区别 继承 Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,事物之间可能会…

Linux 内核级通用内存池 —— kmalloc 体系

目录 kmalloc 内存池中都有哪些尺寸的内存块 kmalloc 内存池如何选取合适尺寸的内存块 kmalloc 内存池的整体架构 KMALLOC_RECLAIM 表示需要分配可以被回收的内存,RECLAIM 类型的内存页,不能移动,但是可以直接回收,比如文件缓存页…

【Linux】第一个Linux小程序——进度条

今天为大家带来一篇关于在Linux上编写的进度条小程序的博客。 正文 我们在日常生活中使用电子产品时,经常会遇到加载的过程,这时候这些加载界面总是会附带有一些进度条,这些进度条是加载进度的可视化图形,这篇文章我们就在Linux系…

基于云原生网关的全链路灰度实践

作者: 倪海峰(海迩) 前言 随着企业规模的不断扩大,传统单体应用已很难进一步支持业务的发展,业务的迭代速度已经难以满足业务的增长,此时企业会对应用系统做微服务化的改造,降低业务的耦合度&…

keepalived脑裂

keepalived脑裂及解决方法? 一.keepalived的脑裂是如何产生的?二、HAProxy1.HAProxy概念2.HAProxy主要特性3.HAProxy负载均衡策略 4.LVS nginx HAProxy的区别5.编译部署HAProxy 一.keepalived的脑裂是如何产生的? 脑裂:指在一个高…

Elasticsearch【优化、案例】(八)-全面详解(学习总结---从入门到深化)

目录 Elasticsearch集群_测试集群状态 Elasticsearch集群_故障应对&水平扩容 Elasticsearch优化_磁盘选择 Elasticsearch优化_分片策略 Elasticsearch优化_内存设置 Elasticsearch案例_需求说明 Elasticsearch案例_ES自动补全 Elasticsearch案例_创建索引 Elastic…

多元分类预测 | Matlab 鲸鱼算法(WOA)优化xgboost的分类预测模型,多特征输入模型,WOA-xgboost分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab 鲸鱼算法(WOA)优化xgboost的分类预测模型,多特征输入模型,WOA-xgboost分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可…