好,同学们,接下来我们就开始第一章的学习初始 doctor 啊,这一章里啊,我们会了解一下什么是 doctor, 以及 doctor 的工作原理,还有 doctor 和虚拟机之间的差别。而后呢,我们还会学习一下 doctor 的工作架构和它里边的一些概念,最后我们还会去带大家安装 doctor 啊, 下边呢,我们就开始第一部分,了解一下什么是刀砍,以他的工作原理。不过要了解这一部分,我们还需要先看一下项目部署所碰到的问题啊, 一个大型的项目组件往往很多,特别是微服务项目,各种各样的微服务,而且这些微服务啊,还会依赖于各种各样的应用,比如说前端部分肯定依赖于 note g s 吧,而我们的服务端呢,还需要数据库 mystical, 缓存系统 readys, 还有我们后边会学习的一部通信 mq 等等这些技术啊,而且还会有更多更多,这只是其中的一部分。那所有的这些应用啊,将来都需要部署我们的服务器上,而大多 数的服务器都会采用 linux 操作系统。那应用啊,在安装的 linux 操作系统之前啊,要做一些准备工作,因为这些应用都会有自己所需要的一些依赖和函数库,那每一个不同的应用,他们所需要的依赖和函数库可能有差异,也有可能一样,但是版本不同, 那这个时候如此复杂的一个依赖关系,很容易啊,就产生兼容,而且你费了老半天劲,终于把这些问题全部解决了,你会发现这只是一个开始,你搞定了开发环境,还有测试环境,生产环境、预发布环境等等在等着你。 最可怕的是这些环境他们的 linux 操作系统还有可能不同,你比如说我这里装了一个 zendos 系统,然后呢,还有一个环境里装的是 federal 系统,还有一个装的是乌班特系统,那怎么办呀?你在这个环境下配好了各种东西,你换到另外一个操作系统里, 他还能正常运行吗?那肯定是不行,那这就是我们现在啊,开发时或者说部署时所碰到的各种各样的问题,因此呢,在以前开发部署时效率非常的低。那这个问题 docker 又是如何解决的呢? 来看一下啊。那既然我们刚才说了,每一个应用都有自己所需要的依赖和函数库,那为什么我们不把这些依赖和函数库一起打包呢?所以刀客就干了这件事情, 你闹夹子,你需要什么依赖,我给你打包起来,形成一个整体,而后呢,我还给你放到一个隔离的容器里去运行,每一个应用我都这么去做,你需要什么依赖啊?你这 mac 口需要什么我都给你准备好。 然后呢,打成一个包,你将来要部署时,我连着包一起扔过去,你还考虑依赖的问题吗?不用考虑了吧?那有的人会说了,那你把他们扔到一台机器上,他们之间的依赖难道没有干扰吗?哎,不会啊,因为我们 的刀客啊,会把这些打包好的程序用一个隔离的容器去运行啊,会用到一种杀香的技术,他们相互之间不可见,这个问题就解决了吗?当然,这只是解决了我们刚才讲的混乱依赖的问题对不对? 那有了刀口依赖,你不用去管了,应用程序随时都可以运行,但是仅限于同一个操作系统。同学们,因为你在打包这个应用时,你肯定会基于某种操作系统去打包吧,比如这个应用是 乌邦图版本的,那么他的依赖和函数库肯定也是乌邦图版本的吧。那你把这个打包好的程序扔到森头市场,你觉得他可以运行吗? 所以,那刀客又怎么来解决这个问题呢?哎,要想了解刀客如何跨系统运行,我们得先知道操作系统的结构啊。这呢,我们有 vat 为例,给大家讲一讲操作系统的结构啊,没你想的那么复杂,同学们别着急啊。其实所有的 linux 内核的操作系统,它都可以分 分成两层,一层呢,是他家共享的内盒, linux 内盒,不管是 rubento 还是 syntos, fedora, right hat, 他们的内盒都是 lynex。 而区别是什么?上层的系统应用不同, ubantu 和这个 syntos 他们的应用是不一样的, 内核是相同,但内核干什么事呢?内核负责与计算机硬件进行交互。比方说,我去调一下 cpu 啊,调一下内存啊,留下文件呐, happy 个进程之类的,这些都是内核要做的事情。而内核会把这些事情啊,变成一个一个的指令, 你调用这些指令就可以操作计算机硬件了。但可惜的是,这些个指令大多比较简陋,如果你要继续这些指令去开发应用,那可就太麻烦了。所以说呀,我们就有了系统应用,系统应用,比如说五班组,他干了什么事?他会将内核的指令进行一个组装,再封装形成 函数,许许多多函数变成了函数库,那么程序员可以基于这些函数库进行开发程序调用我们的函数库。函数库呢?调用内核指令指令 去调我们的计算机进店,从而实现我们这个应用的一个执行,这就是我们 linux 系统的一个结构以及应用的执行原理了。那么问题来了,一个 rebent 系统上的应用为什么不能在 sentence 上运行呢?我们来看一下, 比方说我现在有一个三头的系统,有一个无帮头系统,他俩的内核是完全一样的,那系统应用不同,也就是说函数库不同, 可能五班组上有的函数库,三组上呢?不一定有,或者名字可能不一样。那这个时候我们把一个五班组上的 myserk 应用给他迁移到了三组上,尝试去执行,你会发现当他去调用一个函数库时,因为他代码写死了吗?去调一个函数库,而发现这个函数库在三组上根本不存在,那肯定会乘序报错呀。这就是为什么我们的应 用不能跨系统运行的原因。那针对这样的一个问题,我们刀砍干了什么事呢?既然每个应用都依赖于系统函数库,我为什么不把他的系统函数库跟他一起打包呢?这样来不就不愁找不到函数库了吗? 对, doctor 的解决方案就是将用户程序与系统调用的这个函数库一起打包,也就是说,比如说我来打包一个这个 myseco, 那你 myseco 需要自己的一些依赖,那同时你还需要一些系统函数库,比如五班图的函数库,那我就把五班图的函数库,然后你自己的依赖等等全打包成一个整体。那么我们的这个 myseco 应用 note gs 应用,你随便放到任何的 linux 操作系统上,只要你内核是内存内核,我在执行的时候,我调用我打包好的这个函数库,而这个函数库直接调用操作系统的什么内核,而内核直接访问硬件,这个调用式就完成了,他还需要去管系统应用是什么吗? 不需要,因为他自己就有。好,那通过这样的方式,我们的 docker 就解决了跨系统问题了。你可以认为 docker 打包好的程序包可以运行在任何一个 linux 内核的操作系统上。那我们来总结一下 doctor 如何解决我们之前所说的两个问题。第一,不同组件依赖的兼容性问题。这个问题太好办了,因为 doctor 可以把应用及其依赖还是库配置全打包,形成一个可以一致的镜像,对,这个东西叫镜像啊。而后呢,你拿着玩意随便放到哪里去,他都是有自己的一套东西的,你还需要管依赖吗? 不用了,并且为了防止不同应用依赖之间干扰,他还把它做了一个隔离,用杀香机制。那大家互相看不到,那还有什么干扰呢?那刀砍怎么解决开发自身生长环境有差异的问题呢?我操作系统都不一样,你怎么办?哎,这个也很好办,因为刀砍在打磨的过程中,他是包含了完整运行环, 不仅仅是应用和依赖,还包含了他所需要的系统函数库,甚至还有他的配置等等。因此呢,他只需要依赖于系统的 linux 内核,而不是上层的这个呃 的应用啊,因此呢,他就可以在任意的 linux 操作系统上运行。好,到这为止,我们就讲完了 doc 的工作原理,总结一下, doc 是什么呀? doc 就是一个用来快速交付应用运行应用的一个技术,那他怎么实现快速的交付和运行呢? 通过这么几点,一打包,我们将程序这些依赖运行环境,配置等各种各样各样的需要的东西全打包成一个定向,而后我就可以任意迁移,任意的去做一个交付了。 当然,为了避免干扰,我们还要利用砂箱机制形成隔离容器,这样呢,应与应用之间的运行互不干扰,各自是一个独立的整体。而且呀,这种完整的程序包, 他在运行时,因为已经包含了自己所需要的一切,所以他启动的时候呢,只需要一个简单的命令就可以启动了,移除的时候也是如此,非常的方便和快捷。那因此呢,我们再去做部署也好,运行也好,都非常快速。现在大家还没有体会,我们后边学习了刀口的命令就会发现了啊,那我们这节课就到这里了。
粉丝32.3万获赞337.8万


