集装箱标准解释@ All Things Open 2022(罗利)

主讲人:Melissa McKay,开发者倡导者和Docker船长@JFrog

2022年12月28日

< 1

标题:集装箱标准解释
摘要:您的项目目前正在进行容器化和云原生部署吗?您是否了解所有容器生态系统组件是如何组合在一起的,以及OCI规范是如何驱动不同的实现的?与Melissa McKay一起参加一个关于OCI映像规范、OCI运行时规范和OCI分发规范是如何产生的会议。了解规范背后的技术细节,以及Docker和容器领域其他相关项目的最新发展。您将清楚地了解Open Container Initiative的目标及其对容器实现的影响,以及如何成为该社区的积极成员。带着您需要的基本知识离开,这些知识将帮助您为自己的项目负责任地选择技术堆栈,并为您的容器部署的未来做好准备。

查找有关All Things Open的更多信息:
网址:https://www.allthingsopen.org/

演讲者

梅丽莎·麦凯

    梅丽莎·麦凯

    Melissa是一名长期从事开发/软件工程师工作的国际演说家,目前是JFrog开发人员关系团队的开发人员倡导者,致力于用DevOps方法改善开发人员的体验。作为一名软件工程师,她的背景和经验涵盖了企业产品和服务开发和运营中使用的大量语言、技术和工具。hth华体会最新官方网站她是一位母亲,Java拥护者,Docker船长,即将出版的《DevOps Tools for Java Developers》一书的合著者,UNconferences的忠实粉丝,并且总是在寻找成长和学习的方法。她曾在Kubecon, DockerCon, CodeOne, JFokus, Java Dev Day Mexico, Great International Developer Summit上发表演讲,并且是JCrete和JAlba UNconference团队的一员。鉴于她对教学、分享和激励同行的热情,你可能会在会议上与她相遇——无论是在线的还是离线的!

    视频记录

    所以我很高兴今天能亲自来到罗利,这是我第一次来罗利,很高兴见到大家
    你们中有多少人是本地人啊,太棒了,太棒了,看看这就是为什么我们
    我喜欢面对面的会议,因为我们在这里有很多当地的观众
    嗯,在过去的几年里,我在职业生涯中取得了很大的进步,我成为了Java冠军,这非常令人兴奋
    Java是我的主要后台Java服务器端编码,但我很少遇到Java开发人员
    它现在不做其他的事情,现在是一个要求,特别是在云原生环境中,学习所有这些
    所有这些其他的技能和工具我成为了Docker船长这就是我们今天要讲的内容
    Docker只是因为它是大家最熟悉的,但是当我谈到Docker时,请理解这一点
    当我在谈论公司与Docker容器或Docker映像时,我会明确说明
    否则我会在讨论oci图像时解释它
    这不是Docker的形象我和几个同事聚在一起
    写了一本书,这是几年前给Java开发者的开发工具
    我来自这样一个世界,作为一名开发人员,我戴着耳机躲在角落里
    做我自己的事,把我的作品扔出去,我必须学习
    一个真正的开发团队需要一些不同的技能,这并不一定意味着
    开发人员需要了解一切,这意味着你需要非常善于沟通,因为每个人都在一起
    这条链上的管道需要了解发生了什么以及为什么
    这是一本很酷的书,我今天要分享的很多内容都包含在关于容器的章节中,我
    所以如果你有兴趣知道更多或得到更多的细节在这里你去
    好的,今天我们将讨论容器,但更具体地说,是容器背后的业务
    为什么是香蕉,因为我绝对拒绝吃香蕉
    用集装箱做的演示我已经看腻了,所以我们今天要以香蕉为主题
    我希望你们喜欢,我们很高兴能找到与我所讲内容相关的图片
    接下来我要介绍的是Docker和容器
    这个项目是由第三方承包商开发的,当时大家都同意这个项目需要来
    在公司内部,我们组建了一个团队来维护它,增加更多的功能,修复bug等等
    在这种情况下,这并不是我的团队当时做出的决定,而是交给了我们
    我们需要弄清楚,所以我做的第一件事就是
    你知道,要增加代码库,我们要查看所有的docker
    在自述文件中的命令,这样我就可以启动并运行这些东西,你知道它是如何工作的
    我可以在这个基线上得到我的开发环境,我总是对学习新的东西很感兴趣
    所以我你知道Docker是怎么回事
    你知道这段代码已经写好了,而且功能很好,所以对我来说最好的事情就是深入研究,把它弄清楚
    马上启动并运行我有问题
    在这里,你知道,我不知道我在处理什么,我找到了一个Docker文件,开始看,试图
    理解所有的指令所有在幕后发生的事情但最终我真正想要的是
    我所理解的是什么是容器什么是图像,我如何运行
    我该如何启动它我该如何改变它所有这些问题都出现了
    首先,当你在处理一项新技术时,循序渐进是很好的
    回顾一下它的由来了解一下它背后的历史这可以帮助你做决定
    随着你正在使用的技术的发展,你甚至可能会认为这不是正确的使用方式
    技术也许我们需要看看其他的东西,所以如果你想做同样的事情
    如果您正在考虑将应用程序包装在容器中并使用云原生,请花点时间考虑一下
    你想要解决的项目的具体问题
    很多人现在都在用容器有多少人在用
    现在生产中的容器是一样的,所以有几个
    几年前,当我问这个问题时,有几个人说,是的,我使用容器,但当我问生产
    没有人捉蟋蟀,因为大家都害怕它们,但现在我们看到了你
    知道越来越流行,它是一种标准的工具集,每个人都需要了解和学习如何去做
    特别是开发人员了解docker文件是如何工作的如何构建这些东西如何修改它们
    让我们看一下这个列表这是你知道的一些问题,你可能会遇到一些原因
    您的团队可能会在第一次真正使用Java时就决定使用容器
    11.你知道Java 8是在
    Java 17最新的LTS版本于2019年9月发布
    2021年,我将选择Java因为我的背景,这适用于
    你当然会任何语言,但我知道有一些项目因为各种原因被Java 8卡住了
    我理解合理的理由,但我也知道作为一个
    我用Java 11开发了一些东西。我尝试将其部署到一个prod机器上
    而且它只安装了Java 8,这真的很烦人,所以这是一个很好的原因
    容器,你知道,让我们更容易,其次,我的工作站是一台MacBook
    我在这里用MacBook看看有多少是用Windows的
    很好,所以在我职业生涯的前半段,我是在一台Windows电脑上开始的
    新工作真的很兴奋,他们给了我一台电脑,是一台Macbook,我吓坏了,我必须走了
    在家看所有的视频,什么键按,哪里真的很烦人
    这对我来说很难,这是在我职业生涯的后期,我有我所有的快捷方式,你知道,我已经习惯了如何使用Windows
    我一直在用Mac电脑我不知道我还会不会回去看看吧
    嗯,我现在和将来都对Windows机器上的WSL特性很感兴趣
    有一次我真的偷了我儿子的电脑只是为了看看Docker是如何在他的小Ubuntu上运行的
    VM,他有,嗯,有趣的有趣的事情发生在
    Windows世界可能会在我的未来看到一台新机器,我们会看到的,但是不管怎样,发生了一些事情
    我在看一些代码的时候,我在做一些web应用程序的东西
    我做了一些测试,我不知道你们中是否有人因为浏览器大战而受伤,但我知道
    记住,在JavaScript里,如果你在这个浏览器里,就这么做如果你在那个浏览器里,就这么做,我找到了一些
    单元测试如果你在Mac上是这样运行的
    如果您在Windows机器上运行这种方式,我们将部署到Linux机器上,所以它
    这是一个很奇怪的情况有很多问题但是容器能帮我们一点忙吗
    因此,您不必担心所有的排列和版本的操作系统,因为有在那里,你仍然
    不能在Linux机器上运行Windows镜像(您知道Windows容器)
    这不起作用,这是一个很大的问题,这是一个不同的问题,但在大多数情况下,你知道你不必担心
    你用的是哪个Linux发行版第三个有bug
    作为开发人员,您要做的第一件事是能够在开始之前重现问题
    做得好,有时候你会遇到麻烦你正在做这个全新的功能
    您的开发环境都是最新的,您知道在源代码中有最新的代码
    有时候,回到您需要的位置并不容易,特别是如果您已经安装了软件包
    然后你机器上的所有东西都和产品不匹配了
    这是容器在开发环境中非常有价值的另一个原因,因为您可以精确地
    重现应用程序在生产环境中运行的环境,这样查找起来更容易一些
    bug和找到这些bug的解决方案,而不必重新安装所有的机器
    把它放回原来的位置它在我的机器上工作,而且只在我的
    任何做了一年多开发人员的人都有这个问题
    发生在他们身上,由于某种原因,一切都很顺利,但你的
    开发环境比其他所有人都要好不幸的是,你检查了一些东西,事情就坏了
    你必须弄清楚这是什么所以这和第二点有很大的关系你们知道保持一致性
    软件版本和库将使您的生活变得不那么复杂,容器将帮助您
    第五,我们刚刚雇佣了三个新开发人员,每个人
    每当我加入一个新的软件团队,或者有一个新人加入
    我们总是让他们做的第一件事是更新关于如何安装和运行这个东西的文档
    你的机器我们为什么要这么做因为没人在拿到东西后碰它
    安装和工作没有人会回到那个文档和修复它的问题是,当你继续
    为了运行,当你在做你的事情的时候,你有缓存在你的盒子上被填充
    特别是对于容器,你会注意到很多图像缓存,当有人来的时候
    在一个新的系统中,他们的机器总是会有一些不同的东西
    打包一些他们没有的图书馆,而你在过去的六个月里一直有,它只是从来没有
    这是一件很有价值的事情集装箱会帮你解决这个问题
    当开发环境全部启动并运行时它会迫使你跟上你的文档
    很好,我的服务很好
    很流行,所以我要从开发者的世界继续我们来谈谈生产世界为什么
    你会使用容器,你知道大多数情况下你会得到
    一致性和能够将您的应用程序四处发布您可以从扩展中获得很多优势
    我知道我曾经有一个项目我需要把后端和前端分开,因为我们
    前端的扩展需要与后端有很大的不同,我们还需要注意
    2022世界杯阿根廷预选赛赛程我们在云原生环境中使用的资源,嗯,就是这样
    一个非常大的优势是,当负载增加时,可以根据需要发射额外的容器
    特别服务好的,好的,我想我可以略读一下
    快速地通过这个,因为我们在这里讨论了容器有意义的所有用例
    开发环境,嗯,是的
    Linux的windows子系统对我来说是非常诱人的
    容器在Windows盒子测试环境中能够制作
    这些测试环境与生产环境非常相似,在您进行测试时非常有用
    让你了解你的软件,让它向前发展
    发布真正的优势,另一件事
    测试环境,甚至是单元测试之类的
    有人用过测试容器或者有过相关经验吗,非常强大
    非常强大,能够在某个特定的地方启动特定的数据库
    版本,确保它准确地表示将在生产环境中使用的SQL
    我曾经遇到过这样的问题为了让我们的单元测试运行得更快我们会使用内存
    数据库与实际生产中使用的数据库稍有不同,这可能会导致
    如果你不小心就会出问题
    好了,关于使用一项技术的另一件事是注意它在市场上是如何使用的
    人们使用它是否有任何证据表明它正在变得流行
    或者嗯,真正驱使我做出决定的一件事是多少
    社区参与就是能够对用户组提出问题
    并得到答案,以便能够与其他在同一领域苦苦挣扎的人交流
    如果你发现一项你知道的技术,你真的想使用它,但没有其他人使用它,这是非常重要的
    如果你确信你能处理好这个问题,你就可以开始自己的创业了,这就很困难了
    社区是对的,但是当你在一个企业环境中,你需要把东西启动并运行起来,你需要
    你真正需要的支持,你背后的社区支持,让我们看看发生了什么
    在过去的几个月里,我做了一些调查
    多年的帮助,你可能熟悉的软件,那是一个公司
    为Linux提供了非常强大的监视和故障排除工具
    它是基于对用户的分析,报告的一部分包括容器运行时的数据
    目前正在使用,在2017年你可以看到我知道一个
    多达45000个集装箱在使用中,他们甚至没有费心为其中的99个集装箱做一个图表
    当时正在运行Docker,所以他们甚至没有在2018年拆分结果
    是原来的两倍,9万。我是说考虑到我们生活的世界
    这是一个很小的数字,但有83个颜色更深,然后你开始看到一些其他的运行
    时间来到这里,核心操作系统火箭容器,台面
    容器器LXC,所以看起来像其他运行时开始蚕食
    Docker一点,当我在这里说Docker时,我指的是公司,公司的产品
    2019年,看看这次爆炸,200万个集装箱
    和Doc仍然保持相对强劲,但请注意,18%是容器D
    我们会讨论其中的原因低温仍然存在,仍然有一些
    有趣的是,《火箭的消失》是一个悲伤的故事核心
    操作系统被要求在2018年初之前被红色hatch收购
    火箭实际上是被云原生计算基金会接受的
    它看起来很有希望成为docker的容器D的竞争者,它处理的是安全性a
    不管怎样,这个项目有点不同,但是自从获得了核心操作系统之后,这个项目就开始了
    该项目的一部分进入休眠状态,并于2019年年中由CNCF存档
    该项目于2020年2月结束
    很多东西在2020年2月结束了。无论如何,嗯
    这个项目仍然存在,我的意思是你仍然可以去GitHub下载并使用它,但是
    没有维修人员了,好吧,明年
    他们发布了2021年集装箱安全和使用报告
    很难知道我们是否在比较苹果和苹果,考虑到一小部分客户的限定词
    但是200万是一个很大的数字,所以我知道为什么他们会这样做
    我把每个图表的报告都链接在这里,绝对值得一看
    非常有趣的人口统计和数据源信息,很有意义
    他们谈论客户正在运行的其他服务,以及他们正在使用的编排服务
    他们用的是kubernetes,他们用的是swarm还是别的什么,简而言之,我从中得出的结论
    集装箱船的使用量从去年的18艘增加到现在的33艘了吗
    这一趋势肯定会继续,我稍后会解释原因
    好了,最后一个保证三百万集装箱这是我能找到的最新报告
    并没有很大的变化,但是我们再次看到容器的使用率很高,46%仍然是docker
    好了,现在我们来看看市场我们已经了解了我们正在处理的问题
    今天,嗯,现在我想了解一下历史,所有这些东西一开始是从哪里来的
    很明显,市场在不断发展,越来越多的服务和应用程序被打包到容器中
    了解我们是如何走到这一步的以及你可能会用到的工具
    对你的项目的承诺来自于你可以避免一些令人讨厌的陷阱
    它可以帮助你以最有效的方式使用这个工具
    那句名言如果你只有一把锤子所有的东西看起来都像钉子
    非常适用于这里的容器已经被证明是非常有用的
    它们并不打算解决所有的用例
    好了,开始这节历史课,我会尽量快一点,但这里有很多信息,所以请坐回座位上
    今天的计算资源要有限得多2022世界杯阿根廷预选赛赛程
    计算机通常在很长一段时间内专门用于单个用户的单个任务,这显然很漂亮
    效率低下,所以人们开始努力在两种硬件上进行改进
    软件领域想办法在不妨碍彼此的情况下共享资源2022世界杯阿根廷预选赛赛程
    例如,让一个人无意中导致整个系统崩溃
    在1979年开发第七版Unix期间,以根为基础
    于1982年开发并后来添加到伯克利软件发行版。允许的系统命令
    能够更改其子进程的表观根目录,这将导致对进程的有限视图
    文件系统,这是非常有利的,以便为测试不同的发行版提供一个环境
    示例,而不影响系统的其他部分或任何其他用户
    这是一个很好的举动,也是一个提供隔离要求的方向
    但是几年后的2000年,FreeBSD扩展了这个概念
    介绍了较为复杂的监狱命令,实用程序是在监狱中释放的
    免费的BSD 4.0版本及其功能后来在
    在后来的版本中,有助于进一步隔离文件系统用户和网络
    其中包括为每个监狱分配IP地址的能力
    然后在2004年,Solaris容器和区域让我们更进一步
    给出了应用程序完整的文件系统用户或完整的用户进程和文件系统
    空间和对系统硬件的访问,然后谷歌加入了他们的进程
    容器在2006年被重新命名为c组,也就是
    可能你以前听过一个关于容器的词,它的核心是隔离和限制
    一个进程在2008年的资源使用情况c组被合并到
    Linux内核,它与Linux名称空间一起导致了IBM开发Linux容器或lxc
    现在事情变得非常有趣了这是2013年Docker开源的时候同年谷歌
    如果有人听说过,我来介绍一下这个项目
    该项目为应用程序提供了创建和管理自己的子容器的能力
    在这里,我们看到了容器的使用爆炸式增长,特别是在市场上,我们看到了Docker容器
    最初Docker使用LXE作为默认的执行环境
    但在2014年,Docker选择用一个名为lib容器的库来替换它
    这是一个用go编写的本地解决方案,我认为这是一个有趣的琐事注意到你知道很多
    Doc的较低层次的部分都写好了,很快就会被删除
    项目停止了积极的开发,他们打算联合起来并迁移那些核心概念
    Docker的lib容器和很多其他的东西我们不会详细讲
    这是专门为Java用户设计的,我觉得很有趣,因为我做了很多尝试
    容器化存在于java的早期版本中,java 7于2011年7月发布。
    java 8于2014年3月发布。你可以看到,随着发展
    与此同时,旧版本的Java没有在容器中运行,这不足为奇
    完全了解集装箱,但这对我来说是个惊喜
    如果不知道这一点,并且包装Java 8应用程序,您将开始遭受内存不足的困扰
    活动的原因是因为JVM使用的机制
    确定可用的资源,它们实际上来2022世界杯阿根廷预选赛赛程自主机和
    而不是你期望的C组限制,所以这就是为什么你需要升级到java的新版本的原因
    如果你打算使用容器特别是如果你要在一个容器上使用多个容器
    在以后的Java 8更新中可能的主机
    有一些你知道的东西被引入到后来的Java 8版本中,但是推荐使用Java
    为了从容器的大部分特性中获益,至少需要11
    那里有
    在2015年6月,这是一个非常具体的事件
    当开放容器倡议被建立的时候也被称为oci这个
    非常重要的事件,了解它可以让你深入了解变化背后的活动和动机
    特别是在6月22日,当他们宣布
    他们创立这个组织就是为了
    在Linux基金会的领导下,它的目标是为容器运行时和映像规范创建开放标准
    Docker对此做出了巨大的贡献在他们的早期和他们宣布的
    但是这个新组织指出有20多个组织参与其中
    集装箱化现在已经发展到这样一个程度,这个数字
    他们想要合作的组织为了所有人的利益想出一些共同的基础
    不应该是一个孤立的小公司来决定这一切应该怎么做
    为每个人工作,为了成功,你需要所有的
    所有这些不同渠道的输入,你知道很多项目都是创建和发展的
    在一个特定的工程问题上,这种情况经常发生,当我们
    看看任何一个领域,比如cncf组织或CDF
    组织很多都是在孤立的环境中成长的你真正需要的是
    让越来越多的人参与进来了解问题的根源并提出原因
    不适合他们或者他们需要什么才能使用那个项目
    让每个人都参与进来是非常重要的这个特殊的组织所做的
    对我们来说,他们在2015年建立了一些东西
    他们发布了他们的运行时间规范,他们的图像规范,他们的发行版
    Docker与这些规范有很大的关系,我会再多说一点
    7月17日是当运行时和图像
    Spec实际上是发布的,注意它花了多长时间才达成协议
    这不是一个简单的过程2021年5月4日,他们进行了分销
    Spec也发布了版本1
    oci建立一个月后,这是云原生计算的时候
    基金会或者cncf成立了cncf做了很多事情
    在这个保护伞下孵化或毕业的项目但有一些活动发生了
    这是我们在使用容器时需要知道的
    随着容器生态系统的发展
    在kubernetes等快速开发业务流程中也有业务流程
    承担了在部署中协调配置和管理容器的责任
    环境你们中在生产环境中使用容器的有多少人在使用
    容器或kubernetes来编排它们,看看有多少人在使用其他东西
    我能问一下你在用什么吗Nomad,好吗
    很酷,好的
    如果有人在用Swarm cool,我很好奇
    因此,kubernetes 1.0版本在CNCF宣布的同时发布
    我的意思是这是kubernetes由Google贡献的驱动力这是第一个项目
    在CNCF有人知道kubernetes的最新版本是什么吗
    是1.25 .3,他们有补丁版本了
    如果你看看他们的发布历史,你会发现一开始是分散的,但是
    现在,在第一次发布之后,它变得越来越有规律
    尽管1.5版已经发布,并且包含了容器运行时接口
    还有一个词,运行时间,所以这到底是什么
    这一点很重要,要理解CRI是一个层次的提取
    抽象允许kubernetes支持备选的低级容器
    所以Docker是公司的成员
    在CNCF中,他们甚至在那时就已经在拆分他们庞大的
    被称为Docker的技术栈他们贡献了很多东西
    贡献了他们的CRI兼容运行时称为容器d
    运行时是为了集成较低层次的运行C而开发的
    Docker 1.11版本的运行时版本,所以这已经存在很长时间了
    没有什么新东西,记得我们在看市场营销的时候
    关于运行时的变化,我们看到容器D开始蚕食Docker,这就是为什么
    这是有道理的,这就是为什么我们看到容器D在运行时取代了旧的成熟的Docker堆栈
    世界,好了,历史说得够多了
    让我们来看看解剖学我的希望是通过了解万物的起源
    你不会被所有这些困住你知道项目名称和规格名称
    但是,有时人们还是会混淆一些术语
    实际上,它归结为不理解docker产品作为一个整体实际上是什么,而不是通用的
    容器或通用图像,我们稍微讲一下这个
    开发人员在处理容器和图像时需要很多东西
    在我继续讲之前大家都明白
    容器和映像之间的区别有时我将它们互换使用
    是的,这里没问题吧,docker堆栈完成了所有这些,哦,我们
    在这里失去了我们的流
    它会回来吗?我希望会
    我们回来了,码头工作人员做了所有这些事情来定义一个集装箱建筑a的图像
    在您的机器上管理这些容器映像,分发和共享这些容器映像
    其他人创建了一个容器环境让它准备好启动并实际运行和管理生命
    容器在需要时关闭它的周期,必要时重新启动它
    请注意,当你听到我们在营销材料中讨论的容器运行时间时
    之前所讨论的图像格式只是一小部分
    这整个包裹,这就是原因
    Docker一开始就在市场上睡了一觉因为他们提供他们让它变得容易他们让它变得容易创造
    开发这些映像,在您熟悉的本地开发环境中启动这些容器
    当你让它变得简单时,人们想要使用它,这是很好的,而这正是所发生的
    这可以更多地讨论一下容器的运行时间我们需要在这里多花点时间
    正如我之前展示的,整个Docker库存包含的不仅仅是
    运行时是负责启动和运行容器的部分Docker做了很多
    在过去的几年里,他们重新组织了他们的代码库,他们开发了很多抽象的分离
    这些努力的结果之一就是一个叫做run C的项目,它被贡献给了oci
    这是第一次,也是一段时间内唯一一次实现
    低级容器运行时实现了oci运行时规范
    发布了很多关于这个的讨论为什么是这样为什么我们只有
    一个实现,还有一些其他的运行时
    这是一个非常活跃的空间,所以有一个oci维护的列表
    兼容的运行时,所以要注意,如果你看到任何其他弹出,但值得注意的低低运行时
    项目包括我和我很抱歉没去看
    或者问它是C运行还是cron它是用C写的,所以我很想
    叫它C run,但这是一个实现
    C,它是由红帽公司领导的,然后我发现了一节火车车厢
    我觉得由Oracle领导的这个项目很有趣,但是这个项目现在已经归档了,所以我
    不太确定发生了什么,为什么停止了规范的开发
    在oci运行时规范上的挑战和协作并没有减少
    当然,这很有挑战性,我们甚至花了一段时间才发布了一个版本,弄清楚界限在哪里
    难道不应该在第一版发布之前花费相当多的时间将其包含在规范中吗
    但很明显,只要实现最小的oci
    运行时规范不足以推动采用,尤其是在我们中间的开发人员
    我们需要开发者关心的额外功能
    除了创建和运行容器的最低限度之外,我们还需要所有其他的东西
    需要分销我们需要生命周期管理我们需要所有这些东西所以这导致
    我们到更高级别的运行时它们在某些情况下有一点重叠这就是你得到运行时的地方
    容器D和冷冻你们可能听说过这些运行时包含解决方案
    许多其他问题不仅仅是启动和运行容器,它们还包括一些镜像解决方案
    管理和分布,但这两个运行时实际上都实现了
    CRI,它简化了kubernetes部署的路径,并且都委托了它们的低级别
    活动到oci兼容的低级运行时,如运行C
    这就是为什么它仍然活跃在我们的生态系统中
    kubernetes弃用了docker运行时
    当这个消息出来的时候,大家都很恐慌,你们知道,哦,码头工人不去了
    消除了很多误解这实际上是什么意思这实际上是件好事
    发生了,我链接到一个非常好的博客,它详细解释了心态中到底发生了什么
    为什么会发生这种情况,但简而言之,docker运行时支持的弃用不会以任何方式塑造或
    形式意味着Docker作为公司将走向任何地方或失去支持
    不管怎样,你仍然可以使用Docker的东西来开发
    像现在一样生成Docker映像和容器对您的服务器没有影响
    开发环境,但来自版本
    以后你必须使用其中一个
    在kubernetes环境中支持的运行时,如containerd或cryo
    为了运行这些图像
    所以请记住,这一举动背后的原因只是为了
    消除一些非常特定的代码
    运行Docker容器使用那个运行时和使用你知道的
    每个人都协作的兼容oci的运行时
    好东西,最后一点信息
    在Docker的项目中你可能听说过Moby如果你参与其中你就会知道容器
    它基本上是一个开源项目,由Docker创建,以帮助加速一切
    在这个容器化的世界里,它提供了一整套工具包组件
    你可能需要一些零碎的东西来生产你自己的产品
    Docker就是这么做的,他们收集了一堆东西,把它们包在一个盒子里
    一个产品来销售一个企业产品,这就是你经常看到的
    Docker中涉及的代码实际上是开源的,只是打包了
    很好地使人们易于使用
    好吧,你们中有谁我会很快地讲一遍我们时间不多了
    你们有没有人在自己的系统上放一个容器或者运行一个容器,然后进入系统
    深入了解它是如何存储在你的机器上的是的,只有几个
    我不知道我是不是有一天觉得无聊了,不过有时候
    我只想知道,我想知道发生了什么,我想知道实际安装了什么,放在哪里,它是如何运行的
    它将帮助你理解Docker缓存是如何工作的
    图层是有用的,所以要真正理解它,这是一个很大的
    区别首先,名称空间很重要,这就是
    用于在容器之间提供虚拟分离,这是容器中的进程无法做到的
    干扰其他的,你可以看到一些名称空间在那里被创建,这一切都在运行
    在我本地的Mac上,所以这里有一个警告,看看它的效果很有趣
    其他机器也一样,c组功能本质上限制了容器可以使用多少
    比如CPU内存带宽等等这是一些文件系统的细节
    在你的机器上运行Docker info,它会给你一个Docker根目录,现在在Mac上这个根目录是
    实际上是在一个很小的VM中运行的,所以你需要在如何进入那里导航和查看方面有点聪明
    看看有什么,我在这里放了一个命令,Docker运行交互式的
    特权使用Debian镜像以便进入那里并四处查看使用它是非常可靠的
    这样你就能进入目录了
    看看东西是怎么储存的你会注意到,当你检查的时候
    你会注意到有一个图像ID是用这个图像ID的
    出现在不同的地方有特定的目录
    用来保留只读的层和可以读的层
    写入,然后这些合并在一起,所以这就是你实际运行容器时看到的
    这些绝对值得研究,请注意容器id
    运行容器时,它们实际上与容器子目录名称I相匹配
    我觉得这很有趣如果你停止一个容器你只是手动操作
    这样,相应的目录不会自动消失,直到使用
    docker RM命令,现在很多编排会自动为你处理这个,但是当你只是处理机器上的映像时
    如果你不自己处理,你可能会发现你很快就没有空间了。Docker系统有一个修剪命令
    你可以用它来清理这些东西你也可以用旗子
    您正在启动容器,以确保在完成后不会忘记删除所有内容
    好了,最后是一些链接我在幻灯片上放了很多链接你们可以去看看这些是
    自从我第一次看到Docker文档以来,Docker文档已经有了很大的改进
    它绝对值得一读,里面有很多不同语言的例子不同的组合方式,很好
    社区,我把这个链接放在了社区,当然还有cncf
    还有opencontainers。org如果你真的很好奇想深入研究一下比如我们
    了解了存储的那些层以及如何使用这些散列和如何使用缓存
    在opencontainers.org上有一个链接到他们的GitHub仓库
    你知道Docker映像和oci映像之间的区别
    它真的可以归结为规范中的一个小标志
    非常有趣的东西,好了,这就是我要问的所有问题