• 第四章 Docker入门


    一、背景

    为了完成那些不愉快或者平庸的任务,你也会喜欢只做必需之事。这可能是因为你同样喜欢使用一个简单易用的工具,来解决那些复杂或费时的工作。
    
    假设你想尝试一款新的Linux 软件,但是担心运行起来的是恶意代码。为了保护你的机器,在 Docker 中运行该软件是很好的第一步。因为Docker 可以帮助大多数普遍软件用户利用好强大的安全工具。
    
    如果你是一名系统管理员,将Docker作为软件管理工具集的基础,将节省你的时间,让你专注于高价值的事情,因为 Docker可以最大限度地减少你花在琐碎工作上的时间。
    如果你编写软件,通过Docker 发布,你的用户会更容易安装并运行它。在 Docker 封装的开发环境中编写软件,将节省配置或共享环境的时间,因为从软件的角度来看,每个环境都是一样的。
    
    假设你拥有或管理大型系统或数据中心。使用Docker 来创建build,测试和部署管道会变得很简单,因为通过这样一个管道可以应用到其他任何软件。
    
    2013年3月推出的 Docker,可以和操作系统协作来打包、分发和运行软件。你可以把Docker作为软件分发供应商,用来节省你的时间,让你专注于高价值的事情。你可以使用Docker构建网络应用,如 Web服务器、数据库和邮件服务器,也可以构建终端应用程序,比如文本编辑器、编译器、网络分析工具和脚本;在某些情况下,它甚至可用来运行GUI程序,如网页浏览器和生产力类的软件。
    
    Linux Docker是一款Linux软件,但可以很好地运行在大多数操作系统上。
    
    Docker不是一种编程语言,并且也不是构建软件的框架。Docker 是一个工具,可以帮助解决如安装、拆卸、升级、分发、信任和管理软件等常见问题。它是开源的Linux软件,这意味着任何人都可以为之做出贡献,Docker因此已在诸多方面受益匪浅。公司赞助开源项目的开发也很常见。在这种意义上,Docker公司(Inc.)是主赞助商。你可以在下面网址找到更多关于Docker 公司的信息: https://docker.com/company/。
    

    二、Docker概述

    Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
    

    三、Docker基本含义

    Docker包括一个命令行程序、一个后台守护进程,以及一组远程服务。它解决了常见的软件问题,并简化了安装、运行、发布和删除软件。这一切能够实现是通过使用一项UNIX技术,称为容器。
    

    1.什么是容器?

    从历史上看,UNIX风格的操作系统都使用jail 这个术语来形容一个修改过的运行时环境,以防止该程序访问受保护的资源。自2005年以来,Sun的 Solaris 10和Solaris 容器发布后,容器已经成为这样一个运行环境的首选术语。而我们的目标,已经从防止对受保护资源的访问,扩展到隔离所有的资源,除非明确允许。
    
    使用容器已经是很长一段时间的最佳做法。但手动创建容器,仍然具有挑战性,而且很容易出错。错误配置的容器却让他人产生安全的错觉。这个问题直到Docker的出现终于得到解决。任何使用Docker运行的软件其实是在一个容器内运行。Docker使用现有的容器引擎,根据最佳实践提供一致的Docker构建方案。这给大家带来了触手可及且更强的安全性。
    
    有了Docker,用户以更低的成本获得容器。随着Docker和容器引擎改进,你获得最新和最好用的“jail”功能。不用再紧跟着迅速发展且高技术性的构建强大应用jail 的世界了,相反你只要让Docker帮你处理这些事情就好。这将节省大量的时间和金钱,并带来心灵的平静。
    

    2.Docker在开发和运维中的优势

    对于开发和运维人员来说,最梦寐以求的效果可能就是一次创建和配置,之后可以在任意地方、任意时间让应用正常运行,而Docker恰恰可以实现这一中级目标。具体来说,在开发和运维过程中,Docker具有以下几个方面的优势:
    
    1.更快的交付和部署:
    	使用Docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码。只要是开发测试过的代码,就可以确保在生产环境无缝运行。Docker可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
    
    2.更高效的利用资源:
    	运行Docker容器不需要额外的虚拟化管理程序的支持,Docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker的性能要提高1 ~ 2个数量级。
    
    3.更轻松的迁移和扩展:
    	Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑等等,同时支持主流的操作系统发行版本。这种兼容性能让用户可以在不同的平台之间轻松的迁移应用。
    
    4.更轻松的管理和更新:
    	使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理。
    

    4. Docker与虚拟机的比较

    作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机的方式相比具有如下显著优势:
    
    Docker容器启动很快,启动和停止可以实现秒级,相比传统的虚拟机方式(分钟级)要快速很多。
    
    Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
    
    Docker通过类似git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新。
    
    Docker通过Dockerfile支持灵活的自动化创建和部署机制,可以提高工作效率,并标准化流程。
    
    特性 容器 虚拟机
    启动速度 秒级 分钟级
    性能 接近原生 较好
    内存 MB级 GB级
    硬盘适应 MB级 GB级
    运行密度 单台主机支持上千个 单台主机支持几个
    隔离性 安全隔离 完全隔离
    迁移 优秀 一般

    四、 Docker与虚拟化

    在没有Docker 的时代,商家通常使用硬件虚拟化(也称为虚拟机),以提供隔离。虚拟机提供虚拟的硬件,可安装一个操作系统和其他程序。它们需要很长的时间(通常以分钟计)来创建,也需要显著的资源开销,因为它们除了要执行你需要的软件,还得运行整个操作系统的副本。
    
    不同于虚拟机,Docker容器不使用硬件虚拟化。运行在Docker容器中的程序接口和主机的 Linux内核直接打交道。因为容器中运行的程序和计算机的操作系统之间没有额外的中间层,没有资源被冗余软件的运行或虚拟硬件的模拟而浪费掉。这是一个很重要的区别。Docker不是一个虚拟化技术。相反,它可以帮助使用已经内置到操作系统中的容器技术。
    
    Docker以及其他容器技术,都属于操作系统虚拟化范畴,操作系统细腻化最大的特点就是不需要额外的supervisor支持。Docker虚拟化方式之所以有众多优势,跟操作系统虚拟化技术自身的设计和实现分不开。
    

    传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器时在操作系统层面实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。
    

    五、 Docker概念

    Docker中有三个核心概念:镜像、容器和仓库。因此,准确把握这三大概念对于掌握Docker技术尤为重要。
    
    1.镜像(Image)
    Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    
    2.容器(Container)
    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    
    3.仓库(Repository)
    用来保存镜像的仓库。当我们构建好自己的镜像之后,需要存放在仓库中,当我们需要启动一个镜像时,可以在仓库中下载下来。
    

    六、Docker安装系统

    Docker引擎是使用Docker容器的核心组件,可以在主流的操作系统和云平台上使用,包括Linux操作系统、MacOSS和Windows系统上。用户可以访问Docker官网(https://www.docker.com/get-started)去获取Docker安装包。
    

    七、Docker总结

    #1.操作系统的趋势
    1、系统越来越多,也越来越复杂
    2、系统之间的兼容性得不到保证
    
    #2.容器带来的优势
    1、解决了一个相对隔离的环境(容器与容器,容器与主机之间互不影响)
    2、解决了系统不兼容的问题(重点)
    3、容器解决了稳定部署的问题
    
    #3.容器软件:docker
    1、基于golang语言开发
    2、Linux 基金会
    	1)增加知名度
    	2)全世界的开发者共同维护软件的生态系统
    
    #4.docker与虚拟机的区别
      - 虚拟机之间的系统级别的隔离
      - docker容器之间的进程级别的隔离
    
    #5.docker仓库:
    https://hub.docker.com/
    
  • 相关阅读:
    路由配置系统(URLconf)
    Django常见命令
    MVC框架和MTV框架
    Django基础
    服务器程序和应用程序
    自定义web框架
    HTTP协议对收发消息的格式要求
    web框架的本质
    python国内镜像源
    Scrapy框架安装失败解决办法
  • 原文地址:https://www.cnblogs.com/jhno1/p/15261926.html
Copyright © 2020-2023  润新知