zoukankan      html  css  js  c++  java
  • 第四章 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/
    
  • 相关阅读:
    Java异常处理和设计
    一次qps测试实践
    Alternate Task UVA
    Just Another Problem UVA
    Lattice Point or Not UVA
    Play with Floor and Ceil UVA
    Exploring Pyramids UVALive
    Cheerleaders UVA
    Triangle Counting UVA
    Square Numbers UVA
  • 原文地址:https://www.cnblogs.com/jhno1/p/15261926.html
Copyright © 2011-2022 走看看