doctor 常用命令,一、查看 doctor 版本 doctor version 二、查看 doctor 详细信息 doctor info 三、搜索镜像 doctor search and drink 撕拉取下载镜像 doctor pollen jinx 五、查看本地镜像 doctor images grab an jinx 六、更改镜像 talk doctor tag and jinx d b in jinx 幺点二,三点四七、镜像仓库登录 doctor log 八、推送本地镜像到远程仓库 doctor 迫使 d b in jinx 幺点二,三点四 九、启动容器,使用 rent ti 前台启动一个容器 doctor rent ti engine spash 时端口映射 doctor run ti p 八千八百八十八 八比八十 and jinx bus 十一、查看日志 doctor logs f 容器 i d 容器名称 k o e 十二、数据持久化 doctor run t i p 八千八百八十八比八十比 etcetera host etcetera hosts in jinx bush 十三、查看当前正在运行的容器 doctors, 查看所有容器,包括已经退出的 doctor say 查看正在运行的容器,即显示出容器的 id。 darker plus two 查看所有容器的 id, 包括已经退出的 darker 十四、进入容器 duckerps tail 负一 ducker executi 查到运行的容器 id bus 十五、文 件拷贝,将本机的文件拷贝到容器拷贝,支持双向拷贝,也支持将容器的内部文件拷贝到速煮机。 doctor cp reamy m 查到运行的容器 id tmp 并 set, 也可直接执行容器命令 doctor exit, 查到运行的容器 idls tmp reamy bem 十六、删除容器和镜像,删除已经退出的容器 doctor persnay grab exit tilsan doctor rm 容器 id 容器 id 容器 id darker shape grab exit grab e 删除本机镜像,比如删除 pastory 或泰国为 none 的镜像。 ducker images grab none dunk remi 容器 id 容器 id 容器 id duck docker images grab and jinx 才有负一布加 you are 为默认镜像仓库。 doctor 他跟 jinx d b 跟 jinx。 第一时期构建镜像,使用 doctor bill 通过 doctor fire 制作镜像。注意最后的一个点表示使用当前目录 进行构建镜像。 doctor build t n ginse 第二,需要 doctor file 编写实力评论区留言发给你。

