学习任何一个开源新技术,首先问自己几个问题:
1. 为什要学习它?
2. 学习它需要了解哪些相关知识点?
3. 如何快速学习?
4. 该技术的使用场景是什么?
- 为什要学习docker?
docker是轻量级虚拟化技术,docker使linux容器技术的应用更加简单和标准化
docker容器启动时毫秒级的
docker将开发和运维职责分清
docker解决了依赖地狱问题
docker支持几乎所有操作系统
docker有着飞速发展的生态圈
很多IT巨头逐渐加入和支持 - 学习它需要了解哪些相关知识点?
云计算概念相关(restapi, 微服务,OpenStack)
Linux 系统管理(软件包管理,用户管理,进程管理等)
Linux 内核相关(Cgroup, namespace 等)
Linux 文件系统和存储相关(AUFS,BRFS,devicemapper 等)
Linux 网络(网桥,veth,iptables等)
Linux安全相关(Appmor,Selinux 等)
Linux进程管理(Supervisord,Systemd etc)
Linux容器技术(LXC等)
开发语言(Python, GO,Shell 等)
根据Docker布道师Jerome Petazzoni的说法,Docker约等于LXC+AUFS(之前只支持ubuntu时)。
其中LXC负责资源管理,AUFS负责镜像管理;
而LXC又包括cgroup、namespace、chroot等组件,并通过cgroup进行资源管理。
所以只从资源管理这条线来看的话,Docker、LXC、CGroup三者的关系是:
cgroup在最底层落实资源管理
LXC在cgroup上封装了一层
Docker又在LXC封装了一层。
Docker技术及其周围的生态一直在发展和演变,要系统的学习这门技术,
一. 第一阶段,基础入门
1. 容器和VM的
2. docker的基本概念和基本组件(Docker daemon, Docker client, registry镜像库, image镜像,container容器),<img src="https://i-blog.csdnimg.cn/blog_migrate/38d4bef17f0cde8097da8aff2b121827.png" data-rawwidth="899" data-rawheight="477" class="origin_image zh-lightbox-thumb" width="899" data-original="https://pic3.zhimg.com/v2-cf1ebe9e0012639f42107eda57170d56_r.png">
3. Docker命令,对docker以及容器有了解。(比如拉取一个镜像,并运行)。
4. 将应用Docker化。
二. docker进阶
1. 了解docker生态与docker应用场景
DEVOPS
服务注册发现
服务/容器日志收集处理;监控告警
<img src="https://i-blog.csdnimg.cn/blog_migrate/5d32fae1d23cdcaadeb2ae618a0b131a.jpeg" data-rawwidth="1600" data-rawheight="900" class="origin_image zh-lightbox-thumb" width="1600" data-original="https://pic2.zhimg.com/v2-2170e50d1f2b41392cb74dab90092a8d_r.jpg">
2. Docker 网络/存储
3. docker的编排/调度,业务的弹性伸缩
swarm+compose/swarmkit
mesos+marathon/DCOS
K8S
4. 业务微服务化
三. docker深入
1. docker底层技术实现(cgroup, namespace, unionFS, networking, ...)
2. docker engine源码分析
3. docker安全 ...
Libcontainer unionfs