初识Docker

很久之前就听过Docker这个词,蓝鲸鱼顶着一堆集装箱的图标给我印象很深,之前也看了一下介绍,没怎么懂。但是随着开发时间的增长,我也逐渐了解到了一些东西,在此我将这些东西写下来。

为什么要用Docker?

要了解一个新的概念,我们需要从应用场景去感性地了解一下这个东西地作用。

    情景1:开发过Java的同学应该体会过配置环境变量那种痛苦,配置一两次确实有助于我们了解环境变量的作用和机制。但是每次当我们换一台电脑就要配置一次,而且不仅限于Java,我之前尝试过CUDA环境变量配置,AndroidStudio环境变量配置,Python环境变量配置,apache环境变量配置,这种配置真的是浪费了大量的时间和精力,打代码的热情都减半了(要说是什么阻止了我敲代码的手,那配置环境变量脱不了干系)。
    
    情景2:现在服务器上挂着一个tomcat,里面跑着一个java web程序在读着mysql数据库。现在我们要升级mysql,或者对正在运行的网站的某些地方做修改,但是我又不能立刻下线,那么我们该怎么办呢?

有了如上的问题,我们先不急着了解如何去解决,我们来形象地了解docker,再看看docker地结构和运行机制

Docker是什么?

    先来说说大家熟悉的Java,Java是运行在JVM上的,所以有了“Write Once, Run Anywhere”的口号,有了平台无关的特性,而其他一些语言严重依赖平台,在不同平台下要重新编译才能运行。
    而软件的部署也依赖平台(Ubuntu的包在CentOS上就可能运行不了),和JVM类似,Docker就使用容器引擎解决了平台依赖的问题,它在每台宿主机上都启动了一个Docker的守护进程,守护进程屏蔽了与具体平台相关的信息,对上层应用提供了统一的结构。Docker的口号就是“Build once,Run anywhere,Configure once, run anything”。
    Docker会针对不同平台,解析给不同平台下的执行驱动、存储驱动和网络驱动去执行。

Docker的结构与特性

    拿安卓来说,这是个开源地手机操作系统,也是一个生态圈,它地App应用以apk形式打包、发布,可以运行在任何厂商地安卓机上。还有官方市场可供下载、上传app。
    Docker是一个开源容器引擎,也有自己地生态圈,它的应用以镜像发布,可以运行在任何装有Docker引擎的操作系统上。它有官方的镜像仓库,提供各种各样的应用,开发者也可以提交镜像到官方仓库。
  • 把Docker看作生态的话,它分两部分:Docker仓库和Docker自身程序,Docker相当于安卓系统,仓库相当于App商店。
  • 把Docker当作独立软件来看,它是用Golang写的,采用C/S架构

Docker化应用的存在形式

    我们关心的是什么,就是把软件运行起来。那么我们把软件和它依赖的环境、依赖的配置打包在一起放到官方仓库就行了。Docker的分层让这种方法变得简单很多:
       *操作系统层
       *依赖库和第三方软件层
       *应用软件包和配置文件层
       *空白层
    不同的应用共享者相同的层,如果某个应用要修改操作系统的某个配置,它就会在优先级最高的空白层添加,从而不会影响下层。

    镜像(Image)和容器(Container)
    从Docker仓库下载镜像,以镜像为模板,在一个容器类虚拟机中启动这个应用,这个叫容器。

解决情景景问题

    情景1:有了镜像和容器的概念,我们配好了环境做成镜像,然后就可以运行Container了。
    情景2:如果我们要升级mysql,我们先把整个程序分成3个Container运行,C1搭建tomcat,C2安装mysql,C3挂载mysql数据库文件路径,若要升级mysql,我们就可以run一个和C2一样的Container,对新的Container升级,再连接回去,没有任何影响。

个人观点

    说到底docker还是跑在Linux上的软件,对Linux上的开发、部署、维护有很大的帮助,其版本控制、环境隔离对软件开发和管理也很nice。
posted @ 2019-03-25 16:08  Spike3759  阅读(134)  评论(0编辑  收藏  举报