在之前的文章和问答中,我也说过学习技术的一般方法,学习技术不光是要指出关于什么,而是教会如何去做,不仅仅是关于你应该具备哪些技术技能,跟重要的是你应该如何学习它们。本文中,虫虫和大家一起讨论下下如何学习Docker以及学习Docker学习中应该注重那些问题。
你知道什么是虚拟化吗?
最近几年入坑的很多开发人员和运维工程师应该都听说过虚拟化,虚拟化和云都是宠儿和新的流行词,但是关于虚拟化的实质和实际内容可能真正了解的人也不多。
虚拟化和分布式云计算是一项革命性技术,在目前乃至未来很长一段时间内都会是热点和趋势。懂得虚拟化,也能让技术人员更容易入职,更容易拿到高工资。
了解虚拟化和容器化之间的区别,如何用容器解决虚拟化问题,是一个是开始Docker之旅的最好问题,而不是怎么在"windows安装docker?","我不懂Linux,我怎么学习docker?",这样的问题。
从简单命令行开始
这是对任何人学习docker技术的最佳路径。无论你是学习Docker还是其他任何技术或技能(比如git等也类似)。
学习CLI很重要。 Docker有很多很好的GUI,但是如果你想掌握一项技术,最好的方法是使用它的基本命令,从这儿了解实质,原理和进行问题排查。
从简单的命令开始,这是这些工具(协议)的实质,也能更能帮助你了解原理和本质,更容易排查问题。
学习Docker请先忘记Kubernetes,Docker Swarm,还有像Docker Compose这样的工具。换句话说,第一步请先简单化、先学会走了,了解本质,然后其他UI工具、其他界面基本都是对这些的打包(了解本质了,你也可以自己写这样的工具,或者调用他们API二次开发)。
首先Pull和Push像hello world镜像这样的简单容器。并在此基础上对其做些一些更改并提交更改,标记它然后push。
如果你的学习方法是从部署和配置和使用K8s集群开始的,那么你就需要怎么解决头大的问题了!
Docker网络
容器和编排系统中最容易迷惑的部分可能是网络。 Docker使用与主机操作系统固有的相同网络基础结构。你可以在localhost上运行Docker容器,而无需关心SDN等问题。
你可以进一步了解如何创建Docker集群并使用编排系统,这需要先学习一些网络知识。
Docker可以使用其默认网络
· 非网络模式
· 主机网络模式
· 桥接模式
· docker_gwbridge 网络
它还可以使用第三方软件定义和支持多主机网络,如:
· 桥接网络
· docker_gwbridge网络
· Overlay 网络
· Flannel
· Weave
· Open vSwitch
· Calico 网络
· Pipework
· OpenVPN
等等
了解容器网络可能需要一些时间,但这是很值得花费时间的。
文件系统
Docker支持许多文件系统,并且每个文件系统都有其优缺点。那么我们为什么要在devicemapper或overlay2选择aufs呢?
什么是顶层可写层?镜像和容器的区别是什么?
你知道什么是CoW策略吗?
与Docker网络一样,了解如何在Docker镜像和容器中存储和管理数据是非常重要的基础,需要首先了解和熟悉的概念。
Docker,Compose和Machine
Docker生态系统非常庞大,而且每天还都在不断更新,壮大。学习Docker Compose和Docker Machine将减轻你的负担,并给你提供更多使用Docker和优化交付和部署pipelines的能力。
首先学习Docker基础知识,然后转到Docker Compose和Docker Machine。
容器编排
掌握基本的Docker概念和工具后,我们开始关注业务流程。
没有编排的Docker不是可扩展的解决方案,而且这样的Dockery也没有存在的意义。容器编排将允许你从事务(容器)转移到抽象(服务)。它允许你简化和优化部署。
如果你刚入步,你可以使用Docker Swarm,然后转移到更复杂的系统,如K8S。
尝试着基于Docker做开发
尝试用Docker API开发东西。
使用Docker对并行计算集群进行原型设计
使用Docker对无服务系统进行原型设计
了解如何使用Docker API,编写orchestrator原型或自我修复系统。
要不耻下问
我知道初学者可能会有一些问题,可能会问一些很出格的问题,很多东西在询问之前其实可以通过搜索引擎(百度、谷歌)下都可以直接解决。通过搜索引擎解决自己的大部分问题,其他可以通过在线论坛,stackoverflow,QQ群等询问。
如果你在没有任何帮助的情况下找到答案更好,这比在论坛、QQ群中提出你遇到没人解答过第一个问题很有帮助,但如果你需要,请不要羞于询问。