Java容器解包@匹兹堡Java用户组

2022年4月21日

2分钟阅读

细节
关于会议

JFrog是2022年匹兹堡Java用户组的赞助商:https://www.meetup.com/The-Pittsburgh-Java-Meetup-Group/events/285024772/

虚拟化容器技术速成班
容器已经成为应用程序开发生命周期中每个阶段不可或缺的一部分。生产级编排工具(如Kubernetes)已经被构建来管理它们,容器平台(如Docker)在测试和开发中变得越来越普遍。关于如何构建和管理简单Docker映像的Web教程比比皆是!
但是容器到底是什么,为什么它们对DevOps生态系统如此重要?这节课是为那些好奇的人准备的,他们想要深入了解一种技术的机制,这种技术的存在时间比你想象的要长。
- Docker从哪里来?
-容器生态系统中的其他项目呢-有替代方案吗?
Docker映像在文件系统上的实际样子是什么?
Docker镜像层是如何工作的?
-什么是c组?
—如何分配和管理系统资源?2022世界杯阿根廷预选赛赛程
作为Java开发人员,有什么需要注意的问题吗?
-安全方面呢?
-我如何管理我的Docker镜像?

在这次演讲之后,您将对虚拟化容器技术的内容、方式和原因有一个扎实的理解。

关于演讲者

梅丽莎作为一名开发人员和软件工程师的职业生涯跨越了20多年。鉴于她对Java和DevOps的热情,她选择了开发人员倡导的角色,目前是JFrog开发人员关系团队的开发人员倡导者。她的经验涵盖了企业产品和服务开发和运营中使用的一系列技术和工具。hth华体会最新官方网站她是一位母亲、Java拥护者、Docker队长,也是即将出版的《面向Java开发人员的DevOps工具》一书的合著者。她活跃于开发者社区,在Kubecon和DockerCon等众多软件会议上发表过演讲,并且是JCrete和JAlba UNconference团队的一员。

点击此处查看幻灯片

演讲者

