Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker适合哪些场景

Docker适合哪些场景

作者头像
后场技术
发布于 2020-09-03 13:29:28
发布于 2020-09-03 13:29:28
2.1K0
举报
文章被收录于专栏:后场技术后场技术

空心菜

读完需要

7

分钟

速读仅需 3 分钟

/ Docker 怎么用 /

Docker 不是万能的,我们不能够期盼在 Docker 容器中运行所有的东西。符合 Heroku 公司 12 要素 ( https://12factor.net/zh_cn/ )风格的应用是最容易 Docker 化的,因为他们不维护状态。

推荐看看 12 要素,你会有收获的,官网有中文语言选择,可以看看,有时间后面我摘录分享出来。

在理想的微服务环境中,容器能在几毫秒内启动、停止而不影响集群的健康或应用程序的状态。

类似 ClusterHQ ( https://clusterhq.com/ )这样的创业公司正着手实现 Docker 化数据库和有状态的应用程序,在当下,由于编排和性能方面的原因,可能继续直接在虚拟机或裸机上运行数据库是较好的选择。

对网络吞吐量有高要求的应用进行最佳优化时不要使用 Docker,因为 Docker 使用 iptables 来完成主机 IP 到容器 IP 的 NAT 转换。通过禁用 Docker 的 NAT 来提升网络性能是可行的,但这是一个高级的使用场景,很少有团队会在生产环境中这么做。

docker 官网上说明了docker的典型场景:

  1. 让应用快速打包与容易自动化部署
  2. 创建轻量、私密的 PAAS 环境
  3. 实现自动化测试和持续的集成/部署

根据这些特性,我们可以衡量评估一下,如果你的项目有如下痛点或者需求,那么可以去尝试去使用 Docker

  • 需要频繁的升级,可以充分利用 docker 的镜像版本快速升级回退;
  • 开发,测试,线上的代码运行环境经常变更,每当你查了半天 bug,最后竟然是环境不一致的时候;
  • 销售演示或者 POC 的 demo, 启动后无历史数据,免去清理数据的苦恼,但其实也有,但是便捷;
  • 项目体量过大, 进行了微服务改造, 需要统一管理,docker-compose 可以了解一下;
  • 占用资源过多,可以利用 docker 资源配额和设置启动策略,提升稳定性;
  • 整合开源服务,随着 docker 使用的普及,越来越多的开源项目提供了 docker 镜像部署。

注意:事物都是有两面,并不是所有项目都适合 docker 化改造,而且任何的改动都有可能产生不好的影响,要对技术保持敬畏,需要全方位权衡。

遵循科学流程,《企业级容器云架构开发指南》中给出了一个改造流程,可参考:

  • 评估代价可行性
  • 改造方案
  • 代码修改
  • 制作镜像
  • 单机验证
  • 多机部署

改造之前,软件架构设计看看是否遵循如下原则:

  1. 倾向无状态服务,大部分服务都都需要保持无状态的。除了用于处理当前进行中的请求的临时信息,无状态服务不需要保持任何需要持久化的数据。无状态服务的优势在于可以非常容易地对他们进行销毁、重启、复制及伸缩,所有这一切都无需考虑任何数据处理方面的逻辑。并且,无状态服务更易于编写。
  2. 倾向静态配置。所有宿主机和服务的配置都是静态的:一旦给服务器推送一项配置,该配置就会一直生效,直至显式地推送来新配置。与之相对的是那些动态配置的系统,其系统的实际配置是实时生成的,并会根据不同因素(如可用宿主机和即将到达的负载)进行自主修改。尽管动态系统的伸缩性更好,并且具有一些有趣的属性,如在出现某些故障时自动恢复等,但静态配置更易于理解和排错。
  3. 倾向静态的网络布局。如果在一台宿主机中找到一项服务,除非新配置被确定并提交,否则总能在那台宿主机中找到该服务。
  4. 区别对待无状态和有状态服务。尽管我们希望多数服务是无状态的,但是还是会有 MongoDB 和 ElasticSearch 等数据库类型服务用来持久化数据。这两种类型的服务在本质上是非常不同的,应该区别处理。例如,将一个无状态服务从一台宿主机移动到另一台上非常简单,只需要启动新服务,然后停止旧服务即可。但要对一个数据库进行移动,数据也要跟着移动。移动数据可能会花费很长时间,要求在迁移过程中停止服务,或通过设备方法进行在线迁移。在开发领域,通常将无状态服务比做“牲口”,它们没有名字,很容易被代替和伸缩,而将有状态服务比做“宠物”,它们是唯一的、具名的,需要维护,并且难以伸缩。

以上这些设计原则,将有状态服务与无状态服务分离,可以对本质上完全不同的服务进行区别处理(如图 3-1 所示),因此可以对每一种情况的处理方式进行优化和尽可能地简化。使用静态配置运行无状态服务使得操作系统的流程变得非常简单:多数情况下流程被简化成文件复制和容器重启,完全不需要考虑其他因素,如对第三方系统的依赖。

/ Docker 的优点 /

1

简化配置

虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件, 系统), Docker 在降低额外开销的情况下提供了同样的功能. 它能让你将运行环境和配置放在代码汇总然后部署, 同一个 Docker 的配置可以在不同的环境环境中使用, 这样就降低了硬件要求和应用环境之间耦合度。

2

代码可流水线管理

代码从开发者的机器到最终在生产环境上的部署, 需要经过很多的中间环境(开发-->测试-->beta-->线上). 而每一个中间环境都有自己微小的差别, Docker 给应用提供了一个从开发到上线均一致的环境, 让代码的流水线变得简单不少。

3

提升开发效率

不同环境中, 开发者的共同目标:

  1. 想让开发环境尽量贴近生产环境;
  2. 想快速搭建开发环境。

开发环境的机器通常内存比较小, 之前使用虚拟的时候, 我们经常需要为开发环境的机器加内存, 而现在 Docker 可以轻易的让几十个服务在 Docker 中跑起来。

4

隔离应用

开发时会在一个台机器上运行不同的应用:

  1. 为了降低成本, 进行服务器整合;
  2. 将一个整体式的应用拆分成低耦合的单个服务(微服务架构)。

5

整合服务器

Docker 隔离应用的能力使得 Docker 可以整合多个服务器以降低成本. 由于没有多个操作系统的内存占用, 以及能在多个实例之间共享没有使用的内存, Docker 可以比虚拟机提供更好的服务器整合解决方案。

6

调试能力

Docker 提供了很多的工具, 这些工具不一定只是针对容器, 但是却适用于容器. 他们提供了很多功能, 包括可以为容器设置检查点, 设置版本, 查看两个容器之间的差别, 这些特性可以帮助调试 Bug。

7

多租户环境

多租户环境的应用中, 它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为 IoT(物联网)的应用开发一个快速, 易用的多租户环境. 这种多租户的基本代码非常复杂, 很难处理, 重新规划以应用不但消耗时间, 也浪费金钱.

使用 Docker, 可以为每一个租户的应用层的多个实例创建隔离的环境, 这不仅简单而且成本低廉, 因为 Docker 环境启动的速度快, diff 命令很高效。

8

快速部署

Docker 为进程创建一个容器, 不需要启动一个操作系统, 时间缩短为秒级别。

可以在数据中心创建销毁资源而无须担心重新启动带来的开销。通常数据中心的资源利用率只有 30% , 通过使用 Docker 并进行有效的资源分配可以提高资源的利用率。

/ Docker 的缺点 /

Docker 的安装非常容易.目前,Docker 支持所有的 Linux 系列系统,(Ubuntu,RHEL,Debian 等)。通过 Boot2Docker 虚拟工具 or 安装Docker Desktop, 在 OS X 和 Windows 下也能够正常使用 Docker。

Docker 运行环境的限制:

  • 必须是 64 位机器上运行,目前仅支持 x86_64 和 AMD64,32 系统不支持;
  • 系统的 Linux 内核必须是 3.8 或者更高,内核支持 Device Mapper,AUFS,VFS,btrfs 等存储格式;
  • 内核必须支持 cgroups 和命名空间。

二进制安装参考: https://docs.docker.com/engine/install/binaries/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后场技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
你还在 Docker 中跑 MySQL?恭喜你,好下岗了!
目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库 MySQL 是否需要容器化?
用户8639654
2021/08/24
5640
Docker最全教程——从理论到实战(一)
容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解、心得和实践。
心莱科技雪雁
2018/12/19
5540
Docker最全教程——从理论到实战(一)
浅析Docker的基础和应用场景
1、什么是LXC LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与传统虚拟化技术相比,它的优势在于: 与宿主机使用同一个内核,性能损耗小; 不需要指令级模拟; 不需要即时(Just-in-time)编译; 容器可以在CPU
用户1467662
2018/03/30
8270
浅析Docker的基础和应用场景
八个Docker的真实应用场景
在我们讨论Docker的使用场景之前,先来看看Docker这个工具有什么特别的地方吧。
Java帮帮
2018/12/14
1.3K0
你在 Docker 中跑 MySQL?恭喜你,可以下岗了!
目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以:数据库 MySQL 是否需要容器化?
Leetcode名企之路
2021/12/01
6930
你在 Docker 中跑 MySQL?恭喜你,可以下岗了!
docker学习笔记
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。简言之,docker就是用go开发的一种轻量级虚拟化容器。
程序员同行者
2018/07/24
6000
docker学习笔记
聊一聊容器与Docker
通俗一点的解释:容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境。
叔牙
2020/11/19
7880
聊一聊容器与Docker
基于容器和微服务加快迭代速度实践
摘要 坊间一直有“网易出品,必属精品”的言论流传,网易云音乐、考拉海购、有道云笔记、网易云课堂等都是深受大家喜爱的应用,而这些应用的背后,都少不了网易蜂巢的支撑。目前网易95%以上的应用都已经部署在了
IT大咖说
2018/04/03
1.1K0
基于容器和微服务加快迭代速度实践
Docker的典型应用场景
相对于VM,docker在其轻量、配置复杂度以及资源利用率方面有着明显的优势。 随着docker技术的不断成熟,越来越多的企业开始考虑通过docker来改进自己的IT系统。 本文列举一些docker的实际应用场景,以期能够起到抛砖引玉的作用, 来帮助大家更加方便的使用docker. 应用打包 制作过RPM、GEM等软件包的同学可能很清楚,每一个软件包依赖于哪个库的哪个版本, 往往需要明确的写在依赖列表里。而依赖又往往分为编译时依赖和运行时依赖。 在传统的基础设施环境下,为了保证所生成的软件包在其它机器上可正
小小科
2018/05/03
2.4K0
传统企业PaaS平台功能设计与业务上云思考
伴随着Docker技术的兴起,以及容器集群管理平台Mesos、Kubernetes、Swarm、Rancher等的大行其道,仿佛PaaS平台及其相关技术一下进入了黄金时期,各种各样的技术组合,各种各样的技术验证,以及伴随着容器相关的创业公司布道,仿佛只要有了PaaS平台及其相关的技术,就能解决一切的企业IT问题。但是,企业IT,尤其是非互联网传统企业,PaaS平台的构建与业务上云是一个长期的过程,绝不是一个docker+kubernetes/Mesos/Swarm构建完以后就能完成的,IaaS年代是这样,PaaS年代也是这样。
孙杰
2019/10/29
2.9K0
Docker Vs. 虚拟机
在计算机技术中,虚拟化(Virtualization)是一种资源管理技术。它是将计算机的各种实体资源,如:服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用更好的方式来利用这些资源。
鲁大猿
2024/01/25
3130
Docker Vs. 虚拟机
《Docker极简教程》--Docker容器--Docker容器的概念
Docker容器是一种轻量级、可移植的虚拟化技术,用于打包、运输和运行应用程序及其所有依赖项。它利用Linux内核的特性(如命名空间和控制组)来提供隔离性和资源管理,使得应用程序可以在相对独立的环境中运行,而无需携带整个操作系统。每个Docker容器都是一个独立的、可重复的、可部署的单元,具有自己的文件系统、网络和进程空间,能够快速地启动、停止和迁移。Docker容器使得开发人员能够更轻松地构建、交付和运行应用程序,同时提高了资源利用率和部署的一致性。
喵叔
2024/05/24
5440
Docker容器简介、优缺点与安装
Docker 是一个开源的应用容器引擎, 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器,基于 Go 语言 并遵从 Apache2.0 协议开源,是在 GitHub 上开发的 Moby 开源项目的一部分。
炒香菇的书呆子
2022/04/13
1.4K0
Docker容器简介、优缺点与安装
Docker 入门
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,诞生于2013年初。基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。Docker的主要目标是对应用组件的封装、分发、部署和运行等生命周期管理,达到应用组件的“一次封装、多处运行”。
分母为零
2019/07/04
7100
Docker 入门
Kubernetes在宜信落地实践
伴随着微服务的架构的普及,结合开源的Dubbo和Spring Cloud等微服务框架,宜信内部很多业务线逐渐了从原来的单体架构逐渐转移到微服务架构。应用从有状态到无状态,具体来说将业务状态数据如:会话、用户数据等存储到中间件中服务中。
宜信技术学院
2019/06/28
9080
『中级篇』docker导学(一)
这两年容器技术及其相关工具,平台异常火爆。在各大技术论坛或云计算峰会议题中,都会占很大比重,各主流云计算平台也无一例外地迅速提供了容器服务。 大厂 阿里巴巴 京东 美团 百度 腾讯 浪潮 滴滴 [image.png] [image.png] [image.png] 搜索docker热度 docker关键字的分布 [image.png] [image.png] 『中级篇』docker的重点 『初级篇』目的先学会用。『中级』篇就是为了让你懂,师傅教徒弟,讲给你听,做给你看,自己做做试试。『初级篇』可能留了一些
IT架构圈
2018/05/29
8612
01 . Docker原理部署及常用操作命令
这里面可能有多个镜像文件,镜像本身是只读的,而且镜像在registries放的时候仓库名就是应用程序名,而后仓库内可以放多个镜像,而且这些镜像通常属于同一个应用程序不同版本,我们用标签来识别;
iginkgo18
2020/09/27
6850
Docker 容器技术使用指南
1.1 Docker 的基本概念 1.2 为什么使用 Docker 1.3 Docker 体系结构简介 1.4 Docker 容器技术的应用场景
杰哥的IT之旅
2021/06/01
2.4K0
Docker 容器技术使用指南
docker--docker介绍
在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化 (hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多 台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用 户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用 户空间运行在同一台宿主机上。
eadela
2019/11/22
8880
技术选型之Docker容器引擎
来源 | https://segmentfault.com/a/1190000019462392
程序猿DD
2020/12/08
5630
技术选型之Docker容器引擎
相关推荐
你还在 Docker 中跑 MySQL?恭喜你,好下岗了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档