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

这篇具有很好参考价值的文章主要介绍了适合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.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,docker,云原生,团队开发,linux,容器,web
    这里要额外说明一下,进入Docker官网后,这里安装的是Docker Desktop,也就是一个桌面应用,可以可视化一些操作内容。而它不同的版本Apple、Windows,安装后Docker的内部其实还是Linux,并不是Apple、Windows的系统。因为Docker本身就是基于Linux的,在非Linux上安装,本质上是利用Windos或Apple的一些特性,安装了Linux虚拟机。
    适合Docker的场景以及不适合的场景,Docker,docker,云原生,团队开发,linux,容器,web

  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的坏处:文章来源地址https://www.toymoban.com/news/detail-541120.html

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

到了这里,关于适合Docker的场景以及不适合的场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生 | 从零开始学Docker】二、Docker的常用指令学习以及使用

    该篇文章已经被专栏《从零开始学docker》收录 我们应该如何去学习docker的命令,这是一个老生常谈的话题了,作为一个知识类博主,我想告诉各位的是学习的方法真的很重要,学习一个东西,不只是死记硬背,学习命令也一样,所以接下来这个命令是最重要的,没有之一,要

    2023年04月08日
    浏览(40)
  • 【云原生 | 从零开始学Docker】七丶实战提交自己的镜像以及docker网络

    该篇文章已经被专栏《从零开始学docker》收录 为了巩固dockerfile,我们这里来进行真实的实战。 jdk 下载linux.tar.gz tomcat 最新版就行 首先我们要 vim Dockerfile 以此来创建一个叫dockerfile的文件。注:官方指定命名,build自动寻找,不需要-f指定 然后编写以上的脚本内容加入到dock

    2024年02月02日
    浏览(56)
  • docker导入导出镜像、导入导出容器的命令详解以及使用的场景

    这是一对操作,用于处理 Docker 镜像。这个操作会将所有的镜像层以及元数据打包到一个 tar 文件中。然后,你可以使用 docker load 命令将这个 tar 文件导入到任何 Docker 环境中。例如: 这种方式主要用于分享或迁移整个镜像,包括所有版本、标签和历史。 这也是一对操作,用

    2024年02月16日
    浏览(47)
  • Docker和K8s区别,使用场景,具体怎么使用以及详细命令

    Docker 和 Kubernetes(简称 K8s) 都是容器技术领域中非常重要的工具,但它们在构建、部署和管理容器化应用程序方面发挥着不同的作用。本文将详细介绍 Docker 和 Kubernetes 的区别、使用场景以及具体的命令使用方法。 Docker 是一种轻量级容器技术,可用于打包、交付和运行应用程

    2024年02月15日
    浏览(40)
  • 【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】

      Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令(Instruction)和操作命令;每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建(也就是你要执行的操作命令)。  dockerfile是纯文本文件;  dockerfile是用来

    2024年01月18日
    浏览(44)
  • 手机运行Docker: 从修改内核到刷入原生Linux

    原文地址: https://yzddmr6.com/posts/android-run-docker/ 最近收拾东西翻出了抽屉里吃灰的小米6。小米6当年可以说是神机一部,最好的835遇到了最好的MIUI9。如今放在抽屉里吃灰实在可惜,想着拿来做点什么让它继续发挥余热。 随后就萌生了一个想法:在手机上跑Docker,这样的话就可

    2024年02月12日
    浏览(36)
  • docker持久化部署vue前端nodejs后端项目-- 01. docker以及docker-compose在window以及linux的安装

    本章节主要来讲述docker desktop 界面版本使用以及docker-compose 的安装和使用 GIT地址:添加链接描述 docker 专栏:点击此处 章节 1 docker以及docker-compose在window以及linux的安装 2 项目对应的docker-compose结构 3 怎么将docker-compose项目部署到服务器上 4 配置服务器JENKINS环境 额外篇 章节

    2024年02月04日
    浏览(50)
  • 【云原生 | Docker】Linux 定时自动化备份Mysql数据到本地 & Windows 最佳实践,确定不来看看?

    🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能硬件(虽然硬件还没开始玩,但一直

    2024年02月02日
    浏览(58)
  • 【Docker容器】Docker安装MySQL镜像详细步骤(适合新手使用)

    前言 自从用了Docker之后,发现装东西是真的香,不用在自己根据下载压缩包一个个的去解压、执行、配置环境等等操作。想要啥直接就用Docker直接即拿即用,灰常的舒服啊。话不多说,正式开干,直接开始安装步骤。以下所有的安装前提是你装了Docker引擎了,不要告诉我连

    2023年04月25日
    浏览(79)
  • 网络安全--linux下Nginx安装以及docker验证标签漏洞

    目录 一、Nginx安装  二、docker验证标签漏洞 1.首先创建 Nginx 的目录并进入: 2.下载 Nginx 的安装包,可以通过 FTP 工具上传离线环境包,也可通过 wget 命令在线获取安装包: 没有 wget 命令的可通过 yum 命令安装: 3.解压 Nginx 的压缩包: 4.下载并安装 Nginx 所需的依赖库和包:

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包