梅丽莎·麦凯

    梅丽莎·麦凯

    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团队的一员。鉴于她对教学、分享和激励同行的热情,你可能会在会议上与她相遇——无论是在线的还是离线的!

    视频记录

    nscript

    0:00
    感谢大家的加入,一如既往,我们一直感谢大家的加入和参与
    0:06
    欢迎来到匹兹堡水壶像往常一样你可以在推特上关注我们
    0:11
    这里的每个人都知道这个聚会,但如果你不去那里,但你必须去那里参加
    0:18
    我们有一些公告,首先我们有一个YouTube频道,我们所有2021年的演讲都在那里
    0:26
    我们会随时上传今年所有的演讲所以今天的演讲
    0:32
    你可以在本周末或下周上传它们会一直在那里如果你搜索匹兹堡
    0:38
    这应该是第一个结果,接下来还有两个
    0:43
    我们想要讨论的演讲在5月12日我们会有一个从黎明开始的演讲,然后在6月
    0:50
    来自安娜玛丽亚,我们有一些令人兴奋的消息要分享
    0:56
    我们想要感谢jfrog成为我们的第一个官方赞助商,我们已经等了很长时间了
    1:02
    我们很高兴,谢谢你jfrog
    1:08
    关于这一点我们将把话筒交给梅丽莎我会让你
    1:14
    介绍你自己,因为亲自介绍总是更好,不过请随意分享并开始吧
    1:21
    大家好,非常非常高兴在匹兹堡见到大家
    1:27
    是的,所以做这些虚拟的事情的一个积极的事情是我现在可以去任何地方,我可以见到所有人
    1:32
    在不同的地方认识不同的人,以前没有这么多的机会,所以这真的很酷
    1:39
    不管怎样,我是Melissa McKay,我在jfrog工作,我是一名开发者倡导者
    1:45
    我在那里待了两年了
    1:51
    事实上,我要开始和你们分享我的幻灯片了
    1:56
    然后开始介绍
    2:03
    很好,你们应该能看到我今天要给你们讲的是集装箱速成班
    2:09
    虚拟化容器技术在我深入讨论之前
    2:17
    更多关于我的背景和资料,请见Waller,他是jfrog的聚会经理
    2:23
    他总是喜欢在我们为聚会小组做的任何演讲中戴上这些我们有抽奖,所以如果你
    2:29
    点击这里的链接你不仅可以看到我今天要展示的幻灯片他们还可以
    2:36
    大家都在但是你也可以参加亚马逊回声秀的抽奖现在你很有可能
    2:43
    得到这个,继续输入这个,然后
    2:49
    你会,你会在接下来的三个工作日内收到通知我们会通知你,然后寄过来
    2:55
    还有聚会小组,所以不要错过了,好的,我说过,我是
    3:02
    在此之前,我一直是一名开发人员,从实习生到首席工程师
    3:10
    在从事这一行的20年里,我记得我作为一名
    3:15
    实习生是一个ruby on rails项目,在我职业生涯的最后阶段
    3:22
    Java服务器端应用程序以及很多web应用程序
    3:27
    在演讲快结束的时候,我开始公开演讲
    3:34
    偶然发生的有趣的情况和机会
    3:40
    与此同时,我在一次非会议上遇到了一些很棒的人如果你从来没有过
    3:47
    有机会访问或参加非会议,这是非正式的
    3:52
    会议与正式的会议非常不同,在正式的会议中,演讲者站着,所有的听众都在听
    4:00
    总之,这个特别的会议遇到了一些非常了不起的人,他们真的指导了我
    4:08
    帮助我让你们了解我的职业发展到演讲者和分享
    4:13
    知识和教学这类事情真的很令人兴奋,我决定我需要去做
    4:18
    找一个真正的工作,那是我的工作,这就是jfrog的由来
    4:24
    这就是我成为开发者倡导者的过程,我确实成为了Java的拥护者
    4:29
    去年是两年前,现在时间有点模糊了
    4:35
    两年前,这是一个虚拟会议,我将再次前往j焦点
    4:40
    下个星期的这个时候我就能见到那些捐款者了
    4:46
    对我来说,这个奖项非常令人兴奋,我也成为了一名医生队长,所以我
    4:52
    我对docker很感兴趣他们最近在做什么他们推出了哪些新功能
    4:57
    他们会发布一个他们会宣布发布的东西叫做docker
    5:03
    扩展是一件很有趣的事情,看看它是如何工作的,我也学到了很多
    5:10
    将Java包装在容器中我也会在这个讲座中跟你们谈谈这个过程
    5:16
    这是我的推特账号联系我最好的方式就是我的推特账号所以请随意
    5:22
    我的DMS是开放的如果你有任何问题或者只是想联系我关于这个演讲或任何其他你
    5:28
    (音乐)好的,今天我们要
    5:34
    从简单的历史开始,给你一些背景背景
    5:39
    希望这不会太无聊,但肯定有一些里程碑值得我们去了解
    5:45
    更好地理解图像和容器是如何发展到今天的,以及我们现在是如何使用它们的
    5:51
    我们还会看一下集装箱市场,我发现这很有趣,看看它增长了多少
    5:57
    在过去的几年里,我们将深入了解docker是什么
    6:03
    我是一名码头船长,但是我不知道我会讲很多关于码头的事情,但是我希望你们知道
    6:10
    要知道除了docker之外还有其他的东西我们会稍微讲到
    6:16
    docker不是你可以拥有的容器的同义词
    6:21
    映像和容器不是基于docker的好的,然后我们会详细讨论
    6:26
    容器到底是什么我们来看看它在MAC上是什么样子的吧
    6:33
    然后我们会看我们会复习一些容器的问题最后,但不是
    6:38
    至少我会和你谈谈如何管理你的形象,以及你可能需要考虑的事情
    6:43
    当你开始创建自己的图像时,你知道你需要决定把它们放在哪里
    6:52
    我给你们看这张幻灯片有两个原因我只是想知道你们今天是如何使用容器的对于那些
    6:59
    在座的各位,花点时间说说你们是如何使用容器的,或者你们是如何使用容器的
    7:05
    你可以说不,我们还没到那一步,我们还没这么做,或者你之前没考虑过
    7:11
    使用容器而不是用于生产有很好的理由,也许您只是在本地使用它们
    7:17
    也许您只是在测试环境中使用它们,也许在生产环境中还没有那么多
    7:23
    我很好奇这是怎么回事是的,vernat说她在用它们
    7:31
    本地测试,质量保证和测试环境,这样你就能完成所有的工作
    7:37
    用容器冷却这里列出的前两种
    7:43
    在测试中提供一致的开发环境
    7:49
    在Qa环境中,您仍然可以使用比Qa少得多的资源来衡量应用程序的质量2022世界杯阿根廷预选赛赛程
    7:55
    完全的生产环境,所以他们在这些领域很有帮助
    8:01
    好的,我们帮助了我们有一些哦,我们有一个学生太棒了,我爱学生
    8:07
    最近在一所大学上了一节博士课,那是我女儿的大学,所以我选修了这门课
    8:14
    教孩子们关于docker的知识以及如何构建它们是非常有趣的
    8:22
    是的,你们有很好的未来,vj还有本地测试和生产环境很酷
    8:29
    很高兴知道,好的,让我们开始讨论容器
    8:34
    这不是你们期待的图表我已经讲过几次了,我很喜欢这个,这是一个
    8:40
    在我的最爱中,你不会看到我用集装箱说话,我是
    8:45
    我真的很无聊,所以我试着想出一些其他的主题或想法来解决这个问题,这个你会很兴奋
    8:53
    希望你们喜欢,好吧,我们来谈谈
    9:01
    这一切都是怎么开始的这一切都是在50年代和60年代开始的
    9:08
    在很长一段时间内,在电脑上完成任何事情,你必须共享资源2022世界杯阿根廷预选赛赛程
    9:14
    要做到这一点而不给使用同一台机器的其他人带来问题,难度要大得多
    9:19
    显然,时间和资源的限制造成了一些瓶颈和低效率2022世界杯阿根廷预选赛赛程
    9:26
    我们开始研究,仅仅能够分享是不够的,我们需要一种没有分享的方法
    9:33
    互相妨碍或者让一个人无意中导致整个系统崩溃
    9:40
    这种对更好的策略和共享计算资源的需求实际上已经开始了2022世界杯阿根廷预选赛赛程
    9:45
    这是一条创新之路,我们今天看到了巨大的好处,正在发生的事情真的很有趣
    9:52
    今天,有一些关键的时间点帮助我们走到这里
    9:57
    今天讲的是容器,我们将从charoot(音乐)开始
    10:03
    查鲁特出生于1979年,当时正在开发第七版
    10:08
    它于1982年被添加到BSD(伯克利软件发行版)中
    10:14
    并且能够改变进程及其子进程的根目录这就是true给你的
    10:21
    导致一些隔离,以便为测试提供一个环境
    10:26
    例如,不同的分布事实上,这就是为什么它是一个用于测试的实用工具
    10:33
    不同的发行版可以与机器的其余部分隔离开来
    10:40
    这绝对是个好主意,一个正确方向上的良好开端,但是
    10:45
    在2000年,freebsd引入了更多的监狱命令
    10:52
    Jail比charuet更复杂一点,因为它的附加功能有助于进一步
    10:58
    隔离文件系统用户和网络以及分配IP地址的能力
    11:05
    每个监狱在2004年都很重要
    11:11
    Solaris区域让我们走得更远,它为应用程序提供了完整的用户进程和文件系统空间
    11:18
    对系统硬件和solaris区域的访问也使能够快照文件系统的想法流行起来
    11:29
    2006年,Google推出了他们的进程容器,这些都是后来的事情
    11:34
    您可能听说过重命名的c组,其核心是隔离和限制进程的资源使用
    11:42
    在2008年,c组与Linux命名空间一起被合并到Linux内核中
    11:49
    这导致了ibm开发Linux容器
    11:54
    2013年是一个重要的一年,码头工人带来了他们包装集装箱和移动的能力
    12:01
    他们从一个环境转移到另一个同年谷歌开源了他们的让我为你的项目提供容器
    12:08
    它为应用程序提供了创建和管理自己的子容器的能力
    12:13
    从这里我们看到集装箱和码头的使用激增
    12:20
    2014年,docker选择放弃使用LXC工具集进行启动
    12:26
    容器与lib容器,以便利用原生golang解决方案现在
    12:32
    你可以去github找到libcontainer,你可以看到
    12:38
    里面发生了什么,嗯,这段历史我都快讲完了
    12:44
    这一课对你来说太多了我跳过了你知道一些细节
    12:49
    在这段时间里也出现了很多不同的项目,组织和规范
    12:56
    2015年6月发生了一件事,我真的很想说
    13:01
    了解这个事件很重要,因为它会给你更多的信息
    13:06
    洞察市场变化背后的一些活动和动机
    13:12
    开放容器倡议是建立在这个组织之下的
    13:17
    Linux基金会非常活跃,它包括来自许多专业的成员
    13:23
    涉众包括docker,其目标是为容器运行时和映像创建开放标准
    13:29
    还有更多的事情发生了
    13:37
    发生了,但是还有一些其他的日子也很重要
    13:43
    对我们来说,最重要的是Java 7在7月份发布了
    13:50
    2011年,Java 8的开发工作开始,并于2014年3月发布。
    13:58
    请记住这一点,因为当您开始将Java应用程序容器化时,这一点历史将是
    14:03
    知道这些很重要,稍后我会再讲这就是我们第一堂历史课的内容
    14:09
    知道这是很多我真正想要做的是关于oci如何的信息
    14:17
    Java开发与docker开发交织在一起,这不是新的容器和
    14:24
    图像已经存在很长时间了[音乐]
    14:29
    好的,让我们进入市场看看过去几年发生了什么这更有趣
    14:35
    我做了一些调查只是为了找到一些一致的数据,我找到了
    14:41
    通过系统查找报告一些观众可能已经熟悉这个公司,他们提供了一个真正的
    14:47
    强大的监控和故障排除工具,为Linux他们推出了这个基于报告的容器
    14:52
    对自己的用户进行分析,并且该报告的一部分包含有关使用的容器运行时的数据,以便
    14:59
    指在生产环境中实际运行容器的人员
    15:05
    他们为他们的应用程序选择了什么运行时,在2017年他们分析了来自45个国家的数据
    15:13
    000个集装箱没有图表,因为其中99个是码头,所以他们
    15:20
    2018年,他们没有把这些结果分开,而是分析了9万份数据
    15:26
    容器现在我们得到了更多有用的数据,两倍的样本量83%颜色更深,然后你可以
    15:33
    看,这里有一些核心操作系统的mesos和lxe,所以它看起来不像其他的
    15:40
    容器运行时开始一点点蚕食docker
    15:46
    进入2019年,系统容器报告包括
    15:51
    超过200万个容器的统计数据,所以你可以看到这个运动有多受欢迎
    15:58
    是的,这是有原因的,我们一会儿会谈到docker仍然持有相对的
    16:04
    79%的人很强势,但看看容器d的18%
    16:10
    请注意,容器d实际上是一个运行时,docker现在建立在上面
    16:16
    他们他们贡献了这个项目,所以他们是同一个人
    16:22
    最后的4%是低温,注意,消失了
    16:29
    火箭容器,这是一个悲伤的故事,核心操作系统被红帽收购
    16:36
    2018年初,在那之前,火箭被打开或被CNCF接受
    16:43
    原生计算基础作为一个孵化项目,它看起来很有希望成为docker的竞争对手
    16:50
    然而,自从那次收购发生后,项目的开发就开始了
    16:56
    我想他们只是没有他们想投入的资源2022世界杯阿根廷预选赛赛程
    17:01
    进一步开发或维护该项目,在2019年年中,火箭被存档
    17:07
    CNCF在2020年2月那个项目结束了现在这并不意味着你
    17:12
    不能使用火箭容器,如果你想它仍然可以在github的回购,你仍然可以建立一个你
    17:18
    仍然可以部署它们,只是没有人再积极维护那个项目了
    17:26
    2021年1月
    17:33
    系统发布了他们的2021年容器安全和使用报告,很难知道我们是否在比较
    17:40
    考虑到客户容器子集的小限定符开始混乱,这里是苹果对苹果
    17:47
    他们的数据来源很少但这份报告包含了大量关于他们的详细信息
    17:53
    人口统计数据和数据源,以及其他有关客户作为什么服务运行的有趣信息
    18:00
    简而言之,他们的编曲使用了什么我从这份报告中得到的是这个,呃,注意到这个增长
    18:07
    容器d从18到33的使用情况看看是否
    18:14
    这种趋势还在继续,我认为它会继续,尤其是自从kubernetes之后
    18:19
    不久前宣布他们已经不支持docker了
    18:25
    很多人一开始听到这个消息时都觉得很可怕
    18:31
    这就意味着docker是一个巨大的技术栈
    18:36
    为了能够在kubernetes和docker中运行它而必须添加的额外内容分解了它们的
    18:43
    现在他们的运行时容器,你可以用它来代替
    18:49
    这说得通,因为容器d是上升的,码头是下降的
    18:55
    好了,现在我已经介绍了一些其他的容器运行时除了docker,我们可以
    19:03
    看看集装箱到底是什么我还有一份报告给你们看不过这是最近的
    19:11
    这也是来自系统的当然这是对300万人的分析
    19:17
    容器,我们可以看到这里没有太多变化
    19:22
    所有这些报告的链接都在幻灯片上如果你想去看的话就像我说的,还有很多更有趣的
    19:29
    里面的信息我确实找到了关于编曲的信息
    19:34
    同样有趣的是,有多少人在使用kubernetes,而除了kubernetes还有什么呢
    19:41
    [音乐]好吧,docker到底是什么
    19:46
    你一开始有没有推断docker是一个广义的术语有点像面巾纸
    19:54
    所以你知道它更常用于容器和图像,而不是
    20:00
    真正的docker容器和映像很高兴知道它们的区别是什么
    20:05
    docker实际上是docker作为一个公司已经结束了
    20:11
    在这个容器游戏中的其他玩家,他们专注于商品化一个完整的解决方案,使它更容易
    20:18
    开发人员可以打包和部署他们的应用程序,一旦容器成为
    20:24
    易于使用我们都目睹了工具和资源的爆炸式增长2022世界杯阿根廷预选赛赛程
    20:29
    容器,因此你知道在生产中使用量的增加
    20:35
    docker图像格式成为市场上事实上的标准
    20:40
    我从system中显示的统计数据是特定于容器运行时的
    20:46
    理解这些术语很重要,我们会详细讲解
    20:51
    如果你接触过容器,你就会明白为什么docker能如此迅速地占领这个市场
    21:01
    好了,我们总是需要回到我们要解决的问题上来想想我们到底需要得到什么
    21:07
    我们的应用程序在那里运行就像集装箱一样我们只需要一种方法来提升和
    21:13
    转移我们的应用程序不需要太多的努力,所以为了达到这个目的
    21:18
    我们需要一些工具来完成这些功能这里有一个列表
    21:24
    这些需求被分解成离散的特征首先,我们需要容器本身
    21:31
    你们中的一些人现在可能会问虚拟机
    21:36
    讨论VMS超出了本次会议的范围,但我要说的是虚拟机
    21:43
    与容器不同,最大的区别在于vm包含了整个操作系统
    21:50
    容器共享系统的操作系统,这就是容器的意义所在
    21:55
    轻量级的,并且能够无缝、快速地从一个环境迁移到另一个环境
    22:01
    也就是说,我知道在虚拟机领域有一些发展但那是另一个话题了
    22:09
    在容器之上,我们还需要一种方法来定义容器这是我们获取图像格式的地方
    22:16
    我们需要一种方法来构建容器的映像,我们需要一种方法来管理这些映像
    22:25
    我们需要一种方式来分发和分享这些图像与我们的同事和其他人
    22:30
    我们需要一种方法来创建启动和运行一个容器环境,然后我们也
    22:35
    需要一种方法来管理那些正在运行的容器的生命周期,这甚至不像编排那样
    22:42
    就像kubernetes那样的环境,但这足以证明我关于docker的观点,以及它们为什么会这样
    22:49
    所以流行在那些开发者的语境下
    22:55
    我们刚刚讨论过的需求docker已经准备好了一个答案,你可以开始使用容器
    23:02
    他们提供了docker引擎,你需要一个图像格式,他们有一个docker图像
    23:07
    格式,实际上是贡献给oci,你需要一种方法来构建一个图像使用
    23:14
    Docker文件叫做Docker构建你想管理的镜像
    23:19
    您可以调用docker images docker rm来删除您想要共享的映像或使用
    23:27
    图片来自别人,你可以叫它Push博士或者docker pull,还有docker hub,你可以
    23:33
    存储和共享您的图像,您需要一种方式启动,运行和管理
    23:38
    您的容器在其生命周期中调用docker run、docker stop或docker ps
    23:45
    Docker很快就满足了容器市场的需求,特别是对开发人员来说,他们让它变得简单
    23:52
    这是一个完整的包裹,给了他们很大的一部分
    23:57
    市场份额非常高,我希望你们能欣赏我想找的这张香蕉图
    24:04
    一些相关的东西,我只能找到香蕉和结婚戒指,希望你喜欢
    24:12
    好了,还记得我之前讲过的开放容器计划吗
    24:18
    我们刚刚列出的讨论过的docker提供的特性有两个被采用了
    24:25
    对于直接由oci引起的原因,即图像格式和容器运行时
    24:31
    从那以后,他们还贡献了图片的发布,以及如何运作
    24:37
    所以他们有相应的标准docker做了一些重组
    24:42
    他们的代码库和他们开发的抽象抽取出离散的功能,他们是沉重的
    24:48
    作为oci的贡献者,他们提供了docker v2映像规范作为docker v2映像规范的基础
    24:53
    Oci图像规范,他们也给出了run c,这是一个参考实现
    25:01
    oci容器运行时规范中还有相当多的其他容器
    25:07
    你可能会在那里看到运行时,包括容器d,冷冻和kata,它更像所有的虚拟机
    25:14
    针对特定用例的各种级别的特性运行c只是为了
    25:19
    澄清一下,有低级容器和高级容器运行时,运行时c实际上是a
    25:26
    容器d使用的低级容器运行时
    25:31
    容器实际上是由docker贡献给云原生计算基础的
    25:38
    在内部运行run c,它被集成到docker中,并在
    25:43
    Docker从1.11版开始。这是在2016年发布的,所以已经有一段时间了
    25:48
    接下来的几年将会是很有趣的,我们将会观察到规格和oci是如何移动的
    25:56
    在最初的图像规格和后来的
    26:01
    发行规范出来了,结果发现很难实现
    26:06
    按照标准,我现在加入了一些特殊利益团体,你知道我们可能会在那里花钱
    26:13
    很长一段时间来决定我们的措辞是否正确或者我们是否使用了正确的术语,所以需要
    26:19
    一段时间以来,不仅在这个方面,而且关于什么应该和什么应该有很多不同的观点
    26:26
    不符合容器运行时的标准我们现在的情况是运行时
    26:34
    只是满足了oci的要求,似乎还不足以驾驶
    26:40
    我在这里添加了一些链接,它们是很好的起点
    26:45
    了解有关容器运行时的更多信息,如果您感兴趣,可以深入了解
    26:50
    第二篇是伊恩·刘易斯系列博客的开头,它已经过时了
    26:56
    但它仍然是相关的,仍然是一个很好的解释他是谷歌开发倡导者,第一个副标题
    27:04
    博客的标题是为什么容器运行时如此令人困惑,所以他采取
    27:10
    并试图简洁地解释
    27:16
    为什么会这样,它们实际上是如何工作的
    27:22
    好了,现在我们了解了docker需要什么,以及你知道发生了什么
    27:28
    市场,让我们只关注容器本身以及它在您的系统上的样子
    27:34
    我会告诉你它是如何存储在我的MAC上的,因为这就是我
    27:39
    但是你很快就会发现图像和容器并没有那么神奇
    27:48
    我第一次接触容器是在几年前,当时我是一个新项目的开发人员
    27:53
    当然,最后期限很紧,我可以说,这是大多数项目的一个很好的描述,每个人都有一个
    28:01
    截止日期很紧,但是对我来说最好的做法就是投入其中,开始
    28:06
    在我的本地机器上运行了一些东西现在从这个项目开始真的很好,因为它
    28:12
    这个项目最初是由第三方开发的现在它引入了你知道引入了吗
    28:18
    在公司内部,现在我们的责任是为它添加功能和维护它,所以它不像
    28:24
    我需要从头开始,我可以看看那里有什么,然后开始学习
    28:30
    很好docker的文档也很好所以如果你发现自己在
    28:37
    类似的职位,我建议直接去他们的入门文档,我已经链接到这里,他们有一些
    28:45
    关于Java的也很好,但我真的鼓励你们提问
    28:50
    你所看到的关于Java的一切,以及构建映像的一切
    28:56
    很多例子都只是例子,它们并不总是有生产价值,到最后
    29:02
    你们会明白为什么会这样首先要注意的是
    29:08
    Docker Docker镜像本身就是一个完整文件系统的压缩包为了更清楚,它是一个镜像
    29:15
    图像就像一个蓝图,相当于一个类文件
    29:20
    在Java中容器是它的实现它是一个从蓝图中创建的对象
    29:28
    你可以有来自同一个图像的多个容器图像就是你需要的地方
    29:33
    开始学习这个图像是如何构建的当一个图像被打开的时候比如当它即将被发射到
    29:40
    容器,它实际上只是被扔到它自己的目录中,并成为该容器的根文件系统
    29:48
    要注意的第二件事是,运行容器所涉及的进程只是普通的Linux
    29:55
    在docker文档中,你会发现一个很酷的视频
    30:00
    关于使用go从头开始创建容器,它确实使它变得简单
    30:07
    这些都不是魔法它们只是你们知道的Linux进程
    30:12
    只有几个Linux特性一起使用,以某种方式实现我们想要的隔离
    30:19
    容器名称空间只是它们是一个重要的组成部分
    30:25
    它们用于在容器之间提供虚拟分离,例如在同一主机上运行的容器
    30:32
    这就是一个容器内的进程不会干扰主机的原因
    30:37
    本身或进程在另一个容器中这里你可以看到一些名称空间的例子
    30:44
    在我的机器上启动postgres容器时设置了什么
    30:49
    C组功能对于限制容器的容量至关重要
    30:55
    使用的东西,如CPU内存网络带宽等,我可以设置这些限制
    31:01
    包括docker运行命令上的选项,当我在这里启动镜像时,你可以看到我已经受限了
    31:08
    我的一个容器的内存使用限制
    31:15
    我将快速地介绍一下容器和映像实际所在的文件系统细节
    31:22
    安装docker后首先存储在文件系统中
    31:27
    执行docker命令
    31:45
    运行docker命令info将显示一系列关于安装的信息,包括
    31:51
    Docker根目录,这是你最关心的地方,这是
    31:57
    关于您的医生图像和容器的所有内容都将被存储
    32:03
    如果你像我一样使用MAC,你的容器实际上会
    32:14
    不好意思,我试着拿它我要看到我的声音了,是的,是的,我们可以看到
    32:21
    我们可以看到,我可以填补沉默一会儿
    32:28
    嗯现在感觉很好
    32:36
    就在我们准备同意的时候,就是这样了
    32:42
    是的,但是不管怎样,如果所有在最后几分钟加入的人,我都粘贴了一个
    32:48
    在聊天的链接,你可以去那里,你可以找到所有的幻灯片,也有机会获胜
    32:54
    亚马逊回声,所以你们中的一个获胜的几率很高,所以去吧
    33:01
    今天去试试你的运气吧,不过这是j frog赞助的
    33:08
    这太酷了,太棒了,我们看看能不能继续写下去
    33:14
    盖住我的小音箱哦,是的,好的,我们在讨论根目录,你的所有东西
    33:20
    要关心你的docker映像和容器现在要被存储
    33:26
    就像我说的,在MAC上你运行在一个很小的vm中,所以你需要使用一些实用程序来进入那里
    33:33
    到docker根目录查看一下,我在这里发布了几个命令
    33:39
    是使用容器本身,然后启动它让你可以导航到那个目录吗
    33:46
    看一下它,我也为Windows做过,我感觉很糟糕,因为我总是来自MAC
    33:52
    我不会经常忽视Windows用户,所以我为此道歉,我偷了我儿子的电脑,它是Windows的
    33:59
    我在机器上安装了docker,摆弄了一会儿,看看它是什么样子的,这是
    34:05
    我在Windows机器上找到docker映像的目录
    34:11
    真的很喜欢你知道的包含Linux的新Windows
    34:16
    这样你就可以在你的Windows盒子上运行ubuntu很酷,这是如何工作的
    34:24
    说服我买一台Windows电脑只是为了测试一下
    34:29
    [音乐]好的,这张幻灯片展示了如何获取图像的信息
    34:35
    您已经存储在您的系统中,首先,我列出了我可用的图像使用
    34:40
    Docker镜像命令,我实际上已经安装了几个,但我只是列出了前一对
    34:47
    使用docker inspect命令,您可以使用映像id检查任何映像
    34:54
    这将产生大量有趣的信息,我只想在这里强调图形驱动程序部分
    35:00
    包含该图像中所有图层所在目录的路径
    35:06
    Docker映像是由层组成的,我相信你以前听说过,它代表指令
    35:12
    Docker文件,最初用于构建映像的层本身的命令
    35:20
    实际上可以转换成单独的目录,这些图层可以跨图像共享,以便保存
    35:27
    在你的机器上每一层的空间和后续的层都是一样的
    35:33
    由前一层和新添加的东西之间的差异组成
    35:41
    下面是合并部分和上面的部分
    35:48
    这些也很重要,看看下面的目录,你可以导航到所有这些
    35:55
    如果你在根目录中,你可以导航到那里并查看它们,下面的目录包含了所有
    36:01
    用于构建原始图像的目录或层
    36:06
    这些都是只读的,上层目录包含所有修改过的内容
    36:13
    您的容器正在运行,因此,如果需要修改较低目录中的只读层,那么
    36:20
    层被复制到上层目录,在那里它可以被写入,这被调用
    36:25
    写时复制操作,重要的是要记住,上层目录中的数据是短暂的
    36:32
    数据它只在容器存在的时间内存在事实上,如果你有想要保存的数据
    36:39
    例如,应用程序生成包括日志之类的东西或者数据库之类的东西
    36:47
    是否应该利用docker的卷特性挂载一个即使在容器死亡后仍然存在的位置
    36:54
    将日志从容器中运出,因为它们是短期的
    37:01
    这也是大多数容器运行数据库的方式
    37:07
    最后,合并目录有点像一个合并的虚拟目录
    37:12
    从下目录到上目录的所有内容这就是联合文件系统的工作方式编辑层
    37:19
    被复制到上面的图层会覆盖在下面的图层上吗
    37:24
    实际执行到容器中,这样你就在里面环顾四周这就是你所在的层
    37:31
    查看合并后的目录
    37:37
    这张幻灯片显示我的系统上有几个正在运行的容器
    37:43
    其中两个是我正在使用的本地jfrog容器注册表安装
    37:49
    它包括一个用于artifactory的容器和一个用于postgres数据库的容器
    37:54
    另一个只是一个简单的测试容器,我只是想看看它是如何工作的
    38:00
    注意,正在运行的容器的容器id实际上是匹配的
    38:06
    关于容器子目录名这里需要记住的是
    38:11
    停止相应目录不会自动消失的容器,直到
    38:17
    容器实际上是用docker rm命令删除的,所以如果你已经停止了容器
    38:25
    在那些从来没有清理过的地方,你可能会发现你的可用空间开始减少
    38:31
    Docker卷是另一种卷,它们也会累积在您的系统上
    38:37
    当我开始研究容器时,我几乎马上就意识到这一点
    38:43
    你不能一直发射容器而不处理和清理它们,它们会变得很大
    38:49
    你可以运行一个docker系统修剪命令
    38:56
    每隔一段时间来帮助清理,默认情况下它不会清理卷
    39:01
    如果你想清理卷,你必须包含一个标志
    39:07
    或者,您可以启动一个带有标志的容器,以指示在完成运行时应该删除它
    39:14
    很多编曲也会帮你解决这个问题所以如果你有
    39:20
    如果您正在使用kubernetes或其他工具,您可以指示您希望在容器被删除时删除它们
    39:25
    完成后,工具集围绕构建和
    39:31
    运行图像和容器使事情变得如此简单,现在它也很容易拍摄
    39:36
    你自己的脚,我要讲一些最常见的陷阱,我马上就遇到的
    39:42
    包括一些Java开发人员会关心的JVM特定的陷阱
    39:48
    当我开始和他们一起工作的时候就遇到了
    39:53
    docker文件很难在不查看的情况下与docker一起工作
    39:59
    操纵,对docker文件生气
    40:05
    有了docker文件,您就拥有了应用程序发布所需的所有构建块
    40:11
    在生产环境中,这是一个非常详尽的命令列表,您可以在docker文件中使用
    40:17
    这些你几乎可以做任何你想做的事情你可以做所有正确的事情和你
    40:22
    也可以做所有错误的事情,以及介于两者之间的一切,这看起来很简单
    40:30
    第一种是作为根用户运行容器化的应用程序,这里我将诚实地说
    40:36
    当我最初获得容器并运行时,我非常高兴它能够工作,这是一段时间之后,我采取了这个
    40:43
    认真的,一旦你明白这个过程是在一个运行的容器里或者
    40:49
    就像系统上的任何其他进程一样,尽管有一些限制,但现在在
    40:56
    容器这样做会使进程有可能脱离容器和容器的预期范围
    41:03
    获得对主机资源的访问权也就是说,如果有人2022世界杯阿根廷预选赛赛程
    41:08
    找到访问您的容器的权限,能够在您的容器内执行,他们立即拥有root权限
    41:15
    能真正搅乱你的主机而不只是容器这样就能减少你的攻击面了吗
    41:21
    容器遵循最小特权原则,尽管容器被设计为不影响其他运行
    41:27
    如果有人访问了容器,很明显他们会立即让你付出代价
    41:33
    如何缓解问题显然不能以root身份运行
    41:39
    最好的方法是创建一个用户,您可以在类中使用user命令
    41:45
    如果你从很多Docker文件中查看Docker文件,你会发现当容器被构建时,Docker文件是为了以该用户的身份运行进程
    41:52
    你知道官方的docker图像你会发现
    41:59
    到底发生了什么比如我上次看postgres的时候
    42:04
    你可以打开它,你可以看到他们正在设置一个用户并作为postgres用户运行它
    42:11
    当你使用docker run命令时,还有一种方法可以指定用户
    42:17
    就像你刚刚从docker运行中启动映像一样但这留下了可能性
    42:22
    忘记这样做了,所以我更喜欢把它放在docker文件中
    42:28
    不要忘了我刚才提到的postgres的官方形象
    42:33
    但是要注意你从docker hub获取的任何官方图片实际上是任何图片
    42:40
    或者默认情况下它们作为根运行它们可以让你知道当你在上面构建的时候
    42:47
    在基础图像的顶部,所以要注意这里发生了什么,还有我提到的docker官方图像
    42:54
    那些是一组经过整理的图片
    42:59
    docker有一个专门的团队负责以一种非常透明的方式审查和发布这些内容
    43:06
    人们很容易认为这是理所当然的,但当然,如果你使用任何官方图片
    43:13
    停下来看看它们的原始docker文件如果你在讲座结束后提醒我如果你感兴趣的话
    43:20
    我可以告诉你们去哪里找我这里的链接
    43:27
    就是这样,就是这样,这就是你找到它们的方法,但是我可以给你展示更多的细节,告诉你去哪里
    43:33
    docker使用的官方存储库是官方的吗
    43:39
    他们有文件在那里的图像,他们包含相应的github repo的路径
    43:45
    你可以在那里找到docker文件
    43:55
    好的,没有约束,即使docker提供给你
    44:01
    在容器上设置资源限制的能力事实上,它不会自动为您这样做
    44:07
    设置几乎是免费的,没有任何限制,所以请确保您了解资源
    44:12
    你的应用程序的需求因为你现在可以把你的在你的应用程序里面的图像它
    44:18
    这并不意味着您可以偷懒而不了解应用程序的资源需求
    44:24
    你可以用你会想要监控一段时间所以设置监控
    44:31
    您正在运行的容器很重要,并且根据需要调整资源,这是一个2022世界杯阿根廷预选赛赛程
    44:38
    这是一种很好的方法,可以确定是否出了问题,比如系统上的负载是否突然发生了变化
    44:44
    这是非常有价值的信息,也是必须做的事情,你也可以利用这些信息来
    44:51
    确定您的应用程序是否应该进一步拆分,这实际上发生在我们身上
    44:56
    它不是一个巨大的整体,但有几个部分我们需要按不同的比例进行调整,这样我们才能打破它
    45:02
    通过这种方式取得了很大的进步
    45:08
    永远不更新这是一个很大的安全问题很容易自满而不付钱
    45:15
    注意在构建映像时实际被拉入的内容,这不仅是您需要注意的
    45:21
    您在docker文件中指定的过时版本,但您需要注意基本映像中的内容
    45:27
    这是从现在开始的图像可以以分层的方式构建
    45:33
    你可以有一个父图像当你看那个父图像医生文件时它也可以有一个父图像
    45:40
    图像,这可以一直到最开始,直到你找到一个医生文件的第一行
    45:45
    Docker文件说scratch是你的基础映像
    45:52
    不更新包和库在这些映像中会导致
    45:59
    一些一些问题确保你运行的容器
    46:04
    如果容器或系统中存在已知的漏洞,那么非特权用户也有风险
    46:12
    主机的内核使不时发现的漏洞得以启用
    46:17
    攻击者为了潜在地逃离容器,一定要跟上这些安全性
    46:22
    我也曾在一些团队中遇到过更新问题,但这并不是优先考虑的问题,通常是因为
    46:30
    害怕打碎正在工作的东西这只是一种症状
    46:35
    让这些漏洞留在那里会更糟糕
    46:41
    我记得有一个团队在挖矿方面确实遇到了一些问题,他们只是
    46:47
    幸运的是,他们对一切都进行了监控,所以他们可以立即知道资源使用何时开始
    46:54
    但他们很快就发现了问题并解决了
    47:01
    图像膨胀,就像我说的图像可以变得非常大,非常快特别是如果你有一个又一个的图像
    47:08
    当你在看docker文件的时候,有时候并不是很清楚里面有什么
    47:14
    这是在右下角,但当它最终由你开始添加你自己的包
    47:20
    现在要做的一件事就是确保你用的是圆点
    47:26
    Docker ignore文件,它的工作原理与git ignore非常相似
    47:32
    防止您添加单元测试或秘密之类的东西,甚至是不应该添加的东西
    47:38
    添加运行应用程序绝对需要的资源之2022世界杯阿根廷预选赛赛程外的额外资源和东西
    47:45
    只要进入你需要的画面就行了仅此而已
    47:51
    我很久以后才想到的一件事是你需要你知道,不要把整个屁股都挪进去
    47:58
    目录到你的图像中如果你在做这些docker文件中的一个
    48:04
    所有东西的完整副本想想这意味着什么你实际上复制的是什么
    48:12
    这并不局限于文档到Java项目或任何项目
    48:18
    你应该注意另一个,另一个缓解方法是尽可能使用docker的多级docker构建
    48:26
    等一下给我举个例子这样你就可以做你的构建然后把所有的东西都拉进去
    48:32
    您的第三方依赖项或在构建期间的其他依赖项,然后
    48:38
    只将从该构建生成的工件复制到第二阶段
    48:46
    这将有助于限制大小,这是Java特有的
    48:53
    特定于容器化工作申请,并且与了解您的应用程序需要什么非常相关
    49:00
    要成功地运行已分配的内存,JVM非常漂亮
    49:05
    聪明地决定您的交换和堆设置和您的垃圾收集行为的基础上,如
    49:11
    主机上可用的内存和核数还记得我们的历史教训吗
    49:16
    与Java 7和Java 8以及docker开发交替进行
    49:22
    考虑到时间轴,我不认识Java 7的人
    49:29
    但是我知道很多人还在用Java 8。他们并没有完全意识到这一点
    49:35
    意味着您的Java应用程序不一定会遵守您对Java的内存和CPU约束
    49:40
    容器,你可能会结束一些内存杀手活动,原因是
    49:47
    JVM在这些旧版本中用于检索可用资源的机制来自实际的主机2022世界杯阿根廷预选赛赛程
    49:53
    机器而不是c组限制,你会期望有一些改进
    50:00
    容器意识是在Java 8之后的更新中引入的,我想是131年之后
    50:08
    在以后的版本中有进一步的改进,但要真正获得容器感知的所有好处,您确实应该这样做
    50:13
    尝试升级到11,但那是最早的支持容器的LTS版本
    50:23
    [音乐]好的发行版列表这是你的另一个选择
    50:29
    没有发行版的图片有一些可以在谷歌上找到
    50:37
    现在有11和17这些图像真的真的吗
    50:42
    减少你绝对需要在你的形象中运行的东西
    50:47
    事实上,它们甚至不包括shell,这意味着你甚至不能在映像运行时执行
    50:53
    作为容器运行肯定有助于提高安全性,从而使故障排除更加困难
    50:59
    这很困难,但是你真的不应该严格要求生产运行容器,所以它鼓励你
    51:04
    使用最佳实践,比如发送你的日志之类的来做你的
    51:10
    运行容器的故障排除本文还向您展示了一个多阶段构建的示例,以便您可以执行所有操作
    51:16
    你的构建就像这个例子在顶部,然后第二部分,从第七行开始,你得到一个
    51:22
    第二个from语句,这是无失真图像,然后只有你需要的项目被复制进来
    51:31
    这里有一个链接,有很多关于洋地黄容器的信息,如果你感兴趣的话
    51:38
    您可以使用其他方法制作自己的自定义映像
    51:43
    这将真正简化Java项目和Java映像,您可以使用jlink
    51:49
    与开放的JDK 11一起打包。它允许您结合jdeps做什么
    51:56
    运行应用程序所需的依赖项,并且只包含这些依赖项
    52:01
    在基本图像中你可能会发现这对弹簧有帮助
    52:08
    启动项目,因为你知道特定的框架会带来大量的东西,所以你可能
    52:15
    找到一些关于容器大小的好处我们关心容器大小的原因是考虑
    52:22
    每次你需要启动和运行容器时你都需要从注册表中拉出它
    52:29
    然后开始,我不是在说开始时间,而是
    52:35
    把时间转移到需要发射的地方
    52:40
    有一个maven和gradle的spring引导插件,它可以让您不必担心
    52:46
    关于docker的内部或构建docker文件,但想想我们刚刚做的所有事情
    52:52
    了解了docker文件,以及如果您选择使用其中之一,如何帮助自己
    52:58
    方法我鼓励你们关注maven和gradle的一个特点
    53:06
    例如,spring boot插件实际上使用构建包,当我使用它时,它使用pocketo构建
    53:13
    这意味着它正在提取图像
    53:18
    它决定了如何构建你的应用程序
    53:24
    是不是看一下格式就知道这是一个专业项目我们要建立一个图像
    53:30
    特别的方式,但是注意它在幕后做的是从其他地方拉出一个图像
    53:35
    再一次,你依赖于外部资源你可能想把它们拉下来
    53:41
    将它们存储在某个地方,然后设置maven或gradle插件来使用您的
    53:46
    你存放的钞票包,这样它们就不会从你的身下被换走
    53:52
    我们讲了一些构建包你可以从这些链接中找到更多
    53:58
    然后是jib jib,专业人士,很简单,你只需要添加插件
    54:03
    但它也建立和提升了你的形象,这很好,因为它
    54:10
    减少了步骤的数量,但我觉得这有点奇怪,作为一个开发人员,把图像推送到任何地方
    54:17
    应该只检入代码到github,然后你的ci进程将是
    54:22
    建立形象,照顾好它,所以我不是特别喜欢
    54:28
    推图像的想法也有一些默认值可能不是你想要的
    54:36
    我们通常假设底像是分布的,当然,因为它是推的
    54:42
    图像,你可能需要排除故障
    54:48
    解决那些私有存储库的问题
    54:53
    如果您根本不想使用docker,如果您使用的是Linux系统,那么您可以查看其他选项
    54:59
    Podman和build在Windows上就不那么容易使用了
    55:05
    和MAC开发机器但是如果你在Linux中或者如果你更多地涉及到操作这可能是
    55:10
    与使用docker相反的首选方法
    55:17
    剩下的我会很快地讲一遍,我这里有一个链接
    55:23
    只是一些信息,告诉你在管理图片的时候应该考虑什么,应该把它们放在哪里
    55:30
    想想你想要如何储存它们如何保护它们
    55:36
    您是否应该使用公共存储库、注册中心或私有存储库
    55:41
    jfrog显然有一个免费的版本,如果你想看看是什么样子的,你可以试试
    55:49
    请注意,当你拉入基础图像时当你已经知道你的应用程序依赖于基础图像时,拉入这些图像并拥有它们
    55:56
    标记它们,把它们放到你的私有存储库私有注册表中,这样你就知道了
    56:03
    它不会因为你的将来而改变
    56:10
    这就是我要和你分享的一切,我没有给你留下任何时间
    56:16
    有问题的话,我可以多留一会儿如果你们想多聊一会儿或者看一下
    56:21
    几个不同的东西很棒,听起来不错
    56:26
    你们可以在聊天中留下问题,如果你想的话,也可以取消静音,然后问他们
    56:32
    实际上我有一个关于集装箱市场滑坡的问题,我认为在2018年到2019年之间,它从
    56:41
    从9万到200万我只是想知道你是否知道这是一个巨大的增长还是一个范围
    56:47
    他们所关注的也在增加或者两者都有一点是的,可能两者都有一点
    56:54
    因为就像我说的,这个系统也只关注他们的客户,所以他们可能
    57:00
    使用系统的爆炸式增长我很喜欢看
    57:06
    比如docker出来的日期他们在做什么我是说变成你的那一刻
    57:13
    开发人员很容易开始构建自己的图像,看起来我们进展得很快
    57:19
    从那到图像开始出现在生产中,是的,这是有道理的
    57:30
    我有一些有趣的事情好吧,实际上我忘了,我刚想起来
    57:36
    我的朋友本·埃文斯,他也是Java冠军
    57:41
    只是对运行Java和单核容器进行了一些研究,这是一篇文章
    57:48
    我要我要把链接放到聊天里他发现了一些有趣的东西
    57:55
    你知道,当我们建造这些容器时,我们倾向于把它们做得更小
    58:01
    它们很小,所以很多容器都放在那里,用一个核心
    58:06
    这样做的结果是,你得到了垃圾收集工作的默认用法,而实际上可能不是这样
    58:12
    适合你的项目,所以我认为这是一篇非常有趣的文章,我需要阅读它
    58:19
    更多的细节,但我保证我会和大家分享,因为这是有趣的信息
    58:26
    在部署方面,你有一个问题,梅丽莎
    58:33
    对于像我这样即将进入计算机科学领域的学生来说,这是一句至理名言
    58:40
    你知道你今天来参加聚会是对的
    58:45
    聚会小组是很棒的,他们真的给你一种社区的感觉,他们给你提供你需要的联系
    58:51
    问题和找到导师,这对你来说意义重大
    58:56
    一开始你可能会觉得难以接受,因为你需要了解的东西太多了,这个行业太庞大了
    59:04
    永远不要害怕问问题,一次只关注一件事
    59:10
    所以无论你在学校学什么都要想办法实现这一点
    59:16
    试着分散自己的精力去学习所有这些所有的东西
    59:21
    你很快就会筋疲力尽,所以一步一步来我知道我很沮丧
    59:29
    很长一段时间我都觉得自己很笨,每个人都比我知道的多,但事实并非如此,每个人都是如此
    59:36
    知道不同的事情,这就是为什么这些社区如此伟大,是的,我想再加上
    59:42
    一点,当然,一步一步来,即使可能需要
    59:47
    花几年的时间去弄清楚一些别人凭直觉就知道的事情,所以不要放弃,总有一天会成功的
    59:53
    绝对不要失去你的好奇心,这是一个很好的建议
    59:59
    是的,利用匹兹堡的Java用户群当然,我的意思是,如果你对Java有兴趣的话
    1:00:06
    专注于加入我们的会议,我实际上学到了一些东西,或者至少
    1:00:12
    即使听到这些术语即使我不积极使用它或者不使用它至少我听到了一些东西
    1:00:18
    然后一些东西粘在一起一些东西联系在一起我不需要在这方面有博士学位,但是
    1:00:24
    我学到了更多关于docker的知识,你知道,这绝对比我知道的要多
    1:00:29
    一小时前,这就够好了,好好利用这些聚会小组
    1:00:37
    特别是匹兹堡的zm组比其他组更好
    1:00:43
    但我们不会偏心(笑声)我们在youtube上也有一个频道
    1:00:49
    我想你们应该都可以看到我们2021年和2022年的会议内容包括
    1:00:57
    开源的未来,Java的未来我们做了很多事情,比如
    1:01:02
    我认为微服务所有这些东西它们都以某种形式或形状连接着一些人
    1:01:07
    听一听,看一看是什么卡住了,然后你可以从那里开始,我们有很多
    1:01:13
    就像2021年其他关于Java的演讲一样,Java 17也会出来,所以有很多东西要学
    1:01:22
    我还有一个问题还是关于集装箱市场的因为我觉得那部分很有趣尽管无论何时
    1:01:29
    图表分解了docker和容器d,所以docker部分是你的整体全栈版本
    1:01:36
    我们说kubernetes很快就会停止支持了,对,就是这样,它是一个完全的docker
    1:01:44
    即使它现在包含了容器d本身也有一些
    1:01:49
    基本上是一些抽象,只有docker才有的
    1:01:56
    kubernetes团队已经厌倦了
    1:02:01
    为docker设置一组不同的连接而不是其他所有跟随你的人
    1:02:07
    了解oci规范和标准,所以有一次,他们放弃了这个
    1:02:14
    他们拿出了容器d容器d符合所有这些规格和标准这就是你要用的
    1:02:21
    太棒了,所以在接下来的一两年里,我们可能会继续看到容器d的使用越来越多
    1:02:28
    是的,当然,我在聊天中没有看到任何问题
    1:02:34
    但我猜这段YouTube视频下节课就能看到了
    1:02:40
    几天了,几天了,我想sirisha已经把链接粘贴到频道上了
    1:02:46
    订阅它,这样你就会收到通知我不敢相信我现在是那个说订阅YouTube频道的人,但是
    1:02:51
    是的,在YouTube上订阅这个频道,这样你就会收到通知
    1:02:57
    哦,别忘了参加抽奖,我来粘贴一下
    1:03:03
    再次链接耶耶
    1:03:10
    你总是选择香蕉来做这道甜点还是把水果换成这个对,然后是
    1:03:18
    另一个我喜欢不同的香蕉图片,这更有趣,不过我经常用香蕉
    1:03:25
    你想想其他的食物,不,我实际上分心了一秒钟,因为还能是什么呢
    1:03:32
    一个容器,是的,我在开源峰会上做了一个演讲
    1:03:38
    有人打断了我,因为这是另一个不同的演讲,但我也用了香蕉,他只是说我
    1:03:44
    我只想说香蕉是一个很好的选择,因为当我们不确定是否喜欢这种水果时,我们会用香蕉
    1:03:50
    很干净,你能感觉到它是有保护的吗
    1:03:56
    我知道香蕉是一个很棒的选择很棒,它适合几乎适合每一张幻灯片,我试着
    1:04:02
    想想你会说什么看着混音器很有趣整个过程都很有趣
    1:04:08
    咯咯地笑着,但试图找到特定的香蕉相关的照片或照片是很有趣的
    1:04:14
    幻灯片,你知道我熬到很晚,我可以想象有一天晚上我只是
    1:04:21
    看香蕉的照片,非常有趣,非常感谢
    1:04:27
    很有趣,我们学到了很多关于好的东西,谢谢,谢谢,非常感谢
    1:04:33
    非常感谢我的到来非常感谢大家的到来
    1:04:39
    我们将在5月12日再见那将是我们的下一节课所以这是我们的
    1:04:45
    这不是我们通常的时间表,我们通常在每个月的第二个星期四做,但这次是因为devnex
    1:04:51
    上周发生的事我们不得不把这个推迟到本周所以我们的下一节课是在5月12日
    1:04:57
    你会收到聚会的通知,所以
    1:05:03
    在那之后的6月9日,接下来会有几节课,很酷,非常感谢大家
    1:05:09
    感谢jfrog对我们的赞助,谢谢
    1:05:15
    (笑声)很酷,下节课见,再见,他们