zoukankan      html  css  js  c++  java
  • 【Docker】Docker概述、理解docker的集装箱、标准化、隔离的思想、 docker出现解决了什么问题

    整理一下 慕课网 第一个docker化的java应用 Docker环境下的前后端分离项目部署与运维 课程时所做的笔记

    Docker概述

    docker - https://www.docker.com/

    在这里插入图片描述

    简介:Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上。

    Docker特别的火,技术大会那都少不了云计算,少不了docker,docker解决大部分企业的痛点,快速的持续集成,服务弹性伸缩,部署简单,解放了运维,为企业节省了机器资源,非常多的公司大规模使用docker。

    docker成为了IT人员的必备技能,做开发,做测试,做运维,绝大部都会接触到Docker,走进docker的世界。

    问:docker到底是干什么的呢?

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    还是不懂docker是什么为什么怎么用。。。一个容器?快速部署?,打包应用及依赖到一个可移植的容器,实现虚拟化?docker是一个用来装应用的容器,容器搞来搞去?

    Docker历史

    • 2010 dotCloud PAAS
    • 2013 docker开源
    • 2014.6 Docker 1.0
    • 2014.7 获得C轮融资 $4000W
    • 2015.4 获得D轮融资 $9500W
    • 不断发展中Docker

    2010年几个年轻人成立了一个做PAAS平台的公司dotCloud.起初公司发展的不错,不但拿到过一些融资,还获得了美国著名孵化器YCombinator的支持,后来微软谷歌亚马逊这样的大厂商也纷纷加入PAAS平台,竞争十分激烈,dotCloud举步维艰.幸运的事,上帝每关上一扇门,就会打开一扇窗。

    2013年可能是公司发展的不是很好,工程师又不想自己的努力付之东流,于是他们决定将他们的核心技术开源.这项技术就是docker.当时docker的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移。

    无心插柳柳成荫,docker技术风靡全球,于是dotCloud公司改名为docker Inc,并全面投入到docker的开发之中。

    2014.6 Docker发布了第一个版本 Docker1.0

    2014.7 获得C轮融资 $4000W

    2015.4 获得D轮融资 $9500W

    至今已经发布到docker v19.03.8 等等

    什么是docker?

    docker

    • Docker is the world’s leading software containerization platform.
    • Docker公司开发,开源,托管在Github
    • 跨平台,支持Windows、Mac OS,Linux

    https://github.com/moby/moby。

    docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以放笔,书包可以放书,可以把hello word放在docker中,可以把网站放入docker中,可以把任何想得到的程序放在docker中.

    Linux基础 docker很多命令都与git非常相似。

    了解docker的集装箱、标准化、隔离的思想

    用形象的类比说明docker的集装箱、标准化、隔离的思想。在用几个工作学习中碰到的问题说明docker解决了哪些问题。

    理解Docker

    Docker思想

    • 集装箱

    在这里插入图片描述
    喜欢docker的logo 集装箱的鲸鱼

    没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程序,目前我们要把程序部署到一台新的机器上,可能会启动不起来,比如少一些配置文件什么的或者少了什么数据,有了docker的集装箱可以保证我们的程序不管运行在哪不会缺东西。

    docker集装箱 程序直接运行

    • 标准化
    1. 运输方式

    docker运输东西有一个超级码头,任何地方需要货物都由docker鲸鱼先送到超级码头,然后再由docker鲸鱼从超级码头把货物送到目的地去.对应的技术来说,比如我们要把台式机的应用部署到笔记本上,我们可能选择用QQ发过去或者用U盘拷过去,docker就标准化了这个过程,我们只需在台式机上执行一个docker命令,把鲸鱼派过来,把程序送到超级码头去,再在笔记本上执行一个docker命令,然后由鲸鱼把程序从超级码头送到笔记本上去。

    运输标准化 docker标准化传输过程 执行docker命令就可完成发送传输

    1. 存储方式

    把程序拷贝到笔记本上时,指定一个目录,我们还要记住这个目录,因为下次我们可能还要修改改动东西继续传,有了docker之后就不用,我们就不用记住了程序在哪里了,存储标准化了,我们想使用运行的时候只需要执行一条命令就行了。

    存储标准化 想使用运行的时候只需要执行一条命令

    1. API接口

    docker提供了一系列rest api的接口,包含了对docker也就是对我们的应用的一个控制启动停止查看删除等等,如当我们要启动tomcat时我们要执行startup命令,当我们要停止时要执行shutdown命令,如果不是tomcat,我们可能还需要一些别的命令控制它.有了接口标准化,只需要执行同样的命令,就能控制所有的应用,有了docker,我们记docker的命令就可以对其进行操作.

    接口标准化 执行同样的命令控制所有的应用 记docker命令执行就好。

    • 隔离
      我们在使用虚拟机时有自己的cpu,硬盘,内存,完全感觉不到外面主机的存在,docker也差不多,不过它更轻量,可以实现快速的创建和销毁,创建虚拟机可能要几分钟,创建docker只需要一秒.最底层的技术时linux一种内核的限制机制,叫做LXC,LXC是一种轻量级的容器虚拟化技术.最大效率的隔离了进程和资源.通过cgroup,namespace等限制,隔离进程组所使用的物理资源,比如CPU,MEMORY等等,这个机制在7,8年前已经加入到linux内核了,直到2013年docker出世的时候才火起来,大家可能奇怪为什么这么好的技术埋没这么多年都没人发现呢?其实不是这样的,docker成功就像英雄造时势,时势造英雄,如果没有云计算,敏捷开发,高频度的弹性伸缩需求,没有IT行业这么多年长足的发展,也就没有docker.

    在这里插入图片描述

    docker出现解决了什么问题

    Docker解决了什么问题?

    系统环境不一致

    • 系统环境不一致

      开发:我本地没问题啊!运维:服务器正常运行也没问题啦.

      这个问题就变成了皮球,到谁被踢走

      如果一个应用要正常的启动起来需要什么?比如java web应用.

      需要一个操作系统,操作系统之上要jdk,tomcat,依赖于我们的代码,配置文件.

      操作系统的改变可能会导致我们的应用开不起来,比如我们调用了某些系统命令.jdk版本也可能导致程序的运行失败.比如class文件需要1.7编译的,机器上装了个1.6的jdk. 版本识别不了

      tomcat版本也能导致失败,比如旧的版本一些配置在新版本中不再支持.

      代码的话那就更有可能问题多多了,就比如应用了C盘,D盘的一个文件,或者是用了系统的一些环境编码等等

      配置的话也是一样,少了某些配置文件,和系统相关的,就是跑不起来.

      下面docker来了,它把操作系统,jdk,tomcat,代码,配置都一个个全部放到鲸鱼上集装箱里.再打包放到鲸鱼上,由鲸鱼给我们送到服务器上,在我的机器上怎么运行,在别的机器上也怎么运行.不会有任何的问题.一句话就是docker解决了运行环境不一致所带来的问题.

    系统卡

    • 系统好卡,哪个哥们又写死循环了
      如果大家有跟别人共用服务器的同学可能有这样的体会,莫名其妙发现自己的程序挂了,一查原因要不是内存不够了,要不是硬盘满了,还有就是发现某个服务变慢了,甚至敲终端都比较卡,但是linux本身就是一个多用户的操作系统本身就可以供多个用户人使用,docker的隔离性可以解决这个问题,它是怎么解决的呢?如果放在docker上运行,就算别人的程序还是死循环疯狂吃CPU,还是封装疯狂打日志,把硬盘占满, 还是内存泄漏,都不会导致我们的程序运行错误.因为docker在启动的时候就限定好了,它最大使用的CPU硬盘,如果超过了,就会杀掉对应进程.

    服务器顶不住

    • 双11来了,服务器撑不住了
      大部分系统业务量并不是每天都比较平均的,特别是一些电商系统,每天总有那么几天业务量是平时的几倍甚至几十倍,如果按双11的规模去准备服务器那么对于平时的规模来说又是极大的浪费,所以就在节日前临时扩展机器,过完节再把多余的节点下线,这就给运维带来了非常大的工作量,一到过节就在各个机器上部署各种各样的服务,我们启动程序需要java,tocmat等等装好多好多东西,并且还可能起不来还要调试,这是非常恶心的工作,有了docker一切都变得美好了,只要点一下鼠标,服务器就可以从10台变成100台甚至1000,1W台.都是分分钟的事情.

    为什么会这么快呢?

    都是用标准的方式把我们的程序运过来,下载过来,再用标准的方式把它运行起来,就可以做到只要在每台机器上都执行一两条命令,就可以让程序正常跑起来,并且不用担心有问题.

    总结一下docker的标准化就是快速扩展,弹性伸缩变得简单。

  • 相关阅读:
    Stochastic Gradient Descent 随机梯度下降法-R实现
    Gradient Descent 梯度下降法-R实现
    【转】Linux内核中分配4M以上大内存的方法
    【转】在Linux下写一个简单的驱动程序
    【转】内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages
    【转】uboot中的mmc命令
    【原】cmdline传递参数 uboot-->kernel-->fs
    【转】UBOOT——启动内核
    【转】Linux下的磁盘分区方法
    【转】linux下 如何切换到root用户
  • 原文地址:https://www.cnblogs.com/liuawen/p/12854029.html
Copyright © 2011-2022 走看看