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

文章来自: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.4volumes:- /etc/localtime:/etc/localtime- ./es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载- ./es/data:/usr/share/elasticsearch/data #数据文件挂载ports:- '9200:9200'- '9300:9300'container_name: elasticsearchrestart: alwaysenvironment:- 'cluster.name=elasticsearch' #设置集群名称为elasticsearch- 'discovery.type=single-node' #以单一节点模式启动- 'ES_JAVA_OPTS=-Xms1024m -Xmx1024m' #设置使用jvm内存大小networks:- elklogstash:image: logstash:7.17.4container_name: logstashrestart: alwaysvolumes:- /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 -Xmx1024mTZ: Asia/ShanghaiMONITORING_ENABLED: falselinks:- elasticsearch:es #可以用es这个域名访问elasticsearch服务networks:- elkdepends_on:- elasticsearchkibana:image: kibana:7.17.4container_name: kibanarestart: alwaysvolumes:- /etc/localtime:/etc/localtime- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.ymlports:- '5601:5601'links:- elasticsearch:es #可以用es这个域名访问elasticsearch服务environment:- ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址- 'elasticsearch.hosts=http://es:9200' #设置访问elasticsearch的地址- I18N_LOCALE=zh-CNnetworks:- elkdepends_on:- elasticsearch
    networks:elk:name: elkdriver: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.hqwc.cn/news/15126.html

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

相关文章

Openlayers实战:回显多点、多线段、多多边形

Openlayers地图中,回显数据是非常重要的。 继上一示例回显点、线、圆形、多边形后。本示例回显多线,多点,多个多边形。用到了MultiPoint,MultiLineString,MultiPolygon。 多个信息的显示可以采用循环的方式,单个显示点、线、面。 但是循环方式是要多次计算的,而MultiPoint…

FreeRTOS ~(六)信号量 ~ (1/3)信号量解决同步缺陷

前情提要 FreeRTOS ~(四)同步互斥与通信 ~ (1/3)同步的缺陷 FreeRTOS ~(五)队列的常规使用 ~ (1/5)队列解决同步缺陷 举例子说明:利用信号量解决前述的"同步的缺陷&…

运动控制介绍

运动控制介绍 1 介绍1.1 概述1.2 运动控制的基本架构1.3 常见的控制功能1.4 运动控制研究的问题分类位置变化问题周期式旋转速度变化问题 1.5 知识体系1.6 路径规划 和 轨迹规划区别与联系1.7 运动控制系统 2 《运动控制系统》[班华 李长友 主编] 摘要1 绪论1.1 运动控制研究的…

【数据仓库】FineBI数据可视化使用体验

FineBI介绍 FineBI是新一代自助式BI工具,企业客户多,服务范围广.凭借finebi简单流畅的操作,强劲的大数据性能和自助式的分析体验。 1,对个人用户来说,免费的无限期试用,解锁所有功能,除了限制两个并发访问,个人用户可以…

CSS 两行文字两端对齐与字符间距的处理

前言 👏CSS 文字对齐与字符间距的处理,在这里,你可以了解到文字渐变,letter-spacing,text-align,text-align-last,filter等,速速来Get吧~ 🥇文末分享源代码。记得点赞关…

42. 会话划分问题

文章目录 题目需求思路一实现一题目来源 题目需求 现有页面浏览记录表(page_view_events)如下,每行数据代表:每个用户的每次页面访问记录。 规定若同一用户的相邻两次访问记录时间间隔小于60s,则认为两次浏览记录属于…

CSS 内容盒子与边框盒子

这篇比较重要,会不断更新❗ 文章目录 👇内容盒子开发者工具的使用border 边框padding 内边距margin 外边距盒子整体尺寸元素默认样式与CSS重置元素分类块级标记行级标记行内块标记 display样式内容溢出裁剪掉溢出部分滚动条 圆角边框 border-radius ✌边…

学无止境·MySQL③

单表查询 题一创建表并插入数据薪水修改为5000将姓名为张三的员工薪水修改为3000元将姓名为李四的员工薪水修改为4000元,gener改为女 题一 1.创建表: 创建员工表employee,字段如下: id(员工编号)&#xff…

Day976.如何安全、快速地接入OAuth 2.0? -OAuth 2.0

如何安全、快速地接入OAuth 2.0? Hi,我是阿昌,今天学习记录的是关于如何安全、快速地接入OAuth 2.0?的内容。 授权服务将 OAuth 2.0 的复杂性都揽在了自己身上,这也是授权服务为什么是 OAuth 2.0 体系的核心的原因之…

c++读取字符串字符时出错

这是我做的一个c爬虫程序但是在抓取网页的时候string类型传递出现了问题 以下是图片代码 url的值是 "http://desk.zol.com.cn/" 我不知道为什么数据传递会出问题 请大佬指教 后面重新启动一遍编译器查一查断点有突然没问题了 ,真是个玄学的问题。我还以…

mysql 大数据量从“.log“文件插入方法

要被插入的数据文件以及内容 表结构 插入成功,插入时如果有主键唯一索引,则按照唯一索引的大小顺序插入,速度会快很多

Linux——内核概念

一、内核 什么是内核? 计算机是由各种外部硬件设备组成的,如内存、cpu、硬盘等。如果每个应用都要和这些硬件对接通信协议,就太麻烦了,所以这个工作就由内核来负责。内核作为软件连接硬件设备的桥梁,使应用开发者只需…