Docker技术快速精通指南
嘉宾介绍
韦玮,重庆韬翔网络科技有限公司董事长兼CEO,国内知名出版社特邀IT作家,极客学院金牌布道师,CSDN特邀IT专家,51CTO学院IT专家讲师。《知道日报》特约作者,国家工信部高级网络营销师,蜻蜓FM独家签约主播,国家专利发明人,多年IT从业经验。
直播实录
拒绝套路!Docker技术快速精通指南
各位朋友大家好,本期我们分享的主题是Docker技术快速精通指南,也是第一期Docker的分享,希望在本期分享中能够让各位朋友快速了解Docker技术与传统的虚拟化有何具体区别,并让各位朋友掌握Docker的一些基础的实战,包括镜像的管理、容器的管理、仓库的管理等,同时,让大家了解下一个云计算的热点,并为大家制定Docker专家养成的最佳路径。
具体来说,包括以下几个部分:
1、Docker与传统虚拟化究竟有何不同?
2、下一个云计算的热点
3、如何在短期内掌握Docker技术?
5、Docker专家养成最佳路径
好,那么接下来我们马上进入第一部分内容的分享:Docker与传统虚拟化究竟有何不同? Docker的本质实际上也是一种虚拟化技术。虚拟化技术目前大致分为两种:虚拟机技术、容器技术。显然,Docker属于后者,即容器级虚拟化技术。
那么,容器级虚拟化技术与传统的虚拟机技术到底有什么区别呢? 我们先从镜像的角度来看一下。
我们知道,传统的镜像,比如一个很普通的CentOS的镜像的大小相对来说会比较大,大概在几个G左右,其实,这个镜像里面包含两部分的内容: 1)Linux内核。 2)对应操作系统发行版等,比如,CentOS系统发行版等,这一部分是不包含Linux内核的,这一部分所包含的信息主要是一些驱动、管理软件等。
而在Docker中,会将这两部分的信息明显地分开,在镜像中,不会包含Linux内核,只包含对应操作系统发行版。在Docker中,Linux内核是共享的。 所以,我们会发现,Docker的镜像相对来说会非常小,普通的一个ubuntu镜像也就是几十M到100多M。
我们基于这些Docker的镜像,可以很轻松的创建出一个容器,容器就相当于传统虚拟化里面的虚拟机。
我们可以在这个容器中进行相应环境的部署,部署完成后,我们可以将部署后的环境再次封装为镜像,随后,我们可以将该镜像迁移到任何拥有Docker的机器中,而不用过多的去考虑Linux机器的具体内核等底层信息。
这样做,可以让虚拟化变得更轻,并且迁移性能等会更好。这也就是,为什么Docker可以更轻量级以及具有更好的平台迁移性的基本原因。
总结来说,容器技术与传统的虚拟机技术具有以下不同的地方:
1、Docker容器的部署和启动非常快(秒级),而传统虚拟机相对来说部署和启动会慢很多(分钟级)。
2、同等条件下,一个单机计算机所支持的容器数量比虚拟机数量要多得多,一般为十倍以上的差距。
3、Docker容器占硬盘较小,而传统虚拟机占硬盘较大。
相信大家经过刚才对Docker镜像与传统虚拟机镜像的分析之后,对于以上的3点内容会很好理解。接下来,我们为大家分享第二部分的内容:下一个云计算的热点。
随着大数据时代的到来,大量的数据就好比水,而有了这些水之后,就需要用一些器具承载这些水。
如果将这些数据按正常的方式存储,在以往数据量小的时候是很方便的,但当数据量不断增大的时候,再用传统的方式存储,则杯子的性价比会越来越低。
此时,应用虚拟化技术可以很好的解决这些问题,所以有了云计算的发展,也有了传统虚拟化的发展。
但当这些数据量仍持续大量增加的时候,传统虚拟化的方式性价比也会变得越来越低,此时,我们需要寻求一种性价比更高的云计算方案。
经过第一个知识点的分析,我们知道了Docker技术相对于传统虚拟化技术来说,会更加轻量。
换一种说法,利用Docker技术实现虚拟化的性价比要远远高于传统虚拟化方案的性价比。
自然,Docker技术将会成为下一个云计算的热点,并且根据目前的数据,越来越多的大型公司也逐步地在使用Docker。包括百度云在今年4月份的时候向开发者发布了内部邮件通知,将会全面的支持Docker。
如图,为Docker的受关注的指数图,我们可以看到,其关注数量大不断上升。并且上升幅度很大。
接下来,我们将为大家分享第三个知识点:如何在短期内掌握Docker技术。
要在短期内掌握Docker技术的一些基本应用,其实并不是一件难事。
Docker是一个由Go语言开发的开源项目,既然是开源项目,其实很多底层的东西官方都已经实现,如果要掌握Docker的基本应用,是不难的。
但是如果要深刻的掌握Docker,就必须要对Docker的底层架构等进行相应的研究,如何深入研究这一部分我们将在第五个知识点为大家详细分析。
如果是初学Docker,可能我们学习的思路会比较乱,在此,我们分享一个比较好的学习步骤与方案。
我们可以通过以下几个步骤在短期内快速掌握Docker:
1、对Docker的基本理念以及实践方式有初步的了解。(本次公开课)
2、通过实践了解Docker的基本应用,下一个知识点我们即将分享这一部分内容。(本次公开课,下一个知识点)
3、通过实战掌握Docker的网络配置的知识。(1天左右)
4、掌握Docker性能监控管理方面的知识。(1-2天左右)
5、掌握一些基本的Docker项目的实践,比如如何在Docker中构建SSH镜像、如何构建Python(PHP、MySQL、Java)技术栈等、如何在公有云中(比如阿里云)部署Docker等,Dockerfile实际应用等。(2天左右)
6、学会构建Docker集群。(2-3天左右)
按照步骤掌握这几部分知识之后,我们就可以对Docker有一个比较基础、全面的掌握了,并且也能够使用Docker进行一些实际的项目了。
接下来,我们进入第四个知识点的分享:通过实战掌握Docker镜像、容器、仓库的管理。
首先,笔者使用的操作系统版本是CentOS7 64位,我们需要安装Docker,只需要通过一个命令即可实现:yum -y install docker
随后,我们还需要启动Docker,我们可以通过以下指令启动:systemctl start docker
启动好Docker之后,我们可以从Docker的官方获取一些镜像来使用。我们可以通过以下指令实现镜像的获取:docker pull 镜像所在仓库:版本号
比如,我们可以通过docker pull ubuntu:16.10获取官方的版本号为16.10的ubuntu镜像。
当然我们也可以pull其他镜像。有了该镜像之后,我们就可以利用该镜像轻松地创建出容器。
在此,我们需要知道,镜像是只读不可写的,这也是镜像的一种保护机制。如果要改变镜像,可以按这种方式来:镜像–》创建成容器–》修改内容–》封装成新镜像
当然,我们也可以直接利用Dockerfile来更新镜像。我们可以使用以下指令来查看本机有哪些已经下载的镜像:docker images
有了镜像之后,我们可以利用这些已经在本地的镜像来创建容器。
接下来我们将学习容器的管理。刚才我们已经提到,容器就相当于传统虚拟化里面的虚拟机。同一个镜像可以创建多个容器,每一个容器都是一个相对独立的环境,容器之间互相隔离、互不影响。
我们可以使用“docker create 参数 镜像:版本号”来创建对应的容器。比如我们可以使用: docker create -ti ubuntu:16.10来创建一个基于ubuntu:16.10镜像的容器。
那么,我们如何新建并启动一个容器呢?我们可以通过“docker run 参数 镜像 /bin/bash” 来实现创建并启动一个容器。比如可以通过:docker run -ti ubuntu:16.10 /bin/bash来创建并随之直接启动一个基于ubuntu镜像的容器。
如果要查看当前的机器上有哪些容器,我们则可以使用以下命令实现:docker ps -a
其中-a为参数,表示展示所有本机上的容器信息,包括已启动的、未启动的等等。通过这个参数的变化可以筛选出我们想要查找的容器信息出来。
假如,我们想进入某个容器,我们需要用到容器依附的知识。我们首先可以通过“docker ps”等指令查看出要找的容器。随后,记录容器id的前几位。(一般前4位即可)
随后,通过“docker attach 容器id”依附到对应容器中。比如,我们可以使用:docker attach ec7d来实现进入id号为ec7d的容器。id号可以通过docker ps查找。
随后可以在该容器中进行任何部署,该部署不会影响CentOS主机,也不会影响其他容器。比如我们可以在容器中安装Python,部署大数据环境等。
部署好后,容器中拥有一套对应环境,而在外层主机以及其他容器中,不会拥有对应环境。因为他们是相对隔离的。
部署好后,假如现在我们需要对这台容器做数据迁移,可以将该容器封装为镜像,直接迁移到其他机器中即可。不需要考虑Linux内核、版本等信息,只需要对方机器有Docker即可。迁移起来也会非常方便。并且由于该镜像不包含Linux内核,也很小,所以迁移、部署起来会非常轻量。
如果我们想要停止某个容器,同样,首先可以通过“docker ps”等指令查看出要找的容器,然后使用:docker stop ec7d来实现停止id号为ec7d的容器。
如果要重新启动的话,可以使用以下指令实现:docker start ec7d;
假如,我们不想用某个容器了,我们可以将该容器删除,删除容器可以用“docker rm 容器id”实现。
比如我们可以通过以下指令删除刚才所创建的容器:docker rm ec7d 。
接下来,我们将为大家分享Docker仓库管理的知识。
简单来说,仓库就是存放镜像的地方。我们可以在https://hub.docker.com/中构建属于自己的仓库。
也可以使用“docker push 本地镜像”实现将本地的镜像上传到Docker仓库中。
也可以使用“docker push 本地镜像”实现将本地的镜像上传到Docker仓库中。也可以使用“docker search 关键词”在仓库中搜索对应的镜像。
关于仓库的管理,相对来说比较简单,在此由于时间关系,我们就不过多提及。接下来我们将为大家分享第五个知识点: Docker专家养成最佳路径。
我们已经学习了Docker的基础知识。但是,要学会Docker在实践中的应用,还需要学习Docker的网络配置的知识、Docker性能监控管理方面的知识、Docker基本项目的实践、Docker集群的构建等。
上面提到的这些都是基本的部分,如果要深入研究Docker,还需要进行一些提升。那么,我们如何才能够比较系统地研究Docker?有什么比较好的路线可以成为Docker方面的专家呢?
方向决定能否实现目标,坚持决定能够实现到哪个阶段。所以方向非常重要。在此,我们为大家分享一些较好的深入研究Docker的步骤与路线:
1)Docker架构剖析
2)镜像技术底层组织结构分析
3)Docker仓库底层架构分析
4)容器技术底层原理分析
5)Docker API接口高级实战应用
6)卷插件及API接口实战
7)Docker高级网络配置解决方案
8)Docker集群管理实践
9)Docker的测试技术
10)Libcontainer技术实践
11)Docker安全策略实践
12)Docker二次开发
13)Docker源码深度剖析
按照这个路线学习下来,会让你比较清晰、系统地掌握Docker,这一个路线相对来说也是一个比较好的学习研究路线。
好,本次的分享内容我们就分享到这里,这一期的内容是第一次Docker的内容,为了方便更多朋友学习,所以相对来说基础一些,如果各位对刚才体系中的某一部分内容感兴趣,也可以互相沟通学习。
希望通过这一期的内容,能够让大家对Docker的架构以及Docker的学习思路有一个清晰的了解,并能够通过实战实现Docker的虚拟化,包括镜像的管理、容器的管理以及仓库的管理等。
互动筛选
Q1:刚才提到容器迁移,也是基于Docker的V2V,Docker 有没有P2V或者V2P的相关技术?P:物理机,V虚拟机
A1:其实在Docker中,需要依靠一个基本的主机系统,所以Docker更多的关注上层,而对底层没有过多影响。
Q2:容器的日志收集怎么做的?
A2:有两种方案,1、将日志直接挂载到主机磁盘,2、运行一个容器,这个容器专门做日志收集。
Q3:如何监控容器性能?
A3:监控方案有很多,总的来说,两种:1、利用一些工具,比如cAdvisor等实现。2、自己写一些运维程序,比如利用Python写一些程序进行监控。前者用得多。
Q4:容器之间的应用如何通信 ?
A4:可以在容器之间开辟一个隧道进行通信,具体的实践部分我的一套录播课程中有,也可以直接网上找一下隧道创建的知识实现。
Q5:默认运行一个ubuntu容器,需要多少内存 ?
A5:Docker中底层内存是共享的,具体需要多少内存需要看容器内运行的东西,只需要保证多个容器的内存使用总和小于本地内存即可。
Q6:Docker是否合适支持db?
A6:Docker支持DB,因为Docker中容器中具备一套独立的操作系统环境,所以无论是数据库还是其他的,只要操作系统支持,Docker就支持。
Q7:docker可以有几个bridge?
A7:docker会默认创建一个名为docker0的网桥,也可以自定义网桥实现。
Q8:对于Oracle这种需要修改内核参数的,docker能支持么?
A8:可以使用Oracle XE实现。
Q9:docker用go开发的,二次开发有其它语言可选吗?
A9:如果是修改一些内容,那是需要用Go语言,如果独立开发一些模块,完全可以用其他语言,接口的方式实现就行。
原文:http://www.dockerinfo.net/2443.html