• Docker简介


    我们通过四W(what,when, why, how)原则去学习一下docker

    What

    什么是docker?

    docker是一种虚拟化技术,太过专业的术语这里不聊,反而容易乱。可以将其比作类似vmware的虚拟软件,一个docker容器里面可以包含一套完整的软件运行环境。

    When

    什么时候需要使用docker技术,或者说docker技术的应用场景有哪些?

    场景一:节省项目环境部署时间

    1.单项目打包

    每次部署项目到测试、生产等环境,都要部署一大堆依赖的软件、工具,而且部署期间出现问题几率很大,不经意就花费了很长时间。
    Docker主要理念就是环境打包部署,可在任意Docker Engine运行。前期我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建多次部署,一劳永逸。

    2.整套项目打包

    公司有一项这样的业务:有一个产品可以整套部署到客户那里,以往都是派一名实施工程师到客户那部署。如果用了Docker,我们可以前期将这套项目封装打包起来,实现一键部署,分分钟钟搞定,就不需要再派人过去了。比如官方的Docker Compose编排工具。

    3.新开源技术试用

    有时,我们想调研一些开源项目,我们可以直接从公共镜像仓库pull项目官方做好镜像启动容器即可。

    场景二:环境一致性

    开发工程师在Windows系统上开发项目,测试、生产环境操作系统都是Linux系统,这就产生了环境不一致的情况:项目在开发电脑本地运行没问题,到了测试或生产环境就运行不起来,解决这问题最好方式就是这三处环境保持一致。软件版本、操作系统、物理机、云主机......试想下,能做到吗?
    Docker将项目环境打包成镜像,可以在任何Docker Engine上浪。此时Docker就是我们这些项目的基石,Docker可移植性,保持运行状态一致性,可想而知,是否更容易解决问题呢?

    场景三:持续集成

    一个项目版本快速迭代的测试场景,需要一个合理的CI(持续集成)/CD(持续部署)环境支撑。CI/CD是一个周期性自动化项目测试流程,包括构建、部署、测试、发布等工作,很少需要人工干预。
    项目测试流程大致如下图:
    Docker结合Jenkins构建持续集成环境大致如下图:
     
    Docker在上面这个图的作用是项目镜像构建和快速部署,打通测试环境与生产环境,高度保持多个环境之间一致性。

    场景四:微服务

    微服务是近几年来IT圈内谈论比较多的一个名词,意义也很简单:尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统。
    Docker的容器设计原则:一个容器一个服务,容器之间相互隔离,不妨试想一下,如果容器作为这些独立服务的部署单元,是不是有点恰到好处呢?

    场景五:弹性伸缩

    说到弹性伸缩,通常是集群模式下存在。像AWS AutoScaling,可以自定义资源阈值,SLB自动添加EC2云主机,应对业务访问量突发情况。
    当适用Docker技术以后,这种弹性伸缩的单元就是云主机之上的容器了。
    容器集群化管理已经有成熟的解决方案,比如:官方的Swarm,谷歌的K8S
    由于Docker容器快速启动特性,可以很快速的启动几十个、上百个容器来提供更多并发和资源利用率(如果宿主机资源不够,还需要加主机到集群中)。

    总结:简化部署流程,提高生产力!

    Why

    为什么使用docker?

    我们来比较一下虚拟机和docker容器的架构

    kvm虚拟机

     docker容器

     通过上面两图的比较,可以发行架构上有两个区别:

    1、引擎不一样,一个是hypervisor引擎,一个是docker daemon引擎

    2、虚拟机在hypervisor之上,需要一个guest os(客户端操作系统);而docker没有

    docker容器与虚拟机的比较

    既然架构上有区别了,那么具体在性能等一些方面,肯定会有所不同,这也是我们why使用docker的原因。

    时间上:docker秒级启动,kvm虚拟机分钟级别(多了一层guest os,肯定会拖延启动的时间)

    空间上:docker资源占用小,部署起来比虚拟机更快速(docker镜像通常以M为单位,而虚拟机通常以G为单位)

    性能上:docker共享宿主机内核,系统级虚拟化,占用资源少,容器性能接近物理机;虚拟机需要hypervisor支持来虚拟化一些设备,而且有完整的GuestOs,虚拟化开销大,故而性能没有容器的好

    安全上:docker只是进程级的隔离(每个容器是一个进程,进程之间是共享宿主机器内核的),所以 隔离性 和  稳定性 不如虚拟机

    使用上:docker容器可运行在主流的任何linux发行版上(因为容器共享宿主机内核,不用考虑pu是否支持虚拟化技术);而kvm是基于硬件的完全虚拟化,需要硬件的支持,如果cpu不支持虚拟化技术的话,虚拟机就无法正确安装

    How

    怎么使用docker,这是最费脑子的环节了,需要记忆的东西比较多,拆分开来一一介绍,这里只做一些基本概念的介绍

    基本概念 

    仓库(Registry)

    集中存放镜像文件的场所。
    仓库分:公有仓库 和私有仓库。
    仓库服务器上可以放多个仓库,每个仓库可以包含多个镜像。

    镜像(Image)

    可以理解成一个压缩包
    是一个只读的模板。如:一个镜像可以包含一个完整的操作系统环境,里面仅仅安装了python环境。
    镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

    容器(Container)

    Docker利用容器来运行应用。
    容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。
    每个容器都是相互隔离的、保证安全的平台。
    可以把容器看做是一个简易版的Linux环境和运行在其中的应用程序
    记住一个原则:容器只做运算,不做存储,就算连程序的代码也不要放到docker里(只是推荐,并非一定要这样
     
  • 相关阅读:
    LeetCode 345. Reverse Vowels of a String 题解
    LeetCode 344. Reverse String 题解
    LeetCode 27. Remove Element 题解
    LeetCode 61. Rotate List 题解
    LeetCode 19.Remove Nth Node From End of List 题解
    Android耗电量
    Android 使用adb查看和修改电池信息
    Android AOP AspectJ 插桩
    Flask相关用法
    Monkey日志信息的11种Event percentage
  • 原文地址:https://www.cnblogs.com/hf8051/p/11433736.html
Copyright © 2020-2023  润新知