美文网首页
Docker学习

Docker学习

作者: 吧啦啦小汤圆 | 来源:发表于2016-10-25 14:14 被阅读171次

    以我自己的经历,告诉大家这个东西有点儿不太好理解,想要理解透彻,那么我就需要知道一些背景知识来帮助我们理解

    Docker的思想来自于集装箱,集装箱解决了什么问题?
    在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。
    docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。


    docker的logo

    用Docker的logo来解释,鲸鱼和集装箱
    那个大鲸鱼(或者是货轮)就是操作系统
    把要交付的应用程序看成是各种货物,原本要将各种各样形状、尺寸不同的货物放到大鲸鱼上,你得为每件货物考虑怎么安放(就是应用程序配套的环境),还得考虑货物和货物是否能叠起来(应用程序依赖的环境是否会冲突)。
    现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。
    Docker就是这整套机制啦

    Docker是什么?

    Docker 是一种应用容器化交付的技术。从操作系统到依赖库乱七八糟东西全给你“静态编译”到一起变成一个 super fat binary,就是一个容器。

    学习任何一个开源新技术,首先问自己几个问题:

    1. 为什要学习它?
    2. 学习它需要了解哪些相关知识点?
    3. 如何快速学习?
    4. 该技术的使用场景是什么?
      拿我个人的学习经验来举例(本人之前比较了解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

    https://www.ibm.com/developerworks/community/blogs/132cfa78-44b0-4376-85d0-d3096cd30d3f/entry/%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F_%E6%AF%8F%E5%A4%A95%E5%88%86%E9%92%9F%E7%8E%A9%E8%BD%AC%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF_12?lang=en

    http://www.cnblogs.com/vikings-blog/p/3958091.html

    https://yeasy.gitbooks.io/docker_practice/content/basic_concept/image.html

    相关文章

      网友评论

          本文标题:Docker学习

          本文链接:https://www.haomeiwen.com/subject/hulluttx.html