那你在多口里面怎么去查看日志呢?多口我是直接把它颜色的,就是把它阔笔到我这个服务器上,然后再去看,如果还是不方便说的话呢,就直接放到我本地上。那你怎么拿到那个日志 cp? 那个日志到本地看你在多口容器里面的日志,直接可以用 cp 命令用不了吧? 我之前还试过嘞,你在 doctor 里面的日志信息,你怎么直接 cp? 你怎么把它拿出来?我是这样的,就是 cp 命令吗?完成的命令是什么记得吗? 就是如果说从服务器上好像是 cp, 就是这个多可的一个 id, 然后还有他的路径,后面就是我那个本地服务器的一个路径就可以拉出来了。 啊?多个 cp, 那我少说了一个多口,不多很多 pp, 然后这个这个容器的容器壁纸,然后再放这个本地的壁纸。 cp 肯定不能直接用,因为你现在都已经在多口里面了,你肯定所有的多口命令都要以多口开口。

那要怎么去查看容器当中的运行的项目的日志呢?包课哦, not, 然后放 tf 后面少了一步就是包课 nos, 然后 tf 后面还有一个,你要一定要加容器 id 啊或是容器名啊,因为你查看的是这个容器里面的日志。

说一下你用过哪些刀口命令吧,当面是被问到这个问题,我们应该如何回答呢?我们可以按照命令加含义去回答,比如第一个刀口 e x e c 是进入容器内部。第二个刀口 images 是查看本机已安装的镜像文件。 第三, doctor pose 拉取镜像。第四, doctor run 是运行镜像为容器,一般呢会设备一些参数。第五, doctor ps 是查看正在运行的容器服务杠 a 是查看所有的容器,包含关闭的。 第六, doctor start, 容器 id 是启动容器, doctor stop 停止, doctor restart 是重启。第七, doctor cp 本地路径容器 id, 容器路径是从本地复制文件到容器,也可以用于将容器内部文件传到我们本地的 host。 第八, doctor logs 杠 tf 实时查看容器的内部的日志, doctor r m 容器删除。那你明白了吗?

