• docker入门实战1


    一. docker介绍

    个人主机时代比CPU主频高低和内存大小,云计算时代虚拟化技术基石。

    虚拟化可以通过硬件模拟实现,也可以通过操作系统实现。

    充分利用操作系统本身的机制和特性,实现轻量级的虚拟化,docker是佼佼者。

    1.1 什么是docker

    https://github.com/docker/docker

    "Build,Ship,and Run Any App,Anywhere"

    通过对应用组件的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)等生命周期的管理,达到应用组件级别的”一次封装,到处运行“。这里的应用组件,可以是一个Web应用,也可以是一套数据库服务,甚至是一个操作系统或编译器。

    Linux容器技术:

    docker引擎的基础是Linux容器(Linux containers,LXC)技术。

    容器有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化和系统调用替换中的复杂性。

    从Linux容器到docker:

    在LXC技术基础上,docker进一步优化了容器的使用体验。docker提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以简明地管理和使用容器。用户操作docker容器就像操作一个轻量级的虚拟机那样简单。

    可以将docker容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,容器自身对资源的需求也十分有限,远远低于虚拟机。

    1.2 为什么使用docker

    docker容器虚拟化的好处:

    服务器迁移时,往往需要重新部署和调试,这些琐碎无趣的工作极大地降低了工作效率。

    而docker提供了一种更为聪明的方式,通过容器来打包应用,意味着迁移只需要在新的服务器上启动需要的容器就可以了。这将节约大量时间,并降低部署过程出现问题的风险。

    docker在开发和运维中的优势:

    1)更快速地交付和部署。使用docker,开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成后,测试和运维人员可以直接使用相同环境来部署代码。

    2)更高效的资源利用。docker容器的运行不需要额外的虚拟化管理程序(virtual machine manager,VMM,以及hypervisor)支持,它是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。

    3)更轻松的迁移和扩展。docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。用户可以在不同平台之间轻松迁移应用。

    4)更简单的更新管理。使用dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。并且所有修改都以增量的方式进行分发和更新,从而实现自动化并且高效的容器管理。

    docker与虚拟机比较:

    作为一种轻量级的虚拟化方式,docker在运行应用上跟传统的虚拟机方式相比具有显著优势:

    1)docker容器很快,启动和停止可以在秒级实现,比传统虚拟机方式快得多。。

    2)docker容器对系统资源需求很少,一台主机上可以同时运行数千个docker容器。

    3)docker通过类似git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。

    4)docker通过dockfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。

    docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N个不同的应用就要启动N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而docker只需要启动N个隔离的容器,并将应用放到容器内即可。

    特性 容器 虚拟机
    启动速度 秒级 分钟级
    硬盘使用 一般为MB 一般为GB
    性能 接近原生 弱于
    系统支持量 单机支持上千个容器 一般几十个
    隔离性 安全隔离 完全隔离

    虚拟机的隔离性比容器隔离性较好。

    1.3 虚拟化与docker

    在计算机技术中,虚拟化(virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的组态更好的方式来应用这些资源。

    虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。

    基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化。前者一般指的是一些模拟设备或wine这样的软件。后者又可以细分为如下几个子类:

    1)完全虚拟化。虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。

    2)硬件辅助虚拟化。利用硬件(主要是CPU)辅助支持处理敏感指令来实现完全虚拟化的功能,客户操作系统无需修改。

    3)部分虚拟化。只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改,现在有些虚拟化技术的早期版本仅支持部分虚拟化。

    4)超虚拟化。部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改。

    5)操作系统级虚拟化。内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器相关技术即在这个范畴。

    传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。

    docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

    传统的虚拟机在硬件层和宿主操作系统上有一层虚拟机管理系统,在此之上是各个虚拟机的操作系统,然后是运行时环境和应用程序。

    docker容器是在硬件层和宿主操作系统上有一层docker容器支持,在此之上是每个应用的运行时环境和应用程序。

  • 相关阅读:
    HashMap,Hash优化与高效散列
    Dubbo Overview
    模板引擎 引自 《PHP核心技术与最佳实践》
    使用 phpStorm 开发
    使用 Zend_Studio 开发
    Symfony 2.0 认识Request, Response, Session, Cookie
    Symfony 建立一个Bundle
    Symfony 从路由认识它
    信鸽推送.net 服务端代码
    c#输出json,其中包含子json (可以含 无限级 子json)的方法思路
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/12623886.html
Copyright © 2020-2023  润新知