【Docker】Docker最近这么火,它到底是什么

这篇具有很好参考价值的文章主要介绍了【Docker】Docker最近这么火,它到底是什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Docker】Docker最近这么火,它到底是什么

前言

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列正在发展中,喜欢Python、Java的朋友们可以关注一下哦!

简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的LinuxWindows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

Docker起源

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
一款开源软件能否在商业上成功,很大程度上依赖三件事 ——成功的 user case(用例), 活跃的社区和一个好故事。 dotCloud 之家的 PaaS 产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下看看docker的故事。

  • 环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。
  • 云计算时代的到来 - AWS的成功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEATAWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。
  • 虚拟化手段的变化 - cloud 时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速
  • LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类imagesnapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。

面对上述几个问题,docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后一个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。

Docker 架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。

Docker特性

在docker的网站上提到了docker的典型场景:

  1. Automating the packaging and deployment of applications(使应用的打包与部署自动化)
  2. Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
  3. Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
  4. Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)

由于其基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境,轻量级的PaaS(如dokku), 构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启停来应对峰谷的web应用)。

  1. 构建标准化的运行环境,现有的方案大多是在一个baseOS上运行一套puppet/chef,或者一个image文件,其缺点是前者需要base OS许多前提条件,后者几乎不可以修改(因为copy on write 的文件格式在运行时rootfs是read only的)。并且后者文件体积大,环境管理和版本控制本身也是一个问题。
  2. PaaS环境是不言而喻的,其设计之初和dotcloud的案例都是将其作为PaaS产品的环境基础
  3. 因为其标准化构建方法(buildfile)和良好的REST API,自动化测试和持续集成/部署能够很好的集成进来
  4. 因为LXC轻量级的特点,其启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,能够在单机环境下与KVM之类的虚拟化方案相比能够更加快速和占用更少资源

Docker局限

Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:

  1. Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
  2. LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
  3. 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
  4. 网络管理相对简单,主要是基于namespace隔离
  5. cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
  6. Docker对disk的管理比较有限
  7. container随着用户进程的停止而销毁,container中的log等用户数据不便收集

Docker组成

【Docker】Docker最近这么火,它到底是什么

  • Docker主机(Host): 一个物理机或虚拟机, 用于运行Docker服务进程和容器, 也成为宿主机, node节点
  • Docker服务器端(Server): Docker守护进程, 运行Docker容器
  • Docker客户端(Client): 客户端使用docker命令或其他工具调用docker API
  • Docker仓库(Registry): 保存镜像的仓库, 官方仓库:hub.docker.com, 可以搭建私有仓库harbor
  • Docker镜像(Images): 镜像可以理解为创建实例使用的模本, 相当于RPM或者DEB包
  • Docker容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务, 相当于RPM包中的程序运行起来

Docker原理

Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以可以从虚拟化到docker要解决的问题出发,看看docker是怎么满足用户虚拟化需求的。

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:

  • 隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法给出的方法是VM, LXC给出的方法是container,更细一点是kernel namespace
  • 可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU, memory可以方便实现, LXC则主要是利用cgroups来控制资源
  • 移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用AUFS实现
  • 安全性 - 这个话题比较大,这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的, 然而对于LXC, 用户的进程是lxc-start进程的子进程, 只是在Kernel的namespace中隔离的, 因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵, dotcloud(主要是)利用kernel grsec patch解决的.

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。文章来源地址https://www.toymoban.com/news/detail-461816.html

到了这里,关于【Docker】Docker最近这么火,它到底是什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 德纳:最近市场热议的Dmail到底是什么?具体是什么样子的产品?

    Dmail 是一种基于 Dfinity 的新型去中心化 NFT 电子邮件基础设施,专为 Web 3.0 时代而设计,迎合人们互联网最新发展带来的新需求。 成为用户之间的关键连接点,为未来共享和交换链上信息奠定基础。Dmail 作为区块链电子邮件服务,是现有电子邮件技术与区块链技术的结合。借

    2024年02月05日
    浏览(55)
  • Redis为什么会这么快?Redis到底有多快?

    官方文档:https://redis.io/docs/management/optimization/benchmarks/ 我们使用redis自带的benchmark脚本测试: 我们发现,每秒可以执行11万多次set、lpush命令。 执行Lua脚本也能达到每秒10万多次,按照这个测试结果,redis的10万qps还是比较准确的,在高性能服务器上性能还能更强。 总结起来主

    2024年02月07日
    浏览(51)
  • 最近怎么流量涨这么多?那我开始讲Hive特性了!

    Hive架构原理 a.用户接口:Client CLI(Hive shell)、JDBC/ODBC(java访问hive)、Hive WEBUI(浏览器访问hive)和Thrift服务器 b.驱动器:Driver 解析器(SQL Parser): 将SQL字符串转换成抽象语法树AST ,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是

    2024年02月03日
    浏览(42)
  • 【云原生】 一文了解Docker到底是什么?

    目录 1.docker是什么? 2.为什么需要docker? 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images(镜像) Containers (容器) Service (服务) 9.docker底层技术 命名空间(namespac

    2024年02月13日
    浏览(47)
  • 现在都在说 Docker 好,为什么我一用就出现这么多问题?查了一宿才解决!

    #配置国内源进行docker安装 报错 HTTP Error 404 - Not Found 原因:由于配置国内镜像源时,把地址写错了,导致后面安装docker提示HTTP Error 404 解决方法: 1)进入到 /etc/yum.repos.d目录下   如果你想学习docker教程,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的docker教

    2024年02月11日
    浏览(46)
  • 最近台风肆虐,让我们用Python获取天气数据,分析一下台风到底要去哪!

    最近台风肆虐,已进入我国24小时警戒线!台风“卡努”到底要去哪儿? 作为一个Python程序员,虽然我帮不上忙,但是时时关注一下还是可以的,顺便祈祷一下台风往东边某个小日子过得不错的小岛吹。 于是我花了一分钟,用Python写了一个获取天气数据的代码,然后进行数据

    2024年02月14日
    浏览(42)
  • CocoaPods 在iOS开发中养活了这么多项目,它到底是个啥?

    对于iOS开发者而言,CocoaPods并不陌生,通过pod相关的命令操作,就可以很方便的将项目中用到的三方依赖库资源集成到项目环境中,大大的提升了开发的效率。CocoaPods作为iOS项目的包管理工具,它在命令行背后做了什么操作?而又是通过什么样的方式将命令指令声明出来供我

    2024年02月08日
    浏览(50)
  • Kafka为什么这么快?

    Kafka 是一个基于发布-订阅模式的消息系统,它可以在多个生产者和消费者之间传递大量的数据。Kafka 的一个显著特点是它的高吞吐率,即每秒可以处理百万级别的消息。那么 Kafka 是如何实现这样高得性能呢?本文将从七个方面来分析 Kafka 的速度优势。 零拷贝技术 仅可追加

    2024年02月11日
    浏览(49)
  • Netty为什么高效,为什么这么受欢迎?

    上篇文章通过 Java NIO 的处理流程与 Netty 的总体流程比较,并结合 Netty 的源码,可以更加清晰地理解Netty。本文将结合源码详细解析Netty的高效和强大功能的设计原理,学习 Netty 是如何实现其卓越的性能和功能特性,也希望可以在日后工作中利用到 Netty 的设计思想。 我们先看

    2024年02月12日
    浏览(70)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包