总结对Docker这个东西的想法
记得一开始的时候,还只能在一些网站上看到关于Docker零星的一些消息,之后的不久,有关Docker消息就遍布网络。
是什么因素让Docker火起来的?
或者说什么原因促使大家都对Docker感兴趣并且开始运用的?
本文记录一下自己对Docker的一点见解,关于Docker是什么以及基本的操作网络上有大把大把的文献,或者参考这里:
这里就不再累述了。
首先需要明确的一点是,一个技术从诞生到流行,必定有其原因所在
并不是因为某种技术听起来叼叼的样子,或者说大家都在用我不用就跟不上时代
能被大众所认可,并广泛使用的,一定是解决了大部分人所烦恼的问题,或者改善了大部分人的应用现状的
而Docker正是如此,那么它到底解决了大家的哪些烦恼,如何让大家在用Docker的过程中感到有质的改善呢?
举一个简单的例子,相信很多开发人员都遇到过这样的问题:
要开发应用,那肯定要写代码的啊
要写代码,那肯定要配置某个语言的运行环境啊
再搞个好用的IDE,或者可以再装几个插件啥七七八八的
于是噼里啪啦的好不容易装好了,可以开始愉快地撸代码了
也许一段时间之内并没有什么问题出现
但是就在某一天(也许是很久很久之后的事情了),电脑好卡啊,想重新装个系统清静清静,或者来个更直接的,我要换一台更高配置的机器
那么问题就来了
是不是还要继续写程序咯
那是不是还要继续搭环境咯
那是不是还要继续装各种需要的软件咯
重新装?可以啊,下次再换系统再换电脑,每次都重新装过咯~
虽然现在很多图形化的工具可以帮人备份、还原、复制系统,但是这一般都是给个人PC机用的,如果是服务器要进行迁移什么的,怎么破?
这是第一个问题,环境配置的重复工作和繁杂性
接下来看看第二个问题
我在服务器上挂着一个tomcat,里面跑着一个java web程序在读着mysql数据库,原本是好好的没啥问题是吧
现在问题又来了我要对mysql升级一下,升级就升级吧,但是问题是我这个东西是已经在跑着了,有人用着呢,难道不顾用户的死活直接就升了吗,而且升级完敢百分百保证一点问题都没有吗
有人就会问了,好好的没事升级啥啊
= =有时候偏偏就有这种需求,新版本性能更好啊,支持的功能更多啊,巴拉巴拉的。。。
这是第二个问题,局部部件升级或更改的隐患
上面两个问题是比较切实而且确实是不好解决的
就以这两个问题为例,开始聊聊Docker是怎么做的
了解过Docker的人应该都知道Image和Container的概念,简单的说可以把Image看成是一个压缩包(生活中很常见的把,rar、zip、gz神马的)
你要用的时候呢,就解压缩,很简单,然后就开始愉快的使用里面的文档资料啥的
可能你觉得光看很不爽,因为这个文档写的太糟糕,所以你就发挥才华狠狠地修改了一通,然后又压缩变成另外一个压缩包
so,Image就是压缩包,Container就是解压缩出来的文档,修改之后还可以再次变成Image,然后Image又可以再次使用。。。此处无限循环自行脑补~
那么第一个问题就解决了啊
啥?没看懂?
对于第一个问题,Docker是这么干的:
你拉一个最基本的Image嘛,run一个Container出来,爱装啥装啥,跟自己的服务器一样操作,装好了再保存为一个Image不就完事了嘛
服务器要迁移?
你把这个Image拷过去再run一个Container不就是一个一模一样的环境了嘛
OK,搞定一个
还是看mysql升级的问题
之前我可能是这么干的:
搞一台Linux服务器,搭个tomcat、装个mysql,然后把java web程序部署到tomcat上面去,搞定走你~
再来看看Docker是怎么做的:
还是整一台服务器是吧,这是必须的
但是我不直接装tomcat、mysql啥的了
我先装Docker!
run一个Container是吧,关键的时刻来了,哎呀,一个Container也,那我就可以在里面装各种各样的东西了,跟自己的服务器操作一样嘛~
真这么干就完了,那你还是直接装在服务器上面吧= =
我要run出三个Container出来!
Container1:
搭tomcat,把webapps(放网站程序的地方)挂载在服务器上的某个路径(放程序的地方)
为何这么做?
首先,直接把程序放到Container中也不是不行,但是程序是会经常变化的,而Docker提供了可以直接将物理路径映射到Container中的方法,将会变化的程序放在物理路径上,Container再去访问岂不更好?
Container2:
安装mysql,其他啥都不做了
Container3:
这个更彻底了,我就挂载mysql的数据库文件的那个路径,啥都没有了
Container1中的tomcat跑着java web程序
java web程序通过Container之间互相暴露的IP和端口访问Container2中的mysql
Container2中的mysql的数据库文件是读Container3中的
Container3其实又是挂载着服务器的物理路径的(存放mysql数据库文件的真实路径)
那么看起来很复杂的一个流程,现在关键点来了,mysql要升级了
呵呵,我直接升级Container2中的mysql
我在run一个跟Container2一样的Container,我对这个新的Container里面的mysql升级!升级完连Container3中的数据库文件!
原来的mysql没有受到任何影响,数据库文件也不会因为升级受到牵连,
升级完事之后,Container1连到新版本mysql所在的Container,万事大吉~就算真的真的新版本出毛病了,重新切回去Container2就是了呗~
Docker就是这么被用来解决问题的,处理方式和传统的方式大有区别,但是确实能够带来方便和快捷
想想这样一个应用场景:
一个分布式集群不够用了,原本我需要在搞几台机器或者虚拟机装啊配啊地扩展(而且就算是配置强大的机器,虚拟机起的个数也是少少的,数的过来的)
现在不用了,我刷地一下起了N个Container!
然后就没有然后了…
再想想这样一个应用场景:
开发的时候一个环境,如果测试的人不是你,然后测试人员又要搭一个一样的环境来测试程序,更恐怖的是,发布上线的时候又要保持这个环境的问题
现在也不用这么干了,一个Image,开发的时候run一个Container,测试的时候、发布上线的时候…
这里的目的也不是想一下子就成为Docker砖家啊啥的
仅仅是作为一个引子,指出Docker为什么会被广泛接受,其应用场景可以是哪些
至于对Docker的应用
反正大家都是是八仙过海各显神通
能玩成什么样就看你想玩什么样~
总结对Docker这个东西的想法的更多相关文章
- Docker 监控的一点想法
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路. 1.关于监控的内容 监控宿主机本身 监控宿主机本身还是比较简单的,同其他服务器监控类似,对c ...
- docker监控的一点想法
目前项目内部署了docker,于是涉及到关于监控的事情,参考一些经典实例以及一些自己的想法,总结一下思路. 1.关于监控的内容 监控宿主机本身 监控宿主机本身还是比较简单的,同其他服务器监控类似,对c ...
- 【Docker】Docker概述
[Docker] Docker可以说是近几年非常热门的技术之一了.不管是别人敦促我还是从自己的想法来说,都觉得Docker这玩意儿肯定是要好好学习一下的,无奈没啥时间专门播出来给Docker,一直以来 ...
- 从零开始构建docker基础镜像
段子 今年基本已经结束了,我问了很多朋友今年挣钱了没?大多朋友都有挣,而且挣得五花八门:有挣个屁的,有挣个锤子的,有挣个毛的,更有甚者挣个妹的,奢侈之极!最恐怖的是挣个鬼的!有的还可以,挣个球,下午我 ...
- 深入解读docker网络与kubernetes网络
前言:你是否学习使用k8s很久很久了可是对于网络这块仍旧似懂非懂呢? 您是否对网上一堆帖子有如下的抱怨: 打开多个博客,然后发现有区别么? 明显是直译过来的,越看越迷糊 “因为xxx,所以yyy”,. ...
- 【Docker】Docker概述、理解docker的集装箱、标准化、隔离的思想、 docker出现解决了什么问题
整理一下 慕课网 第一个docker化的java应用 Docker环境下的前后端分离项目部署与运维 课程时所做的笔记 Docker概述 docker - https://www.docker.com/ ...
- 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...
- Docker 入门指南
Docker 入门指南 目录 基础概念 安装教程 基本操作 常用安装 构建操作 容器编排 壹.基础概念 什么是Docker? Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装 ...
- 【云计算】docker的小知识,帮你更深入理解容器技术
关于docker的15个小tip 1. 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu e ...
随机推荐
- strcpy函数的实现【转】
转自:http://www.cnblogs.com/chenyg32/p/3739564.html 已知strcpy函数的原型是: char *strcpy(char *dst, const char ...
- mvn常用的构建命令
mvn -v 查看maven版本 mvn compile 编译 mvn test 测试 mvn package 打包 mvn clean 删除target mvn install 安装jar包到本地仓 ...
- hdu 1411(四面体的体积)
校庆神秘建筑 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- Python 进阶 之 map()函数
map()函数主要功能是对批量的元素进行相同的操作时可以大幅度的缩减代码. map函数参数详解: map(param1,param2,***) param1:函数名 ,要对批量元素进行处理的funct ...
- 《深入理解Java虚拟机》学习笔记
<深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程 ...
- ORACLE中通过DBMS_CRYPTO包对表敏感字段进行加密
http://doc.primeton.com/pages/viewpage.action?pageId=4917998
- firefox中outlook.com页面卡顿的原因
在火狐中使用outlook.com时,鼠标点击动作后,页面会卡顿一段时间,每次点击都是如此. 因为之前火狐出现由于硬件加速导致页面卡顿的情况,因此第一反应就是关闭硬件加速. 果然,关闭硬件加速后,页面 ...
- 能Ping通外网但就是不能打开所有网页的解决办法
我碰到过两台电脑有这个问题.打百度的ip可以,但打网址不行.我记得是某个木马改动了三个dll文件,然后你电脑删了该木马,却没有恢复那三个dll所致.你google下dns恢复,注册dll关键字,一共要 ...
- 备份文件的python脚本(转)
作用:将目录备份到其他路径.实际效果:假设给定目录"/media/data/programmer/project/python" ,备份路径"/home/diegoyun ...
- HDU 5695 Gym Class && 百度之星 初赛 1006
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5695 本文链接:http://www.cnblogs.com/Ash-ly/p/5515234.htm ...