Docker学习
以我自己的经历,告诉大家这个东西有点儿不太好理解,想要理解透彻,那么我就需要知道一些背景知识来帮助我们理解
Docker的思想来自于集装箱,集装箱解决了什么问题?
在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
docker的logo
用Docker的logo来解释,鲸鱼和集装箱
那个大鲸鱼(或者是货轮)就是操作系统
把要交付的应用程序看成是各种货物,原本要将各种各样形状、尺寸不同的货物放到大鲸鱼上,你得为每件货物考虑怎么安放(就是应用程序配套的环境),还得考虑货物和货物是否能叠起来(应用程序依赖的环境是否会冲突)。
现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。
Docker就是这整套机制啦
Docker是什么?
Docker 是一种应用容器化交付的技术。从操作系统到依赖库乱七八糟东西全给你“静态编译”到一起变成一个 super fat binary,就是一个容器。
学习任何一个开源新技术,首先问自己几个问题:
- 为什要学习它?
- 学习它需要了解哪些相关知识点?
- 如何快速学习?
- 该技术的使用场景是什么?
拿我个人的学习经验来举例(本人之前比较了解OpenStack)
1.为什要学习docker?
回答:
docker是轻量级虚拟化技术,docker使linux容器技术的应用更加简单和标准化
docker的速度很快,容器启动时毫秒级的
docker将开发和运维职责分清docker解决了依赖地狱问题
docker支持几乎所有操作系统
docker有着飞速发展的生态圈很多IT巨头逐渐加入和支持
2.学习它需要了解哪些相关知识点?
回答:
云计算概念相关(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 等)
3.如何快速学习?
回答:
个人体会最好有一个实际的需求或项目来边实践边学习,入门可以参考(第一本docker书)写的不错,非常适合入门。除此之外,阅读牛人的blog比如官方blog http://blog.docker.com/最后,参与社区互动也是很好的学习方式。
4.该技术的使用场景是什么?
回答:
docker非常适用于dev/test CI/CD 场景,用完就扔。还有就是PasS了。
为什么要使用 Docker?
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
(1)更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
(2)更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
(3)一致的运行环境
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。
(4)持续交付和部署
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
而且使用 Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
(5)更轻松的迁移
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
(6)更轻松的维护和扩展
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
docker学习网站:
阿里中间件团队博客:http://jm.taobao.org/2016/05/12/introduction-to-docker/
更高效的利用系统资源,更快速的启动时间,一致的运行环境,
持续交付和部署,更轻松的迁移,更轻松的维护和扩展
http://blog.csdn.net/xyz_dream/article/details/53081687
http://www.jianshu.com/p/a75ddf6915e0
http://www.jianshu.com/p/4b5637fd53e5
http://www.cnblogs.com/52fhy/p/6009727.html
http://www.cnblogs.com/vikings-blog/p/3958091.html
https://yeasy.gitbooks.io/docker_practice/content/basic_concept/image.html