zoukankan      html  css  js  c++  java
  • 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里(只是推荐,并非一定要这样
     
  • 相关阅读:
    django文章对本项目有用的收集
    C#Selenium常用语法功能 很好的文章,值得参考收藏
    C# selenium 高级
    隐士等待与显示等待
    技术不可持续性所面对的挑战及解决方案
    机器人语言特性探索2-正在发生的趋势
    下一个十年计划,兼谈上十年的总结
    机器人语言特性探索1-总体方向
    中国文化
    网络化沟通及协作的人机交互编程语言-机器人语言5(总结)
  • 原文地址:https://www.cnblogs.com/hf8051/p/11433736.html
Copyright © 2011-2022 走看看